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.

[参考译文] AM2732-Q1:HSM 运行时固件加载故障

Guru**** 2847400 points

Other Parts Discussed in Thread: AM2732, UNIFLASH, SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1633392/am2732-q1-hsm-runtime-firmaware-load-failure

器件型号: AM2732-Q1
Thread 中讨论的其他器件: AM2732UNIFLASHSYSCONFIG

主席先生/女士、

我正在开发定制电路板。 AM2732 采用 NZN 封装、器件速度等级为 M

我正在尝试引导 SBL_null。 我执行的步骤如下

  1. 从 SDK 导入 sbl_uart_uniflash、在 SysConfig 中更新包、更新自定义闪存设置编译并获取.tiimage。
  2. 从 SDK 导入 sbl_null、在 SysConfig 中更新软件包、编译并获取.tiimage。
  3. 在 UART 引导模式下加载这些文件。
  4. 在 QSPI 引导模式下、我在 UART 端口上收到的调试消息为“Device Type:HSFS、HSMRT Size(以字节为单位):35348、h SM 运行时固件加载失败 “  

我在不更改 EVM 中的 SysConfig 设置和闪存设置的情况下尝试对 EVM 执行相同操作、但它在 EVM 中工作。  

当我在调试端口上收到消息时、假设自定义闪存设置正常。  

此外、我还查看了 device_config 和 bootimage make 文件。 我没有更改这些文件中的任何内容。 它出现在这些文件中、适用于 GP、不是 HSFS 器件、但在 EVM 中同样可以正常工作。 定制电路板的 AM2732 在封装和速度、等级方面与 EVM 不同。

建议我解决这个问题。

此致

