Comúnmente para sistemas de brazo, los árboles de dispositivos suministran información de hardware al núcleo (Linux). Estos árboles de dispositivos existen como archivos dts (fuente del árbol de dispositivos) que se compilan y cargan en el núcleo. El problema es que no tengo acceso a dicho dts
archivo, ni siquiera a un dtb
archivo.
Tengo acceso a /sys
, y /proc
en la máquina y que quería preguntar si eso me permitiría "adivinar los valores correctos" para ser utilizados en una EDE?
Además, la respuesta potencial podría resaltar adicionalmente el aspecto si la respuesta a esta pregunta también depende de si la interfaz del árbol de dispositivos se utilizó en primer lugar (es decir, dtb
se creó y se proporcionó al núcleo) en lugar de algo más de piratería "simplemente nos desviamos de la vainilla y parchear el kernel para resolver el problema de información del dispositivo solo para nuestro kernel "-solution?
fuente
Respuestas:
/proc/device-tree
o/sys/firmware/devicetree/base
Creo que ambos son alias,
/sys/firmware/devicetree/base
probablemente sea la mejor opción después de la domesticación/proc
.Luego puede acceder a las propiedades dts desde los archivos:
El formato de salida para enteros es binario, por lo que
hexdump
es necesario.dtc -I fs
Obtenga un árbol de dispositivos completo del sistema de archivos:
saca los dts a stdout.
Consulte también: Cómo enumerar el Árbol de dispositivos del núcleo | Intercambio de pila de Unix y Linux
dtc
en BuildrootBuildroot tiene una
BR2_PACKAGE_DTC=y
configuración para ponerdtc
dentro del sistema de archivos raíz.QEMU
-machine dumpdtb
Si está ejecutando Linux dentro de QEMU, QEMU genera automáticamente los DTB si no los proporciona explícitamente
-dtb
, por lo que también puede volcarlos directamente con:como se menciona en: https://lists.gnu.org/archive/html/qemu-discuss/2017-02/msg00051.html
Probado con esta configuración QEMU + Buildroot en el kernel de Linux v4.19 arm64.
fuente
No estoy seguro si te entiendo correctamente.
Si está en un sistema que se inició con un dtb, su árbol de dispositivos debería ser accesible desde debugfs.
También puede probar las herramientas dtc de Pantelis Antoniou, que incluyen fdtdump y fdtget que imprimen dts desde un blob.
Si no tiene un árbol de dispositivos en absoluto y no inició el arranque desde un dtb, deberá revisar el código de la máquina usted mismo y agregar todos los atributos y nodos específicos del dispositivo a sus dts. No existe un árbol de dispositivos "sintéticos" generado para tal arranque. Un punto de partida sería una máquina o padre similar y luego trabajar a su manera sistema por sistema.
fuente
dtb
podría ser accesible a través de a través de los debugfs sin embargo, que se basaría enCONFIG_DEBUG_FS
en.config
e incluso si se ha ajustado todavía en el mero capricho que en realidad utilizaron unadtb
para empezar, puedo leer este derecho? Así que con algo de "mala suerte" no hicieron nada y usaron algún tipo de parcheo directo del kernel en lugar de la interfaz del árbol de dispositivos, ¿verdad? Entonces esto significaría que el último recurso sería el código de la máquina, dado que violan GPLv2 y cierran la fuente del núcleo, ¿verdad?