This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] AM6442:在所有设备树中嵌入/signature 节点(不仅仅是 CONFIG_DEFAULT_DEVICE_tree)

Guru**** 2347060 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1526627/am6442-embedding-signature-node-in-all-device-trees-not-just-config_default_device_tree

器件型号:AM6442

工具/软件:

您好:

我遇到的问题是、/signature 节点仅嵌入 config_default_device_tree 定义的设备树中。 但是、当在切换到另一设备树(通过 CONFIG_OF_LIST)的不同电路板版本上执行 U-Boot 时、/signature 节点将丢失、因此不会强制执行配置的签名验证。

是否有建议的方法可以将/signature 节点嵌入到所有编译的.dtb 文件中、而不仅仅是用于 u-boot.dtb 的文件中?

U-boot 版本为 2024.04。

此致、
Petar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Petar、

    我不确定我是否理解这条语句、“不只是将/signature 节点嵌入到用于 u-boot.dtb 的.dtb 文件中“。 我能再多说一点吗?

    此致、

    Nick

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Nick、

    /signature 节点当前仅嵌入在 u-boot.dtb 中、这对应于由 config_default_device_tree 选项指定的设备树。 我们的电路板有两个硬件版本 (r0 和 r1)、两者都在 CONFIG_OF_LIST 中列出。

    如果将 config_default_device_tree 设置为修订版 R1 的设备树、则在 R1 板上引导时会出现/signature 节点。 但是、如果使用同一 U-Boot 构建来引导 r0 板(在运行时切换到 r0 设备树)、则会丢失/签名节点、并且不会强制执行签名验证。

    此致、
    Petar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Petar:

    我认为 U-Boot 器件树中没有“签名“节点。 这是您为项目添加的吗? 请提供补丁以显示确切的“签名“节点。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Hello Bin,
    The /signature node is inserted into u-boot.dtb when the kernel FIT image is signed. This is handled by the uboot-sign.bbclass, specifically within the concat_dtb() function.
    Regards,
    Petar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Petar:

    我正在将您的疑问发送给我们的 Yocto 专家以获取评论。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Bin:
    谢谢。 我找到了解决我的问题的方法。 下面是我添加到 u-boot-ti-staging_2024.04.bappend 的代码片段:

    do_uboot_assemble_fitimage:append () {
        for dtb in arch/arm/dts/*.dtb; do
            # Embedding the public key into all dtb(s)...
            ${UBOOT_MKIMAGE_SIGN} \
                ${@'-D "${UBOOT_MKIMAGE_DTCOPTS}"' if len('${UBOOT_MKIMAGE_DTCOPTS}') else ''} \
                -F -k "${UBOOT_SIGN_KEYDIR}" \
                -K "$dtb" \
                -r ${B}/fitImage-linux \
                ${UBOOT_MKIMAGE_SIGN_ARGS}
        done
    }

    我不确定这是一个理想的解决方案、因为它多次重新签署 fitImage。
    此致、
    Petar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、
    实际上、上述解决方案并不完全正确。 以下是我的最终(有效)解决方案:

    do_uboot_assemble_fitimage:prepend () {
    	if [ "${UBOOT_SIGN_ENABLE}" = "1" ] ; then
    		cp "${STAGING_DIR_HOST}/sysroot-only/fitImage" "${B}/fitImage-linux"
    
            for dtb in ${B}/arch/arm/dts/*.dtb; do
                # Embedding the public key into all dtb(s)...
                ${UBOOT_MKIMAGE_SIGN} \
                    ${@'-D "${UBOOT_MKIMAGE_DTCOPTS}"' if len('${UBOOT_MKIMAGE_DTCOPTS}') else ''} \
                    -F -k "${UBOOT_SIGN_KEYDIR}" \
                    -K "$dtb" \
                    -r ${B}/fitImage-linux \
                    ${UBOOT_MKIMAGE_SIGN_ARGS}
            done
    	fi
    }

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Petar:

    感谢您在此处报告您的解决方案。 我提交了一个 TI 内部工单(参考:LCPD-44294) 、以在这方面对我们的 SDK 产品进行了一些改进。 有人评论说,将签名嵌入到所有 DTB 中可能会使关联的二进制文件增长超过需要,也许我们将探讨从第一个控件 DTB 中提取签名的方法,并将其用于其他控制 DTB。 不管怎么说、只是一个潜在的实施细节、供参考。

    再次感谢!

    Andreas