Jagdish

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

    您好、Jagdish、

    由于您的器件是 HS FS 器件、因此 GP 顶层 makefile 中的“device_type?=HS“应该已更改为“device_type=HS"。“。  对于 HS FS 器件、应该已重新编译 sbl_uart_uniflash 和 sbl_null。 请使用*。hs_fs.tiimage“而不是*。tiimage。

    此致、

    Ming

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

    感谢您的答复。

    我已 将 deviceconfig make 文件中的 HS 更改为 HS 、并为 sbl_uart_uniflash 和 sbl_null 生成了.hs.timage。 此时它根本没有加载。 根据 SDK 帮助文件、我还应该对 hsfs 器件使用.tiimage。 与我对 EVM 执行的操作相同、我可以引导 SBL_null。 我正在粘贴器件配置和启动映像生成文件。

    #器件类型 (HS/HS GP)
    Device_type?= GP

    #到签名工具、密钥等的路径
    signing_tool_path?=$(MCU_PLUS_SDK_PATH)/tools/boot/signing

    #使用制造商加密密钥计算派生密钥所需的 SALT 路径。
    kd_salt=$(signing_tool_path)/ kd_salt.txt

    #键的路径
    rom_degenerate_key:=$(signing_tool_path)/rom_degenerateKey.pem
    app_degenerate_key:=$(signing_tool_path)/app_degenerateKey.pem
    ifeq($(器件)、am263x)
    CUST_MPK=$(signing_tool_path)/mcub_custMpk.pem
    CUST_MEK=$(signing_tool_path)/mcu_custMek.key
    else ifeq ($(device)、am273x)
    CUST_MPK=$(signing_tool_path)/mcub_custMpk.pem
    CUST_MEK=$(signing_tool_path)/mcu_custMek.key
    else ifeq($(器件)、awr294x)
    CUST_MPK=$(signing_tool_path)/mcub_custMpk.pem
    CUST_MEK=$(signing_tool_path)/mcu_custMek.key
    else ifeq ($(device)、am263px)
    CUST_MPK=$(signing_tool_path)/mcub_custMpk.pem
    CUST_MEK=$(signing_tool_path)/mcu_custMek.key
    暴露
    CUST_MPK=$(signing_tool_path)/custMpk_am64x_am243x.pem
    CUST_MEK=$(signing_tool_path)/custMek_am64x_am243x.txt
    endif

    #应用程序加密选项(是/否)
    ENC_ENABLED?=否

    # SBL 的加密选项(是/否)
    ENC_SBL_ENABLED?=yes

    调试启用(是/否)
    DBG_ENABLED?=否

    #使用 TIFS 进行调试控制(是/否)
    DEBUG_TIFS?=yes

    #用于应用程序签名的 RSASA-PSS 方案选项(是/否)
    RSASSAXS_ENABLED?=否

    # HS 的调试选项 (DBG_PERM_DISABLE/DBG_SOC_DEFAULT/DBG_PUBLE_ENABLE/DBG_FULL_ENABLE)
    #此选项仅在 DEBUG_TIFS 为 FALSE 时有效
    DEBUG_OPTIONS?=DBG_SOC_DEFAULT

    #根据设备类型使用的通用宏
    app_signing_key=
    APP_encryption_key=
    app_signing_hash_algo=
    app_signing_salt_length=

    ifeq ($(device_type)、HS)
    APP_SIGNING_KEY=$(CUST_MPK)
    APP_encryption_KEY=$(CUST_MEK)
    APP_SIGNING_HASH_ALGO=SHA512
    APP_SIGNING_SALT_LENGTH=0
    暴露
    app_signing_key=$(app_degenerate_key)
    endif

    #密钥环中用于应用程序验证和解密的密钥 ID
    app_signing_key_keyring_id?=0
    APP_encryption_key_keyring_ID?=0

    启动映像生成器

    #
    #自动生成的 makefile 文件
    #

    #以下变量需要在此文件之外或通过命令行定义
    #- MCU_PLUS_SDK_PATH
    #-个人资料
    #- CG_TOOL_ROOT
    #- OUTNAME
    #- CCS_INSTALL_DIR
    #- CCS_IDE_mode

    CCS_PATH=$(CCS_INSTALL_DIR)
    包括$(MCU_PLUS_SDK_PATH)/imports1.mak
    包括$(MCU_PLUS_SDK_PATH)/devconfig/devconfig.mak

    Strip=$(CG_TOOL_ROOT)/bin/tiarmstrip
    OBJCOPY=$(CG_TOOL_ROOT)/bin/tiarmobjcopy
    ifeq ($(OS)、Windows_NT)
    python=python
    暴露
    Python=python3
    endif

    OUTFILE=$(profile)/$(OUTNAME).out
    BOOTIMAGE_PATH=$(abspath ${profile})
    BOOTIMAG_NAME_GP:=$(BOOTIMAG_PATH)/$(OUTNAME).tiimage
    BOOTIMAGE_NAME_HS:=sbl_null.$(profile).hs.tiimage
    BOOTIMAGE_NAME_HS_FS:=sbl_null.$(profile).hs_fs.tiimage
    ifeq ($(device_type)、HS)
    BOOTIMAG_NAME=$(BOOTIMAG_NAME_HS)
    暴露
    BOOTIMAG_NAME=$(BOOTIMAG_NAME_GP)
    endif
    BOOTIMAG_bin_NAME:=$(BOOTIMAG_PATH)/$(OUTNAME).bin

    #
    #生成可由 ROM 引导加载程序 (RBL) 加载的引导映像
    #
    ifeq ($(OS)、Windows_NT)
    exe_ext=.exe
    endif
    ifeq ($(OS)、Windows_NT)
    BOOTIMAGE_CERT_GEN_CMD=PowerShell -ExecutionPolicy Unlimited -command $(MCU_PLUS_SDK_PATH)/tools/boot/signing/x509CertificateGen.ps1
    暴露
    BOOTIMAGE_CERT_GEN_CMD=$(MCU_PLUS_SDK_PATH)/tools/boot/signing/x509CertificateGen.sh
    endif
    BOOTIMAGE_TEMP_OUT_FILE=$(profile)/temp_stdout_$(profile).txt

    ifeq ($(device_type)、HS)
    BOOTIMAGE_CERT_KEY=$(APP_SIGNING_KEY)
    暴露
    BOOTIMAGE_CERT_KEY=$(MCU_PLUS_SDK_PATH)/tools/boot/signing/mcu_gpkey.pem
    endif
    BOOTIMAGE_CERT_GEN_CMD=$(PYTHON)$(MCU_PLUS_SDK_PATH)/tools/boot/signing/mcu_rom_image_gen.py

    sbl_run_address=0x10200000

    sbl_prebuilt_path=$(MCU_PLUS_SDK_PATH)/tools/boot/sbl_prebuilt/am273x-evm

    全部:
    ifeq ($(CCS_IDE_mode)、cloud)
    #没有编译后步骤
    暴露
    @回波引导映像:am273x:r5fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_NAME)……
    $(objcopy)-strip-all -O 二进制文件$(OUTFILE)$(BOOTIMAGE_BIN_NAME)
    ifeq ($(device_type)、HS)
    ifeq ($(DEBUG_TIFS),是)
    ifeq ($(ENC_SBL_ENABLED),是)
    $(BOOTIMAGE_CERT_GEN_CMD)--sbl-enc --enc-key $(APP_encryption_KEY)--image-bin $(BOOTIMAGE_BIN_NAME)--core R5 ---swrv 1 --loadaddr $(sbl_run_address)--sign-key $(BOOTIMAGE_CERT_IMAGE)-KD-NAME (BOOTKD)-KD (salt)--kd)--kd
    暴露
    $(BOOTIMAGE_CERT_GEN_CMD)-image-bin $(BOOTIMAG_bin_name)-core R5 --swrv 1 --loadaddr $(sbl_run_address)--sign-key $(BOOTIMAGE_CERT_KEY)-out-image $(BOOTIMAGE_NAME)
    endif
    暴露
    ifeq ($(ENC_SBL_ENABLED),是)
    $(BOOTIMAGE_CERT_GEN_CMD)--sbl-enc --enc-key $(APP_encryption_KEY)--image-bin $(BOOTIMAGE_BIN_NAME)--core R5 ---swrv 1 --loadaddr $(sbl_run_address)--sign-key $(BOOTIMAGE_CERT_NAME)
    暴露
    $(BOOTIMAGE_CERT_GEN_CMD)-image-bin $(BOOTIMAG_bin_name)-core R5 --swrv 1 --loadaddr $(sbl_run_address)--sign-key $(BOOTIMAGE_CERT_KEY)-out-image $(BOOTIMAG_NAME)--debug $(debug_option)
    endif
    endif
    暴露
    $(BOOTIMAGE_CERT_GEN_CMD)-image-bin $(BOOTIMAG_bin_name)-core R5 --swrv 1 --loadaddr $(sbl_run_address)--sign-key $(BOOTIMAGE_CERT_KEY)-out-image $(BOOTIMAG_NAME)--DBG_DEFAULT
    @回波引导映像:am273x:r5fss0-0:nortos:ti-arm-clang $(BOOTIMAG_NAME) done!!
    @回波。
    endif
    endif

    闪烁后显示消息

    :\ti\mcu_plus_sdk_am273x_09_02_00_60\tools\boot>python uart_uniflash.py -p COM3 -cfg=sbl_prebuilt/am273x-evm/default_sbl_null_crd.cfg

    正在解析配置文件...
    正在解析配置文件...成功。 找到 2 个命令!!!

    正在执行命令 1(共 2 个)...
    找到闪存写入器...正在发送 sbl_prebuilt/am273x-evm/sbl_uart_uniflash_am273x-crd_r5fss0-0_nortos_ti-arm-clang.tiimageSending sbl_prebuilt/am273x-evm/sbl_uart_uniflash_am273x-cr5fss0-0_clang_ti-arm-nortos.tiimage:2%2'c;收到错误代码块:2'1021';如果出现错误、则发送时间为 2'521、则会返回 2'C
    发送 sbl_prebuilt/am273x-evm/sbl_uart_uniflash_am273x-crd_r5fss0-0_nortos_ti-arm-clang.ticimage:54537 字节[00:05、13Sending sbl_prebuilt/am273x-evm/sbl_uniflash_

    正在执行命令 2(共 2 个)...
    命令参数:--file=sbl_prebuilt/am273x-evm/sbl_null_am273x-crd_r5fss0-0_nortos_ti-arm-clang.ticimage --option=flash --flash-offset=0x0
    已发送大小为 168161 字节(在 19.01s 内)的 sbl_prebuilt/am273x-evm/sbl_null_am273x-crd_r5fss0-0_nortos_ti-arm-clang.ticimage。
    【状态】成功!!!

    将执行配置文件中的所有命令!!!

    通过 UART 进行 QSPI 引导后的消息

    INFO:bootloader_socLoadHsmRtFw:82:Device Type:HSFS
    INFO:bootloader_socLoadHsmRtFw:84:HSMRT 大小(以字节为单位):35348
    INFO:bootloader_socLoadHsmRtFw:93:HSM 运行时固件加载失败...

    我已 通过 JTAG 读取前 256 个字节、验证闪存具有 sbl_null.timage 数据。 那么、可能有什么问题呢? 请提出建议

    请提出建议

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

    您好、Jagdish、

    错误指示 A MCU+ SDK v09.02.00.52 随附的 HSM 运行时映像中的已知错误 —该hsmRtImg.h文件包含错误的固件二进制文件Hsmclient_loadHSMRtFirmware()、当尝试将其加载到 HSM 内核、返回SystemP_FAILURE并停止启动时、该二进制文件将失败。


    根本原因

    您的设备被标识为 HSFS(高安全性–现场安全型) [2]。 对于 HS-ROM 器件、引导 FS 会执行 SHA-512 验证 对整个 HSM 映像进行检查、并根据存储在引导扩展中的哈希值检查计算出的哈希值。 中嵌入的过时固件二进制文件hsmRtImg.h无法通过此身份验证检查、导致Bootloader_socLoadHsmRtFw第 93 行的加载失败。

    发现了此错误 MCU+ SDK 09.02.00 版本之后 SDK 官方发行说明中没有记录这种情况。


    修复:分步操作

    步骤
    行动
    1.
    获取校正后的固件二进制文件:tifs_am273x_hs_fs.release.hsmimage_pg1.2_signed.bin(PG1.2 芯片)
    2.
    将二进制文件转换为 C 数组、并替换HSMRT_IMG中的数组 mcu_plus_sdk_am273x_09_02_00_52\source\drivers\hsmclient\soc\am273x\hsmRtImg.h
    3.
    重新构建 SDK 库: gmake -f makefile.am273x libs
    4.
    重新编译并重新刷写SBL_QSPI应用

    成功加载后、HSM 固件HSM_MSG_BOOT_NOTIFYloadHSMResult.status将发送到 SBL、然后返回Hsmclient_ipcLoadHSMStatus_SUCCESS、确认 ROM 已接受并启动 HSM 固件。

    请参阅以下 e2e 主题:

    AM2732:SBL_QSPI 在加载 HSMRT 固件 — 处理器论坛-处理器 — TI E2E 支持论坛时失败

    此致

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

    谢谢你。

    它解决了问题。

    当您回复时、我已经迁移到 AM2732 的 SDK 11 版本、其中 hsrmt 大小已增加、但仍然无法正常工作。 后来我看到了您的回复、然后在 HSM 文件夹中注意到  hsmRtImg_1_2.h 文件、将其复制为 hsmRtImg.h 并重建库。 然后它的工作。 谢谢你 Ming