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

13

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

Ich habe die Yocto Project Build Appliance ( https://www.yoctoproject.org/ ) verwendet, die vielversprechend erschien - sie erstellte Dateien für den U-Boot-Bootloader, 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 Einrichtungsanweisungen nicht erwähnt wird.

Hat diese Datei etwas mit der Board-Hardware zu tun? Verschiedene Sites erwähnen das Laden von dtd-Dateien (vielleicht in uEnv.txt?), Aber ich habe keine detaillierten Informationen gefunden.

Ich habe die obigen Anweisungen verwendet, um die Boot-Partition mit MLO und u-boot.img einzurichten, und ein bisschen mit der Datei uEnv.txt herumgespielt. Ich habe auch eine zweite Partition mit dem Root-Dateisystem eingerichtet.

Ich konnte booten und mich anmelden (über die serielle Anschlusskonsole), aber es sah so aus, als ob die meiste Board-Hardware - z. B. Video und alle USB-Geräte einschließlich Ethernet - nicht funktionierten. Könnte dies daran liegen, dass ich die .dtb-Datei nicht verwendet habe?

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

Jeremy
quelle
Es stellt sich heraus, dass ich den Dateinamen falsch gelesen habe - ich dachte ursprünglich, es sei eine ".dtd" -Datei, aber es ist WIRKLICH ".dtb" - weshalb ich keine Informationen darüber finden konnte. Die Frage wurde nun aktualisiert.
Jeremy
Minimales Beispiel mit QEMU virtuellem Gerät, um das Konzept besser zu verstehen: stackoverflow.com/questions/17488320/…
Ciro Santilli Am

Antworten:

13

Beantwortung meiner eigenen Frage, nachdem ich herausgefunden hatte, wonach ich suchen sollte. Eine "dtb" -Datei enthält ein Device Tree Blob (oder Binary) (nette Beschreibung hier ). Dies ist die neue Möglichkeit, Hardware-Informationen über das Board an den Linux-Kernel weiterzuleiten.

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

zBild ist der Kernel, und beagle-xm.dtb ist der Gerätebaum-Blob. Ich habe den Startvorgang automatisiert, indem ich eine "uenvcmd = ..." - Variable in der Datei "uEnv.txt" eingerichtet habe (mit den oben genannten), aber es ist ein bisschen hässlich und es gibt wahrscheinlich bessere Möglichkeiten.

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

Jeremy
quelle
3
Dies ist die neue Möglichkeit, Hardware-Informationen über das Board an den Linux-Kernel weiterzuleiten. Bisher gab es keine Möglichkeit, Hardwareinformationen an den Kernel zu übergeben. Stattdessen müsste der Kernel alle Informationen statisch einschließen und hätte daher eine bordspezifische C-Datei, um alle diese Zuordnungen aufzulisten. Dies war aus Sicht des Kernels ein Wartungs-Albtraum.
BatchyX
Vielen Dank! Ich habe herausgefunden, wie die dtb-Datei geladen wird, und Linux startet jetzt und gibt verschiedene Meldungen zum Laden von Treibern aus, aber ich kann keine USB-Geräte (einschließlich des Ethernet-Moduls) erkennen. Siehe neue Frage: Link . Vielleicht muss ich etwas in Linux manuell konfigurieren?
Jeremy
Aber welche Adresse soll für die dtb-Datei verwendet werden? Wenn mein zImage beispielsweise an die Adresse 0x43000000 (anstelle des obigen Beispiels 0x80300000) geht, wohin soll der dtb gehen?
André van Schoubroeck
2

Ich verwende Ubuntu 14.04 auf dem Beaglebone Black, daher ist mein Setup möglicherweise etwas anders, aber so habe ich eine benutzerdefinierte DTB geladen:

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

Die Standorte gesucht sollte angegeben werden als hier . Für mich war /boot/dtbs/linux-kernel/das der Name der geladenen Version des Linux-Kernels.

Damian Manda
quelle
0

Beachten Sie, dass es 2 dtb gibt. Der U-Boot-DTB und der Kernel-DTB. Das sind 2 verschiedene Dinge. U-Boot-Board dts / dtb wird nicht immer verwendet, ist nicht obligatorisch. Übrigens können Sie das "U-Boot" -Dtb verwenden, um es in U-Boot einzubetten oder mit U-Boot zu verknüpfen.

Angelo Dureghello
quelle