Warum generieren Sie kein neues dtb?
DTB (Device Tree Blob/Binary) ist eine Hardwaredatenbank, die die Hardwarekomponenten des Boards darstellt.
U-Boot übergibt die Board-Informationsstruktur an den Kernel, die von der Header-Datei in U-Boot abgeleitet wird.
DTB wird von dem speziellen Compiler kompiliert, der die Binärdatei in der richtigen Form erzeugt, damit U-Boot und Linux sie verstehen können.
DTC (Device Tree Compiler) übersetzt die Gerätebaumdatei in die maschinenlesbare Binärdatei, die U-Boot und der Linux-Kernel verstehen können.
Die unkomplizierte Art, DTC zu verwenden.
$ dtc -O dtb -o arm_board.dtb -b 0 arm_board.dts
um den Gerätebaum als Text vom dtb zu bekommen.
dtc -I dtb -O dts arm_board.dtb
board.dts ist eine Binärdatei, die mit dem obigen Befehl erstellt wurde. -O
gibt das Ausgabeformat an. -o
Flag ist die Ausgabedatei. -b 0
gibt die physische Boot-CPU an.
Dann tun
$ make ARCH=arm arm_board.dtb
Ein anderer Ansatz könnte darin bestehen, einfach make dtbs
zu verwenden dies wird dtc aufrufen. arch/arm/boot/dts/Makefile
listet auf, welche DTBs zur Erstellungszeit generiert werden sollen. Dies ist eine andere Möglichkeit, sie zu kompilieren. make wird das an dieser Stelle des Kernelbaums /arch/arm/boot/dts
ablegen
Sehen Sie sich diesen Gerätebaum für Dummies an
Ich möchte dies nur mit 2 Jahren mehr Erfahrung zu diesem Thema aktualisieren.
Die DTS-Dateien im Linux-Repository sind eine Mischung aus DTS und C-Präprozessordirektiven (#include, #define usw.). Wenn also der ursprüngliche DTB kompiliert wird, verknüpft der Präprozessor die referenzierten Dateien, um eine reine DTS-Datei zu erstellen. dtc
konvertiert die einzelne DTS-Datei in eine DTB-Datei.
Wenn Sie also eine Kernel-DTS-Datei ändern und kompilieren möchten, haben Sie zwei Möglichkeiten:
- Führen Sie einfach
make dtbs
aus die das alles automatisch erledigt - Führen Sie den Präprozessor manuell aus (
cpp -nostdinc -I <include dir> -undef -x assembler-with-cpp ...
) und dann die Ausgabe mitdtc
kompilieren .