Qu'est-ce qu'un fichier u-Boot dtb et comment l'utiliser (BeagleBoard xM)?

13

J'essaie de construire un Linux personnalisé pour un BeagleBoard xM (Rev. C). Je fais beaucoup de C / C ++ mais je suis un débutant dans la construction et l'installation de Linux à partir de zéro.

J'ai utilisé l'appliance de construction Yocto Project ( https://www.yoctoproject.org/ ) qui semblait prometteuse - il a construit des fichiers pour le chargeur de démarrage u-Boot, le noyau Linux et le système de fichiers racine.

Cette page donne des instructions pour configurer la carte micro SD avec les fichiers générés par Yocto. Cependant, les fichiers image incluent un fichier ".dtb" qui n'est pas mentionné dans les instructions de configuration.

Ce fichier a-t-il quelque chose à voir avec le matériel de la carte? Divers sites mentionnent le chargement de fichiers dtd (peut-être dans uEnv.txt?) Mais je n'ai trouvé aucune information détaillée.

J'ai utilisé les instructions ci-dessus pour configurer la partition de démarrage avec MLO et u-boot.img, et j'ai un peu dérangé avec le uEnv.txt. J'ai également mis en place une deuxième partition avec le système de fichiers racine.

J'ai pu démarrer et me connecter (via la console du port série), mais il semblait que la plupart du matériel de la carte - par exemple, la vidéo et tous les périphériques USB, y compris Ethernet - ne fonctionnaient pas. Serait-ce parce que je n'utilisais pas le fichier .dtb?

Quelqu'un peut-il expliquer la dtb et comment l'utiliser sur une planche beagle? Merci!

Jeremy
la source
Il s'avère que j'ai mal lu le nom du fichier - je pensais à l'origine que c'était un fichier ".dtd" mais il est en fait ".dtb" - c'est pourquoi je n'ai pas pu trouver d'informations à ce sujet. La question a maintenant été mise à jour.
Jeremy
Exemple minimal avec un périphérique virtuel QEMU pour mieux comprendre le concept: stackoverflow.com/questions/17488320/…
Ciro Santilli 事件 改造 中心 法轮功 六四 事件

Réponses:

13

Répondre à ma propre question, après avoir trouvé quoi rechercher. Un fichier "dtb" contient un Device Tree Blob (ou Binaire) (belle description ici ). C'est la nouvelle (er) façon de transmettre des informations matérielles sur la carte au noyau Linux.

Il peut être chargé en mémoire et transmis au noyau par u-Boot.

Voici les commandes u-Boot que j'ai utilisées:

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 étant le noyau et beagle-xm.dtb étant le blob de l'arborescence des périphériques. J'ai automatisé le processus de démarrage en configurant une variable "uenvcmd = ..." dans uEnv.txt (avec ce qui précède), mais c'est un peu moche et il y a probablement de meilleures façons.

Notez que cela démarre et indique qu'il a chargé l'arborescence des périphériques OK. Cependant, je n'ai toujours ni périphérique USB ni vidéo (pour autant que je sache). Cependant, je soupçonne que cela peut être un problème différent.

Jeremy
la source
3
C'est la nouvelle (er) façon de transmettre des informations sur le matériel de la carte au noyau Linux. Il n'y avait aucun moyen antérieur de transmettre des informations sur le matériel au noyau. Au lieu de cela, le noyau devrait inclure statiquement toutes les informations et aurait donc un fichier C spécifique à la carte pour répertorier tous ces mappages. Ce fut un cauchemar de maintenance du point de vue du noyau.
BatchyX
Merci! J'ai compris comment charger le fichier dtb, et Linux démarre maintenant et émet divers messages sur le chargement des pilotes, mais je ne vois aucun périphérique USB (y compris le module Ethernet). Voir nouvelle question: lien . Peut-être qu'il y a quelque chose que je dois configurer manuellement sous Linux?
Jeremy
Mais quelle adresse utiliser pour le fichier dtb? Par exemple, si mon zImage va à l'adresse 0x43000000 (à la place de l'exemple ci-dessus 0x80300000), où doit aller la dtb?
André van Schoubroeck
2

J'utilise Ubuntu 14.04 sur le beaglebone noir, donc ma configuration peut être un peu différente, mais voici comment j'ai chargé une dtb personnalisée:

Dans uEnv.txt, ajoutez une ligne avec: dtb=name-of-desired.dtb

Les emplacements recherchés doivent être tels que spécifiés ici . Pour moi, c'est /boot/dtbs/linux-kernel/là que linux-kernel est le nom de la version chargée.

Damian Manda
la source
0

Notez qu'il y a 2 dtb. La dtb u-boot et la dtb du noyau. Ce sont 2 choses différentes. La carte U-boot dts / dtb n'est pas toujours utilisée, pas obligatoire, btw dans u-boot vous pouvez utiliser la dtb "u-boot" en l'intégrant dans u-boot ou en la concaténant en u-boot.

Angelo Dureghello
la source