GNU/Linux >> Linux Esercitazione >  >> Linux

Come modificare il file DTB del kernel

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:

  1. Basta eseguire make dtbs che gestisce automaticamente tutto questo
  2. Esegui manualmente il preprocessore (cpp -nostdinc -I <include dir> -undef -x assembler-with-cpp ... ) e quindi compilare l'output con dtc .

Linux
  1. Come rinominare un file in Linux?

  2. Come grep \n nel file

  3. Come modificare globalmente il PYTHONPATH predefinito (sys.path)?

  4. Come salvare o esportare una configurazione del kernel Linux personalizzata?

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

Come creare un file in Linux

Come creare file Tar Gz

Come decomprimere (aprire) il file Gz

Come collegare simbolicamente un file in Linux

Come fare eco in un file

Come funziona /proc/*?