How to modify kernel DTB file

前端 未结 2 1010
执笔经年
执笔经年 2021-02-06 05:58

Summary

I am currently compiling the Linux kernel (kernel, modules and DTB) with some custom drivers for a custom board. Occasionally I\'ll compile the

相关标签:
2条回答
  • 2021-02-06 06:38

    Just want to update this with 2 years more experience on the subject.

    The DTS files in the Linux repository are a mixture of DTS and C preprocessor directives (#include, #define, etc.). So when the original DTB is compiled, the preprocessor links to the referenced files to create a pure DTS file. dtc converts the single DTS file into a DTB file.

    So if you want to modify a kernel DTS file and compile it, then you have two options:

    1. Just run make dtbs which automatically handles all of this
    2. Manually run the preprocessor (cpp -nostdinc -I <include dir> -undef -x assembler-with-cpp ...) and then compile the output with dtc.
    0 讨论(0)
  • 2021-02-06 06:40

    Why don't you generate new dtb?

    DTB(Device tree blob/binary), is hardware database which represents the hardware components of the board.

    U-boot pass the board information struct to the kernel, that is derived from the header file in U-Boot.

    DTB is compiled by the special compiler that produces the binary in the proper form for U-Boot and Linux to understand.


    DTC (Device Tree Compiler) it translates device tree file to the machine-readable binary that U-Boot and Linux kernel can understand.

    The straightforward way to use DTC.

    $ dtc -O dtb -o arm_board.dtb -b 0 arm_board.dts
    

    to get the device tree in text from the dtb.

    dtc -I dtb -O dts arm_board.dtb
    

    board.dts is binary created by the above command. -O specifies the output format. -o flag is output file. -b 0 specifies physical boot CPU.

    Then do

    $ make ARCH=arm arm_board.dtb
    

    Another approach might be just use make dtbs this will call dtc. arch/arm/boot/dts/Makefile lists which DTBs should be generated at build time This another way to compile it. make will put that in this location of kernel tree /arch/arm/boot/dts

    Have a look at this Device Tree for Dummies

    0 讨论(0)
提交回复
热议问题