【问题标题】:.dtb files missing after update from rocko to thud从 rocko 更新到 thud 后 .dtb 文件丢失
【发布时间】:2019-12-16 02:57:57
【问题描述】:

我将一个完整的开发板​​固件从 rocko 更新为 thud。我刚刚更新了 poky 和所有官方 repos。内核和引导加载程序仍处于同一版本。 启动时,引导加载程序(小内核)将停止并打印他找不到 dtb 文件的错误消息。

DTB offset is incorrect, kernel image does not have appended DTB

我认为问题在于内核自行编译。由于某些原因,dtb 文件不会附加到内核。 当我检查构建内核的大小时,“thud”版本有点小。

我发现了这个有用的工具:https://github.com/PabloCastellano/extract-dtb

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

【问题讨论】:

    标签: kernel bootloader bitbake device-tree


    【解决方案1】:

    如果我使用 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 文件。

    【讨论】:

    • 我发现了一些奇怪的行为。您在食谱中添加的每个 dtb 都有一个循环。在此循环中,将执行以下命令:cat kernel.bin name.dtb > kernel-dtb-name.img。如果我在同一个 kernel.bin 上写了两个 dtb,它只接受最后一个 dtb。但是,如果我为每个 dtb 编写一个新文件,则会附加 dtb。比如:kernel + dtb1 = kernel_dtb1.bin -> kernel_dtb1.bin + dtb2 = kernel_dtb1_dtb2 -> 以此类推。
    【解决方案2】:

    由于某些原因,dtb 文件不会附加到内核。
    ...
    但是,如果我检查 thud 内核映像,该工具会发现 0。

    显然缺少将 dtb 文件附加到 zImage 文件的构建脚本。
    根据Device Tree for Dummies,第 8 页:

    没有内置的 Makefile 规则来生成这样的内核,所以必须手动执行:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-07-27
      • 2013-06-02
      • 1970-01-01
      • 1970-01-01
      • 2018-08-31
      • 2018-12-10
      • 1970-01-01
      相关资源
      最近更新 更多