如何修改内核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文件
你为什么不产生新的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
'make'调用肯定会起作用。不幸的是,我正在使用'yocto'构建系统,所以我需要制作一个额外的配方来公开这个调用。我认为这是最好的选择,因为dtc(即使是-O)仍然不适用于我。 –
你能显示任何错误或内核日志。 ? –
您应该使用-O标志进行编译,-I是从设备树blob中获取文本中的设备树。 – LethalProgrammer