我将功能齐全的板卡固件从Rocko更新为thud。我刚刚更新了poky和所有的官方仓库。内核和引导加载程序仍处于相同版本。 启动时,引导程序(小内核)将停止并显示错误消息,提示他找不到dtb文件。
DTB offset is incorrect, kernel image does not have appended DTB
我认为问题是内核自行编译。由于某些原因,dtb文件不会追加到内核。 当我检查构建内核的大小时,“ thud”版本会小一些。
我发现这个有用的工具:https://github.com/PabloCastellano/extract-dtb
如果我检查了rocko内核映像,该工具发现了12 dtb。但是,如果我检查thud内核映像,该工具将发现0。
答案 0 :(得分:0)
由于某些原因,dtb文件不会追加到内核。
...
但是,如果我检查thud内核映像,该工具将发现0。
显然缺少将 dtb 文件附加到 zImage 文件的构建脚本。
根据{{3}},在第8页上:
没有内置的Makefile规则来产生这种内核,因此必须手动执行:
$ cat arch/arm/boot/zImage arch/arm/boot/dts/myboard.dtb > my-zImage $ mkimage ... -d my-zImage my-uImageI
答案 1 :(得分:0)
如果我手动添加do_compile_append超过1个dtb`s。
cat arch/${ARCH}/boot/${KERNEL_IMAGETYPE}.backup arch/${ARCH}/boot/dts/MYDEVICETREEFILE.dtb > arch/${ARCH}/boot/${KERNEL_IMAGETYPE}
我发现使用提取工具只有1个附加的dtb。
并且系统无法正常工作。
如果我仅添加1个dtb,例如:
KERNEL_DEVICETREE := "MYDEVICETREEFILE.dtb"
此dtb将会添加,并且系统可以正常运行。
我发现了问题:
我使用小内核作为引导程序。他希望内核采用特定格式。为此,我使用mkbootimg。在我的bb配方中,该工具将执行。
但是对于某些参数,mkbootimg工具将无法使用。
因此,内核对于小内核而言并不是这种特定格式,因此他找不到dtb文件。