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.

[参考译文] AM625:HS-SE 的来自 TI-SDK10的 u-boot 中缺少 fit_signature_enforce 支持

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1430815/am625-missing-fit_signature_enforce-support-in-u-boot-fromti-sdk10-for-hs-se

器件型号:AM625

工具与软件:

您好!

根据此文档 https://software-dl.ti.com/processor-sdk-linux/esd/AM62X/10_00_07_04/exports/docs/linux/Foundational_Components_Migration_Guide linux.html#linux-kernel、 它需要启用  fit_signature_enforce、但它不提供支持。

在过去、我看到了这种支持 https://lore.kernel.org/all/20240111-b4-upstream-fit-signature-enforce-v1-1-2b91be31866e@ti.com/T/ 、我想知道这是否是 验证内核和 DTB 签名(HS-SE)的同一种支持、或者是否有新的实现?

此致、

John Tobias

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

    如果是上述修补程序、则有一个属性名称"required-mode"。 正确值 "HS-SE"模式是什么?


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

    尊敬的 John:
    我将随附在 HS-SE 上进行引导的 Linux SDK 10.0.7.4引导的参考日志、其中在 u-boot 中针对 HS-SE 配置了"BOOT_FIT = 1"
    https://git.ti.com/cgit/ti-u-boot/ti-u-boot/tree/arch/arm/mach-k3/common.c?h=10.00.07#n677
    此致!
    -hong

    e2e.ti.com/.../am62_2D00_sk_5F00_10.0.7.4_5F00_boot_5F00_se.log

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

    您好、Hong:

    当我们使用 SDK 10.0.7.4 (基于 Makefile 的构建)编译 u-boot.img 时、u-boot 会引导签名不当的 fitImage、即使在 SE 板上也是如此。

    在使用 Yocto 构建时、u-boot 会拒绝签名不当的 fitImage。  我不确定这两个构建之间有何不同、因为 u-boot 代码是相同的。

    但是、对于基于 Makefile 的 u-boot.img、它无法找到签名节点、然后返回0、就像它成功验证了二进制文件一样:

    SoC:   AM62X SR1.0 HS-SE
    Model: AOS ESR3
    DRAM:  512 MiB
    Core:  75 devices, 28 uclasses, devicetree: separate
    WDT:   Not starting aos,wdt
    MMC:   mmc@fa10000: 0, mmc@fa00000: 1
    Loading Environment from nowhere... ## Warning: Unknown environment variable access method 'w'
    OK
    In:    serial@2800000
    Out:   serial@2800000
    Err:   serial@2800000
    Autoboot in 5 seconds
    Press SPACE to stop Autoboot
    switch to partitions #0, OK
    mmc1 is current device
    SD/MMC found on device 1
    575 bytes read in 16 ms (34.2 KiB/s)
    Loaded env from uEnv.txt
    Importing environment from mmc1 ...
    15238622 bytes read in 648 ms (22.4 MiB/s)
    ## Loading kernel from FIT Image at 8dd00000 ...
       Using 'conf-ti_k3-am625-esr.dtb' configuration
       Verifying Hash Integrity ... fit_config_verify_required_keys: No signature node found: FDT_ERR_NOTFOUND
    OK
       Trying 'kernel-1' kernel subimage
         Description:  Linux kernel
         Type:         Kernel Image
         Compression:  uncompressed
         Data Start:   0x8dd000e4
         Data Size:    15168000 Bytes = 14.5 MiB
         Architecture: AArch64
         OS:           Linux
         Load Address: 0x81000000
         Entry Point:  0x81000000
         Hash algo:    sha512
         Hash value:   57822027098d92fa03194613da8e8442fdd77599f20154d83dc0af5bfb8a9ce0176464cd8ac9f1ab121dbda4dd2faff038e171d04c34b06b79599e38cd6abd29
       Verifying Hash Integrity ... fit_image_verify_required_sigs: No signature node found: FDT_ERR_NOTFOUND
    sha512+ OK
    ## Loading fdt from FIT Image at 8dd00000 ...
       Using 'conf-ti_k3-am625-esr.dtb' configuration
       Verifying Hash Integrity ... fit_config_verify_required_keys: No signature node found: FDT_ERR_NOTFOUND
    OK
       Trying 'fdt-ti_k3-am625-esr.dtb' fdt subimage
         Description:  Flattened Device Tree blob
         Type:         Flat Device Tree
         Compression:  uncompressed
         Data Start:   0x8eb77770
         Data Size:    66201 Bytes = 64.6 KiB
         Architecture: AArch64
         Load Address: 0x88000000
         Hash algo:    sha512
         Hash value:   9d7e8e6798ef3fa634333ddf08049fa5be061e6ef3e6cbf99cd355cce3f9003153efd43229578b19d61013609a19631f884c5b3439566eecd3b6f684c9a13193
       Verifying Hash Integrity ... fit_image_verify_required_sigs: No signature node found: FDT_ERR_NOTFOUND
    sha512+ OK
       Loading fdt from 0x8eb77770 to 0x88000000
       Booting using the fdt blob at 0x88000000
    Working FDT set to 88000000
       Loading Kernel Image to 81000000
       Loading Device Tree to 000000008ffec000, end 000000008ffff298 ... OK
    Working FDT set to 8ffec000
    
    Starting kernel ...
    
    

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

    此处提供了有关如何生成适合您参考的图像的链接
    https://software-dl.ti.com/processor-sdk-linux/esd/AM62X/10_00_07_04/exports/docs/linux/Foundational_Components_Kernel_Users_Guide.html#creating-the-kernel-fitimage-for-high-security-device-gp-devices
    此致!
    -hong

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

    正如我提到的、内核 fitImage 在两种情况下都是相同的。  它的 fitImage 由 Yocto 构建、并经过正确签名、因为 Yocto 内核配方负责处理此问题。  唯一的区别是 u-boot.img。  一个是使用 Yocto 构建的、另一个是使用基于 Makefile 的 SDK 构建的。  我希望您可以帮助解释行为的差异、以及是否是安全电路板上的安全缺陷、u-boot 是否愿意启动它认为无符号的内核?

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

    我想我可能已经找到了我自己的问题的答案。  使用基于 Makefile 的 SDK 进行编译时、内核编译有最后一步、该步骤会在更新 u-boot.dtb 以需要密钥并包含证书后实际重新编译 u-boot:

    mkimage -r -f $(LINUXKERNEL_INSTALL_DIR)/fitImage-its-$(PLATFORM) -k $(UBOOT_SRC_DIR)/board/ti/keys -K $(TI_SDK_PATH)/board-support/u-boot-build/$(MKIMAGE_DTB_FILE) $(TI_SDK_PATH)/board-support/built-images/fitImage
    # Rebuild uboot a53 for FitImage
    $(MAKE) -j $(MAKE_JOBS) -C $(UBOOT_SRC_DIR) ARCH=arm CROSS_COMPILE=$(CROSS_COMPILE) CC="$(CC)" \
    BINMAN_INDIRS=$(TI_LINUX_FIRMWARE) BL31=$(UBOOT_ATF) TEE=$(UBOOT_TEE) O=$(TI_SDK_PATH)/board-support/u-boot-build/a53

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

    是的、需要在生成时基故障图像后重新构建 u-boot A53、如中所述
    https://software-dl.ti.com/processor-sdk-linux/esd/AM62X/10_00_07_04/exports/docs/linux/Foundational_Components_Kernel_Users_Guide.html#generating-the-fitimage
    https://software-dl.ti.com/processor-sdk-linux/esd/AM62X/10_00_07_04/exports/docs/linux/Foundational_Components_Kernel_Users_Guide.html#build-uboot-again

    您可以参考 SDK 安装文件夹下的文件"makerules/Makefile_linx"。
    此致!
    -hong

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

    不过、我认为 PROCESSOR-SDK 中有一个错误。

    makerules/Makefile_linux 文件将 $(uBoot_SRC_DIR)/board/ti/keys 指定为包含密钥的目录。  但这不是正确的目录。

    正确的目录是 $(uBoot_SRC_DIR)/arch/arm/mach-k3/keys

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

    从 SDK 10.x 开始对密钥文件夹位置进行了更改
    https://git.ti.com/cgit/ti-u-boot/ti-u-boot/commit/arch/arm/dts/k3-binman.dtsi?h=10.00.07&id=110b07c8bcb611ddf5b6bed44f5eb9ac14ebecec
    "...该文件用于仿真 TI 开发板生态系统上的客户密钥、将其从 board/目录中移出并移入 MACH-K3..."
    此致!
    -hong

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

    是的、我知道。  这就是我之前说过 Processor SDK 10.x 中存在一个错误的原因  makerules/Makefile_linux 文件仍具有旧路径。

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

    感谢您的报告、并将向 SDK 版本团队提供反馈。
    此致!
    -hong