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.

[FAQ] [参考译文] 【常见问题解答】AM2432:在 AM64X/AM243X 上实现以太网固件更新 (ENETFOTA)

Guru**** 2694555 points

Other Parts Discussed in Thread: UNIFLASH, TMDS243EVM

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1598065/faq-am2432-implementing-firmware-update-over-ethernet-enetfota-on-am64x-am243x

器件型号: AM2432
Thread 中讨论的其他器件: UNIFLASHTMDS243EVM

ENETFOTA 示例演示了如何使用以太网将新的应用程序映像从主机 PC 传输到当前运行旧应用程序映像的 AM243x/AM64x 器件。 通过以太网成功接收新的应用程序映像后、ENETFOTA 示例会对映像进行身份验证、然后再将其编程到器件的闪存中。

成功完成身份验证后、在非易失性存储器中设置更新状态标志。 在后续的热软件复位期间、次级引导加载程序 (SBL) 会检查此标志并相应地加载相应的应用程序映像

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

    什么是 ENETFOTA?

    ENETFOTA(以太网无线固件)是一种  使用以太网作为传输介质来更新 TI AM64X/AM243X 器件上的应用程序固件的机制。
    它支持在不使用 UART、USB 或 JTAG 的情况下传输、身份验证和刷写新的应用程序映像。

    ENETFOTA 涉及哪些组件?

    ENETFOTA 包含三个主要组件:
    1. PC/主机 –准备、签名和加密应用程序映像并通过以太网发送
    2. 以太网 –用作传输层
    3. EVM/目标器件 –接收、验证并刷写新的应用程序映像

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

    1.电脑/主机责任:


    PC/主机负责在通过以太网传输到目标器件之前准备新的应用程序映像。 此准备工作包括使用 x509 证书对应用程序映像签名、并根据器件类型对映像加密。
    根据目标器件型号、ENETFOTA 支持以下两种模式:

    • 加密的 ETFOTA–仅在 HS 器件上受支持
    • 解密的 ENETFOTA–在 GP 器件上受支持

    2.加密的 ENETFOTA :

    加密的 ETFOTA 用于支持安全启动的 HS 器件。 在该流程中、新的应用映像在通过以太网传输之前经过加密和身份验证。


    流程描述

    1. 用户/主机对新的应用程序映像进行加密。
    2. 然后使用 x509 证书对加密的映像进行签名。
    3. 签名和加密的映像通过以太网传输到目标器件。
    4. 在器件上运行的 ENETFOTA 应用程序接收映像、对其进行身份验证并继续刷写。

    该流程可确保以太网传输期间固件的机密性和真实性。

    • 对于使用安全启动来加密映像的 HS-SE 器件、请使用以下命令来执行上述流程:
      • 加密新的应用映像:
        • 若要对要传输的应用映像进行加密、请使用上述参数运行以下 python 脚本:
          • python ${MCU_PLUS_SDK_PATH}/source/security/security_common/tools/boot/signing/appimage_x509_cert_gen.py) --bin ${Path to app image} --authtype 1 --key $(APP_SIGNING_KEY) --enc y --enckey $(APP_ENCRYPTION_KEY) --output $(Name of the modified image)
          • 在 devconfig.mak 中可以找到$(app_signing_key) 和$(app_encryption_key)、并根据所使用的器件选择适当的密钥
      • 使用 x509 证书对新的应用映像签名:
        • 若要使用额外的 x509 证书对原始应用映像签名、请使用上述参数运行以下 python 脚本
          python ${MCU_PLUS_SDK_PATH}/source/security/security_common/tools/boot/signing/appimage_x509_cert_gen.py) --bin ${Path to app image} --authtype 1 --key $(APP_SIGNING_KEY) --output $(Name of the modified image)
        • 此命令可在您正在编译的示例的 ti-arm-clang 下的 Makefile 中找到
        • $(app_signing_key) 可在 devconfig.mak 中找到、并根据所使用的器件选择密钥

    3.解密的 ENETFOTA :

    解密的 ENETFOTA 用于不支持加密固件映像的 GP 设备。


    流程描述

    1. 用户/主机使用 x509 证书对新的应用程序映像签名。
    2. 已签名(但未加密)的映像通过以太网传输到目标器件。
    3. ENETFOTA 应用程序接收映像、对其进行身份验证并将其刷写到存储器中。

    • 注意:GP 设备不支持加密、因此此流程中不进行加密
    • 使用 x509 证书签名:
      • 请参阅加密的 ENETFOTA 情况下的上述签名命令
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    4.以太网设置:

    对于 Linux 系统:

    • 在 PC 和 EVM 之间连接以太网电缆。
    • 使用以下命令、为 IP 地址分配与 EVM 具有相同子网的地址:
      • sudo ifconfig eno1 192.168.0.193 netmask 255.255.255.0
        • eno1 是网络接口的名称
        • 运行 ip link 或 ifconfig 命令以查找网络接口的名称。
    • 使用以下命令添加静态 ARP 条目:
      • sudo arp -i (interface-name) -s (IP-Address) (MAC-Address)
      • 示例:  
        sudo arp -i eno1 -s 192.168.0.195 1c:63:49:28:61:1e
    • 在 fota_enet.h 文件中、确保根据您的设置设置 enet_host_pc_mac_address、enet_port、enet_source_ip_address、enet_destination_ip_address 的值
    • 在 enet_uniflash.py 中、确保在参数 hostp、hostPort、boardIP、boardPort 中分配了正确的 IP 地址和端口号
    • 在 fota_enet_app.cfg 文件中添加新应用映像的位置、然后将其保存。
    • 为 EVM 上电后运行以下命令:
      • python fota_enet_uniflash.py --cfg=sbl_prebuilt/am64x-evm/fota_enet_app.cfg

    对于 Windows 系统:

    • 在 PC 和 EVM 之间连接以太网电缆。
    • 打开 PC 上的以太网设置>>选择相应的以太网适配器。
    • 使用 IP 地址 192.168.0.193、子网前缀长度为 24、网关为的方式编辑 IP 设置
      192.168.0.195
    • 确保将连接设置为“专用连接“和“计量连接“设置为“关“。
    • 创建静态 ARP 条目需要管理员权限。 在 PowerShell 中以运行以下命令
      管理员。
      • New-NetNeighbor -InterfaceIndex (ifIndex) -IPAddress '192.168.0.195' -LinkLayerAddress '(EVM MAC Addr)' -State Permanent
    • 更换 使用 PC 和 EVM 之间连接的接口索引。
      • 若要找出 PC 和 EVM 之间与以太网接口相对应的接口索引、请使用
        执行 PowerShell 命令。 这不需要管理员权限
      • Get-NetAdapter
    • 更换 用 EVM 的 MAC 地址作为连续字符串、如 70ff761decf2。
    • 用于设置 ARP 的命令示例如下所示
      • New-NetNeighbor -InterfaceIndex 11 -IPAddress '192.168.0.195' -LinkLayerAddress '70ff761decf2' -State Permanent
    • 在 fota_enet.h 文件中、确保根据您的设置设置 enet_host_pc_mac_address、enet_port、enet_source_ip_address、enet_destination_ip_address 的值
    • 在 enet_uniflash.py 中、确保在参数 hostp、hostPort、boardIP、boardPort 中分配了正确的 IP 地址和端口号
    • 在 fota_enet_app.cfg 文件中添加新应用映像的位置、然后将其保存。
    • 为 EVM 上电后运行以下命令:
      • python fota_enet_uniflash.py --cfg=sbl_prebuilt/am64x-evm/fota_enet_app.cfg
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    5.应用程序设置:

    • 支持 SBL OSPI 引导模式来运行工程。
    • 使用与 MCU+ SDK 的 enet_L2_cpsw 示例中的编译器配置相同的 Include 选项来配置编译器。
    • 使用与 MCU+ SDK 的 enet_l2_cpsw 示例中的链接器配置相同的文件搜索选项(包括库文件和目录路径)配置链接器。
    • 注:要成功进行身份验证、请执行以下步骤:
      • 在中
         ${MCU_PLUS_SDK_PATH}/source/drivers/bootloader/soc/am64x_am243x/bootloader_soc.c
        • 注释行:
           status = Bootloader_socSecHandover();
        • 重新编译 MCU+ SDK 中的所有库
    • 如果使用 HS-SOC 器件、请在编译工程并刷写到 FS 之前在 devconfig.mak 文件中进行以下更改:
      • 迭代  
        DEVICE_TYPE?=GP
    • 如果使用 HS-SE 器件、请在构建工程并刷写到 SOC 之前、在 devconfig.mak 文件中进行以下更改:
      • 迭代  
        DEVICE_TYPE?=HS
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    6. TMDS243EVM 上的时间曲线:


    对于 422492 字节的文件大小、在 profile = release mode 中、

    输入时钟频率:166MHz、输入时钟分频:4、协议:8D-8D-8D

    • 以太网设置所需的时间:                          12.063180s
    • 传输新应用程序映像所需的时间:    0.103693 秒
    • 验证新应用程序映像所需的时间: 0.001419 秒
    • 刷新新应用程序映像所需的时间:          2.603750s

    注意:以太网设置所花费的时间与文件大小无关

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

    7. ENETFOTA 实现代码:

    e2e.ti.com/.../fota_5F00_enet.zip

    e2e.ti.com/.../sbl_5F00_ospi.zip

    e2e.ti.com/.../File_2D00_Transfer.zip