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.

[参考译文] AM263P4-Q1:如何在.tiimage 中计算 SBL 程序的启动?

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1578149/am263p4-q1-how-to-calculate-the-start-of-the-sbl-program-in-tiimage

器件型号: AM263P4-Q1

您好:

参考: AM263Px MCU+ SDK:安全相关工具 

我已经在 OSPI SBL 中嵌入了一个版本字符串、并在 SBL 程序中修复了其地址。

我想从我正在运行的应用程序中读取这个 SBL 版本字符串、因此我需要知道它在 OSPI 闪存中的地址偏移量。

第一步是计算 SBL ELF 文件的起始位置在.tiimage 文件中。 我通过在.tiimage 中搜索魔术字来凭经验知道偏移值 (0x191D):

image.png

我的问题是、如何仅从脚本 (mcu_rom_image_gen.py) 或其参数知道或推导出值 0x191D (6429d)?

我可以看到证书大小固定为 4096 字节、因此没有考虑 2333 字节。

谢谢你。

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

    尊敬的 Kier:

    很抱歉、专家目前已离职。 当他们下周晚些时候返回办公室时、请期待收到回复。

    此致、

    Aj Favela.  

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

    尊敬的 Kier:

    这取决于您的 SBL 的创建方式、我相信可以从 python 文件中导出它  

    MCU_PLUS_SDK/source/security/security_common/tools/boot/signing/mcu_rom_image_gen.py

    大小因签名算法使用的 RSA 2098 或 4096 等而异

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

    一旦 certifcate 生成、脚本就会用.out 映像附加 cert 并吐出.tii 映像

    若要获取大小、您需要编写一个逻辑来计算 cert 的大小并获取该信息。

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

    感谢你的提示 Nilabh。

    一旦证书生成、脚本就会用.out 映像附加证书并吐出.tii 映像

    没完全达到。  我们都 假设是 ELF (.out) 文件附加到证书中、但实际上是 附加到证书中的.bin 文件、因此 SBL 的 开头仍然不会以 ELF 幻数开头。

    我将“print (cert_fh.tell ())“添加到了“cu_rom_image_gen.py"中“中:


    这将显示值 1737:

    在 1737 (0x6C9) 的 tiimage 中、我看到了.bin 图像的开头、其中包含熟悉的异常矢量代码:



    我不知道为什么 ELF 幻数出现在.tiimage 中、但我想现在无关紧要、因为这并不表示 SBL 程序的启动。

    现在我的问题略有改变:

    RBL 将.tiimage 中从 0x6C9 开始的 SBL 程序复制到 0x70002000。  RBL 如何知道 SBL .bin 映像的第一个字节在.tiimage 中的位置? 我们 根据经验知道偏移是 0x6C9、但 RBL 如何知道/解决该问题? 我 想在应用中使用相同的逻辑。

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

    您好、

    SBL TII 映像是“sbl_cert +sbl_binary“、即 certificate 后跟 sbl_binary“、因此查找 certLength 会给出“sbl_binary"映像“映像的起始地址“

    RBL 使用以下逻辑查找 SBL_CERT 长度、其中 ptrCertBuffer[0]证书的第一个字节和  ptrCertBuffer[1]是第二个字节…… 等

    另请参阅示例。

    查找 certLength 的参考代码:

    示例

    “0x7C068230"是“是 tiiImage 的第一个字

    ptrCertBuffer[0]= 0x30 -> DER 标签

    ptrCertBuffer[1]= 0x82

    长格式:

    lengthSize = 2;

    索引= 0

     *ptrCertLength = 0+ 6.

    索引= 1

    *ptrCertLength = 0x6 << 8 + 0x7C

    *ptrCertLength = 0x67C

    此致、

    Ajay