Ist es möglich, die Informationen für einen Gerätebaum mit / sys eines laufenden Kernels abzurufen?


20

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 dtsDatei habe, auch nicht auf eine dtbDatei.

Ich habe Zugriff auf /sysund /procauf 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 dtbwurde 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?


Haben Sie Zugriff auf das Boot-Image? Sie können den Gerätebaum von dort extrahieren. Ich kann helfen.
Phk

Antworten:


27

/proc/device-tree oder /sys/firmware/devicetree/base

Ich denke, beide sind Aliase, /sys/firmware/devicetree/basewahrscheinlich die bessere Wahl nach der Zähmung von /proc.

Sie können dann von Dateien aus auf dts-Eigenschaften zugreifen:

 hexdump /sys/firmware/devicetree/base/apb-pclk/clock-frequency

Das Ausgabeformat für Ganzzahlen ist binär und wird daher hexdumpbenötigt.

dtc -I fs

Holen Sie sich einen vollständigen Gerätebaum aus dem Dateisystem:

sudo apt-get install device-tree-compiler
dtc -I fs -O dts /sys/firmware/devicetree/base

gibt die dts auf stdout aus.

Siehe auch: So listen Sie den Kernel Device Tree | auf Unix & Linux Stack Exchange

dtc in Buildroot

Buildroot hat eine BR2_PACKAGE_DTC=yKonfiguration, die dtcim 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 :

qemu-system-aarch64 -machine virt -cpu cortex-a57 -machine dumpdtb=dtb.dtb

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.


4

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.


Danke, um zu klären. Es besteht die Möglichkeit, dass der dtbZugriff über die Debug-Dateien möglich ist, die sich jedoch auf " CONFIG_DEBUG_FSin" stützen, .configund selbst wenn sie sich immer noch auf die bloße Laune stützen , mit der sie eigentlich dtbbegonnen 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?
humanityANDpeace

Ja und ja für die ersten beiden. Zuletzt IANAL, aber der Maschinenbogen / ??? / mach - ??? / board - ???. C würde die speziellen Geräte enthalten, die für eine Maschine in älteren Kerneln vorhanden sind. Dies sollte durch die GPL abgedeckt sein und gegen eine Gebühr verfügbar sein. Einzelne Gerätetreiber sind möglicherweise Closed-Source-Geräte, es liegt kein Verstoß vor.
FRob
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.