Kernel .dtb文件在从rocko更新到thud后丢失

Kernel .dtb文件在从rocko更新到thud后丢失,kernel,bootloader,bitbake,device-tree,Kernel,Bootloader,Bitbake,Device Tree,我将一个完全工作的板固件从rocko升级到thud。我刚刚更新了poky和所有的官方回购协议。内核和引导加载程序仍然在同一版本中。 启动时,引导加载程序(小内核)将停止并打印错误消息,表示找不到dtb文件 DTB offset is incorrect, kernel image does not have appended DTB 我认为问题在于内核自己编译它。由于某些原因,dtb文件不会附加到内核。 当我检查构建内核的大小时,“thud”版本稍微小一点 我发现这个有用的工具: 如果我检查r

我将一个完全工作的板固件从rocko升级到thud。我刚刚更新了poky和所有的官方回购协议。内核和引导加载程序仍然在同一版本中。 启动时,引导加载程序(小内核)将停止并打印错误消息,表示找不到dtb文件

DTB offset is incorrect, kernel image does not have appended DTB
我认为问题在于内核自己编译它。由于某些原因,dtb文件不会附加到内核。 当我检查构建内核的大小时,“thud”版本稍微小一点

我发现这个有用的工具:

如果我检查rocko内核映像,工具会发现12个DTB。但是如果我检查thud内核映像,工具会发现0

由于某些原因,dtb文件不会附加到内核。

但是如果我检查thud内核映像,工具会发现0

显然,缺少将dtb文件附加到zImage文件的生成脚本。
根据第8页:

没有生成此类内核的内置Makefile规则,因此必须手动执行以下操作:

$ cat arch/arm/boot/zImage arch/arm/boot/dts/myboard.dtb > my-zImage  
$ mkimage ... -d my-zImage my-uImageI
由于某些原因,dtb文件不会附加到内核。

但是如果我检查thud内核映像,工具会发现0

显然,缺少将dtb文件附加到zImage文件的生成脚本。
根据第8页:

没有生成此类内核的内置Makefile规则,因此必须手动执行以下操作:

$ cat arch/arm/boot/zImage arch/arm/boot/dts/myboard.dtb > my-zImage  
$ mkimage ... -d my-zImage my-uImageI

如果我用do_compile_手动添加多个dtb

 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文件。

如果我用do_compile_手动添加多个dtb文件

 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文件。

我发现了一些奇怪的行为。在配方中添加的每个dtb都有一个循环。在此循环中,将执行以下命令:cat kernel.bin name.dtb>kernel-dtb-name.img。如果在同一kernel.bin上写入两个dtb,它只接受最后一个dtb。但是,如果我为每个dtb编写一个新文件,就会出现dtb。比如:kernel+dtb1=kernel\u dtb1.bin->kernel\u dtb1.bin+dtb2=kernel\u dtb1\u dtb2->等等。我发现了一些奇怪的行为。在配方中添加的每个dtb都有一个循环。在此循环中,将执行以下命令:cat kernel.bin name.dtb>kernel-dtb-name.img。如果在同一kernel.bin上写入两个dtb,它只接受最后一个dtb。但是,如果我为每个dtb编写一个新文件,就会出现dtb。比如:kernel+dtb1=kernel\u dtb1.bin->kernel\u dtb1.bin+dtb2=kernel\u dtb1\u dtb2->等等。