如何修改内核DTB文件

问题描述:

摘要如何修改内核DTB文件

我目前的Linux内核编译(内核模块和DTB)与定制电路板的一些自定义的驱动程序。偶尔我会在编译内核,并认识到在DTB文件的兼容性字符串不是什么自定义驱动程序所期待的。现在,我可以解决这个问题的唯一办法就是修改DTS或内核驱动程序,以便字符串匹配,然后再重新编译内核。有没有办法可以编辑DTB文件来更新兼容性字符串?

失败的尝试

我已经能够反编译DTB使用命令文件回DTS文件:

dtc -I dtb -o <filename>.dts -<filename>.dtb 

但是如果我修改DTS文件,然后使用命令重新编译:

dtc -I dts -o <filename>.dtb -<filename>.dts 

内核将不会加载重新编译DTB文件

+1

你能显示任何错误或内核日志。 ? –

+0

您应该使用-O标志进行编译,-I是从设备树blob中获取文本中的设备树。 – LethalProgrammer

你为什么不产生新的DTB?

DTB(设备树团块/二进制),是表示电路板的硬件部件的硬件数据库。

U-boot将板信息结构传递给内核,该内核源自U-Boot中的头文件。

DTB是由产生二进制以适当的形式进行的U-Boot和Linux,了解特殊的编译器编译。


DTC(设备树编译器)它将设备树文件转换为U-Boot和Linux内核可以理解的机器可读二进制文件。

直截了当的方式来使用DTC。

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

从dtb文本中获取设备树。是二进制由上述命令创建

dtc -I dtb -O dts arm_board.dtb 

board.dts。 -O指定输出格式。 -o标志是输出文件。 -b 0指定物理引导CPU。

然后做

$ make ARCH=arm arm_board.dtb 

另一种方法可能只是使用make dtbs这将调用DTC。 arch/arm/boot/dts/Makefile列出在编译时生成哪个DTB应该是 这是编译它的另一种方法。使会将在内核树/arch/arm/boot/dts

的这个位置有一个在这个Device Tree for Dummies

+0

'make'调用肯定会起作用。不幸的是,我正在使用'yocto'构建系统,所以我需要制作一个额外的配方来公开这个调用。我认为这是最好的选择,因为dtc(即使是-O)仍然不适用于我。 –