Was ist eine u-Boot-dtb-Datei und wie verwende ich sie (BeagleBoard xM)?

41918
Jeremy

Ich versuche, ein benutzerdefiniertes Linux für ein BeagleBoard xM (Rev. C) zu erstellen. Ich mache viel C / C ++, bin aber ein Anfänger beim Erstellen und Installieren von Linux von Grund auf.

Ich habe die Yocto Project Build Appliance ( https://www.yoctoproject.org/ ) verwendet, die vielversprechend schien - sie erstellte Dateien für den Bootloader u-Boot, den Linux-Kernel und das Root-Dateisystem.

Diese Seite enthält Anweisungen zum Einrichten der Micro-SD-Karte mit den von Yocto generierten Dateien. Die Bilddateien enthalten jedoch eine ".dtb" -Datei, die in den Installationsanweisungen nicht erwähnt wird.

Hat diese Datei etwas mit der Boardhardware zu tun? Verschiedene Websites erwähnen das Laden von dtd-Dateien (möglicherweise in uEnv.txt?), Aber ich habe keine detaillierten Informationen gefunden.

Ich habe die obigen Anweisungen benutzt, um die Bootpartition mit MLO und u-boot.img einzurichten, und habe etwas mit der uEnv.txt herumgespielt. Ich habe auch eine zweite Partition mit dem Root-Dateisystem eingerichtet.

Ich konnte booten und einloggen (über die serielle Port-Konsole), aber es sah so aus, als ob die meisten Board-Hardware - z. B. Video und alle USB-Geräte einschließlich Ethernet - nicht funktionierten. Könnte dies sein, weil ich die .dtb-Datei nicht verwendet habe?

Kann jemand das dtb erklären und wie man es auf einem Beagle-Board benutzt? Vielen Dank!

11
Es stellt sich heraus, dass ich den Dateinamen falsch gelesen habe - ich dachte ursprünglich, es wäre eine ".dtd" -Datei, aber es ist tatsächlich ".dtb". Deswegen konnte ich keine Informationen darüber finden. Die Frage wurde nun aktualisiert. Jeremy vor 10 Jahren 0
Minimales Beispiel mit einem virtuellen QEMU-Gerät zum besseren Verständnis des Konzepts: https://stackoverflow.com/questions/17488320/how-to-program-linux-dts-device-tree-files/44994940#44994940 Ciro Santilli 新疆改造中心 六四事件 法轮功 vor 7 Jahren 0

2 Antworten auf die Frage

12
Jeremy

Ich habe meine eigene Frage beantwortet, nachdem ich herausgefunden habe, wonach ich suchen soll. Eine "dtb" -Datei enthält einen Device Tree Blob (oder Binary) (schöne Beschreibung hier ). Dies ist der neue Weg, um Hardware-Informationen über das Board an den Linux-Kernel zu übergeben.

Es kann in den Speicher geladen und von u-Boot an den Kernel übergeben werden.

Hier sind die U-Boot-Befehle, die ich verwendet habe:

setenv bootargs 'console=tty0 console=ttyO2,115200n8 root=/dev/mmcblk0p2 rootwait rootfstype=ext4 rw' fatload mmc 0:1 0x80300000 zImage fatload mmc 0:1 0x815f0000 beagle-xm.dtb bootz 0x80300000 - 0x815f0000 

zImage ist der Kernel und beagle-xm.dtb der Device-Tree-Blob. Ich habe den Bootvorgang durch das Einrichten einer "uenvcmd = ..." - Variable in uEnv.txt (mit der obigen Angabe) automatisiert, aber es ist etwas hässlich und es gibt wahrscheinlich bessere Möglichkeiten.

Beachten Sie, dass dies startet und sagt, dass der Gerätebaum OK geladen wurde. Ich habe jedoch noch keine USB-Geräte oder Videos (soweit ich das beurteilen kann). Ich vermute jedoch, dass dies ein anderes Problem sein kann.

Es ist die neue (er) Methode, um Hardware-Informationen über das Board an den Linux-Kernel zu übergeben. Es gab bisher keine Möglichkeit, Hardware-Informationen an den Kernel zu übergeben. Stattdessen müsste der Kernel alle Informationen statisch einschließen und hätte daher eine boardspezifische C-Datei, um alle diese Zuordnungen aufzulisten. Aus der Sicht des Kernels war dies ein Albtraum für die Wartung. BatchyX vor 10 Jahren 2
Vielen Dank! Ich habe herausgefunden, wie man die dtb-Datei lädt, und Linux wird jetzt hochgefahren und gibt verschiedene Meldungen über das Laden von Treibern aus. Ich kann jedoch keine USB-Geräte (einschließlich des Ethernet-Moduls) sehen. Siehe neue Frage: [link] (http://superuser.com/questions/740322/how-do-i-get-usb-devices-working-with-beagleboard-xm-und-yocto-project-linux). Vielleicht muss ich unter Linux etwas manuell konfigurieren? Jeremy vor 10 Jahren 0
Aber welche Adresse soll für die dtb-Datei verwendet werden? Wenn mein zImage beispielsweise an Adresse 0x43000000 geht (anstelle des obigen Beispiels über 0x80300000), wohin sollte dtb gehen? André van Schoubroeck vor 8 Jahren 0
2
Damian Manda

Ich verwende Ubuntu 14.04 auf dem Beaglebone Black, daher ist mein Setup möglicherweise etwas anders, aber hier habe ich ein benutzerdefiniertes dtb geladen:

Fügen Sie in uEnv.txt eine Zeile hinzu mit: dtb=name-of-desired.dtb

Die gesuchten Orte sollten wie hier angegeben sein . Für mich war /boot/dtbs/linux-kernel/hier der Linux-Kernel der Name der geladenen Version.