Gemeinhin für Armsystemen, Geräte Bäume liefern Hardware - Informationen an den Kernel (Linux). Diese Gerätebäume existieren als DTS-Dateien (Device Tree Source), die kompiliert und in den Kernel geladen werden. Problem ist, dass ich keinen Zugriff auf eine solche dts
Datei habe, auch nicht auf eine dtb
Datei.
Ich habe Zugriff auf /sys
und /proc
auf die Maschine und wollte fragen, ob dies mir erlauben würde, "die richtigen Werte zu erraten", um in einem dts verwendet zu werden.
Auch eine mögliche Antwort könnte den Aspekt zusätzlich hervorheben, wenn die Antwort auf diese Frage auch davon abhängt, ob die Gerätebaumschnittstelle an erster Stelle verwendet wurde (dh eine dtb
wurde erstellt und dem Kernel bereitgestellt), anstatt etwas mehr zu hacken. "Wir lenken einfach von Vanille ab und patchen Sie den Kernel, um das Geräteinformationsproblem für unsere "Nur-Kernel" -Lösung zu lösen?
quelle
Antworten:
/proc/device-tree
oder/sys/firmware/devicetree/base
Ich denke, beide sind Aliase,
/sys/firmware/devicetree/base
wahrscheinlich die bessere Wahl nach der Zähmung von/proc
.Sie können dann von Dateien aus auf dts-Eigenschaften zugreifen:
Das Ausgabeformat für Ganzzahlen ist binär und wird daher
hexdump
benötigt.dtc -I fs
Holen Sie sich einen vollständigen Gerätebaum aus dem Dateisystem:
gibt die dts auf stdout aus.
Siehe auch: So listen Sie den Kernel Device Tree | auf Unix & Linux Stack Exchange
dtc
in BuildrootBuildroot hat eine
BR2_PACKAGE_DTC=y
Konfiguration, diedtc
im Root-Dateisystem abgelegt werden kann .QEMU
-machine dumpdtb
Wenn Sie Linux in QEMU ausführen, generiert QEMU die DTBs automatisch, wenn Sie sie nicht explizit mit angeben
-dtb
, und kann sie daher auch direkt mit folgendem Befehl sichern :wie erwähnt unter: https://lists.gnu.org/archive/html/qemu-discuss/2017-02/msg00051.html
Getestet mit diesem QEMU + Buildroot-Setup auf dem Linux-Kernel v4.19 arm64.
quelle
Ich bin mir nicht sicher, ob ich dich richtig verstehe.
Wenn Sie sich auf einem System befinden, das mit einer dtb gestartet wurde, sollte Ihre Gerätestruktur in debugfs verfügbar sein.
Sie können auch die dtc-Tools von Pantelis Antoniou ausprobieren. Dazu gehören fdtdump und fdtget, die dts aus einem Blob drucken.
Wenn Sie überhaupt keinen Gerätebaum haben und nicht von einer dtb gebootet haben, müssen Sie den Maschinencode selbst durchgehen und alle gerätespezifischen Attribute und Knoten zu Ihrem dts hinzufügen. Für einen solchen Start wird kein "synthetischer" Gerätebaum generiert. Ein Ausgangspunkt wäre eine ähnliche Maschine oder ein übergeordnetes Element, das sich dann systemweise nach Ihren Wünschen verhält.
quelle
dtb
Zugriff über die Debug-Dateien möglich ist, die sich jedoch auf "CONFIG_DEBUG_FS
in" stützen,.config
und selbst wenn sie sich immer noch auf die bloße Laune stützen , mit der sie eigentlichdtb
begonnen haben, lese ich das richtig? Mit etwas "Pech" taten sie es auch nicht und verwendeten irgendeine Art von direktem Kernel-Patching, das über die Device Tree-Oberfläche installiert wurde, auch richtig? Das würde also bedeuten, dass der letzte Ausweg der Maschinencode ist, da er gegen die GPLv2 verstößt und den Kernel schließt, oder?