Perché non generi un nuovo dtb?
DTB (Device tree blob/binary), è un database hardware che rappresenta i componenti hardware della scheda.
U-boot passa la struttura delle informazioni sulla scheda al kernel, che è derivata dal file di intestazione in U-Boot.
DTB è compilato dallo speciale compilatore che produce il binario nella forma corretta per essere compreso da U-Boot e Linux.
DTC (Device Tree Compiler) traduce il file dell'albero dei dispositivi nel binario leggibile dalla macchina che U-Boot e il kernel Linux possono comprendere.
Il modo semplice per usare DTC.
$ dtc -O dtb -o arm_board.dtb -b 0 arm_board.dts
per ottenere l'albero dei dispositivi nel testo dal dtb.
dtc -I dtb -O dts arm_board.dtb
board.dts è binario creato dal comando precedente. -O
specifica il formato di output. -o
flag è il file di output. -b 0
specifica la CPU di avvio fisica.
Allora fallo
$ make ARCH=arm arm_board.dtb
Un altro approccio potrebbe essere semplicemente l'uso di make dtbs
questo chiamerà dtc. arch/arm/boot/dts/Makefile
elenca quali DTB dovrebbero essere generati al momento della compilazione. Questo è un altro modo per compilarlo. make lo inserirà in questa posizione dell'albero del kernel /arch/arm/boot/dts
Dai un'occhiata a questo Device Tree for Dummies
Voglio solo aggiornarlo con 2 anni di esperienza in più sull'argomento.
I file DTS nel repository Linux sono un misto di DTS e Direttive del preprocessore C (#include, #define, ecc.). Pertanto, quando il DTB originale viene compilato, il preprocessore si collega ai file di riferimento per creare un file DTS puro. dtc
converte il singolo file DTS in un file DTB.
Quindi, se vuoi modificare un file DTS del kernel e compilarlo, hai due opzioni:
- Basta eseguire
make dtbs
che gestisce automaticamente tutto questo - Esegui manualmente il preprocessore (
cpp -nostdinc -I <include dir> -undef -x assembler-with-cpp ...
) e quindi compilare l'output condtc
.