Che cos'è un file dtb u-Boot e come si usa (BeagleBoard xM)?


13

Sto cercando di creare un Linux personalizzato per un BeagleBoard xM (Rev. C). Faccio molto C / C ++ ma sono un principiante nella creazione e installazione di Linux da zero.

Ho usato l'appliance di build di Yocto Project ( https://www.yoctoproject.org/ ) che sembrava promettente: ha creato file per il boot loader u-Boot, il kernel Linux e il file system root.

Questa pagina fornisce istruzioni per l'impostazione della scheda micro SD con i file generati da Yocto. Tuttavia, i file di immagine includono un file ".dtb" che non è menzionato nelle istruzioni di installazione.

Questo file ha a che fare con l'hardware della scheda? Vari siti menzionano il caricamento di file dtd (forse in uEnv.txt?) Ma non ho trovato alcuna informazione dettagliata.

Ho usato le istruzioni sopra per impostare la partizione di avvio con MLO e u-boot.img e ho fatto un po 'di casino con uEnv.txt. Ho anche impostato una seconda partizione con il file system di root.

Sono stato in grado di avviare e accedere (tramite la console della porta seriale), ma sembrava che la maggior parte dell'hardware della scheda - ad esempio video e tutti i dispositivi USB incluso Ethernet - non funzionasse. Potrebbe essere perché non stavo usando il file .dtb?

Qualcuno può spiegare il dtb e come usarlo su una scheda beagle? Grazie!


Si scopre che ho letto male il nome del file - inizialmente pensavo fosse un file ".dtd" ma è REALMENTE ".dtb" - motivo per cui non sono riuscito a trovare informazioni al riguardo. La domanda è stata ora aggiornata.
Jeremy,

Esempio minimo con dispositivo virtuale QEMU per meglio comprendere il concetto: stackoverflow.com/questions/17488320/...
Ciro Santilli新疆改造中心法轮功六四事件

Risposte:


13

Rispondendo alla mia domanda, dopo aver capito cosa cercare. Un file "dtb" contiene un Device Tree Blob (o Binary) (bella descrizione qui ). È il nuovo modo (er) di passare le informazioni hardware sulla scheda al kernel Linux.

Può essere caricato in memoria e passato al kernel tramite u-Boot.

Ecco i comandi u-Boot che ho usato:

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 è il kernel e beagle-xm.dtb è il BLOB dell'albero dei dispositivi. Ho automatizzato il processo di avvio impostando una variabile "uenvcmd = ..." in uEnv.txt (con il sopra in esso), ma è un po 'brutta e probabilmente ci sono modi migliori.

Si noti che questo si avvia e dice che ha caricato l'albero dei dispositivi OK. Tuttavia, non ho ancora dispositivi USB o video (per quanto ne so). Tuttavia, sospetto che ciò possa rappresentare un problema diverso.


3
È il nuovo modo (er) di passare le informazioni hardware sulla scheda al kernel Linux. Non esisteva un modo precedente per passare le informazioni hardware al kernel. Invece, il kernel dovrebbe includere staticamente tutte le informazioni e quindi dovrebbe avere un file C specifico della scheda per elencare tutte quelle mappature. Questo è stato un incubo per la manutenzione dal punto di vista del kernel.
BatchyX

Grazie! Ho capito come caricare il file dtb e Linux ora si avvia e invia vari messaggi sul caricamento dei driver, ma non riesco a vedere alcun dispositivo USB (incluso il modulo Ethernet). Vedi nuova domanda: link . Forse c'è qualcosa che devo configurare manualmente in Linux?
Jeremy,

Ma quale indirizzo utilizzare per il file dtb? Ad esempio, se la mia zImage va all'indirizzo 0x43000000 (invece dell'esempio sopra 0x80300000), dove dovrebbe andare il dtb?
André van Schoubroeck,

2

Sto usando Ubuntu 14.04 sul beaglebone black, quindi la mia configurazione potrebbe essere leggermente diversa, ma ecco come ho caricato un dtb personalizzato:

In uEnv.txt, aggiungi una riga con: dtb=name-of-desired.dtb

Le posizioni cercate dovrebbero essere come specificato qui . Per me è /boot/dtbs/linux-kernel/qui che Linux-kernel è il nome della versione caricata.


0

Si noti che ci sono 2 dtb. Il dtb u-boot e il dtb del kernel. Sono 2 cose diverse. La scheda U-boot dts / dtb non è sempre usata, non obbligatoria, ma in u-boot puoi usare il dtb "u-boot" incorporandolo in u-boot o concatenandolo in u-boot.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.