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.

[参考译文] SECDEVTOOL-OMAPL138C6748:如何将加密的引导加载模块加载到 RAM 中?

Guru**** 2557640 points
Other Parts Discussed in Thread: OMAP-L138

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/595699/secdevtool-omapl138c6748-how-do-i-load-an-encrypted-boot-load-module-to-ram

器件型号:SECDEVTOOL-OMAPL138C6748
主题中讨论的其他器件:OMAPL138OMAP-L138

大家好、

我正在研究安全器件 OMAPL138/C6748、并且在实施次级引导加载程序(SBL)时遇到了问题。

据我所知、要使用 SBL 引导 AIS 映像、必须使用  LoadModGen_OMAP-L138.exe 从".OUT"文件创建该映像。 然后、SBL 将把 AIS 映像加载到 RAM 中并使用安全内核 API  SK_decrittMod()对其进行解密、 最后将程序计数器分配给解密模块的入口点、应用程序可以从此处运行。

我的问题是:

1.如何在 NAND 闪存中检测引导加载模块(BLM)的启动? TI 在其支付负载的末尾排列 BLM 的标头是很奇怪的、并且在 BLM 加密后、幻数(在标头中、用于检测图像是否存在)将更改该值。  

------------------
|     有效载荷      |
------------------
|      标头      |
------------------
|    签名     |
------------------

2.假设我可以通过某种方式检测 NAND 闪存中的 BLM。 如何调用 BLM 的加载地址入口点、以便知道我应该在 RAM 中的哪个位置加载程序、以及应该在哪里放置程序计数器来开始运行应用程序?

由于没有关于这些问题的文件,我试图以我的方式解决这个问题。 我将自定义标头附加到原始 BLM、以便它具有新的结构、就像这样

------------------
|   My_Header   |

------------------
|     有效载荷      |
------------------
|      标头      |
------------------
|    签名     |
------------------

其中  My_Header  字段包含4个属性

。 my_magic_number:由我定义的用于检测 BLM 开始的常量数

。 BLMSize:BLM 的大小、包括 My_Header

。 LoadAddress:应用程序的加载地址 (我可以在应用程序的 CCS 项目中从文件'.cmd'中获取它)

。 Entrypoint:应用程序的入口点  (我可以从应用程序的 CCS 项目中的文件'.map'中获取它)

使用此解决方案,我可以成功地将 BLM 从 NAND 加载到 RAM,使用  SK_decrypt ()对其进行解密 ,并将程序计数器放置到入口点。 但是、该应用程序随后不起作用!!! 出什么问题了?

谢谢。

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

    我已将此内容转发给软件专家。 他们的反馈应发布在此处。

    BR
    Tsvetolin Shulev
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢茨韦托林·舒利夫
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    田北俊

    基本安全启动示例不支持安全模块的运行时加载。 此n`t 已添加到器件引导 ROM 中、但受支持、因为这需要在引导后进行安全到非安全的转换、并且当器件处于安全状态时、我们没有一种处理 DSP 上中断的好方法。

    请将您的使用情况和问题限制在此器件上进行基本安全启动。

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

    Rahul、

    您是说基本安全启动设备不支持安全加载模块和解密解决方案?

    我不这么认为。 事实上,在  成功解密模块后,我已经调用 SK_switchNonSec()来跳转到入口点(SK_decrittMod() 返回 sl_OK)。 但事情不起作用。

    在这里、我附上部分代码、希望它能有所帮助。

    unsigned int Entrypoint = 0;
    static void (* appEntry)();
    
    void boot_code (void)
    {
    int i;
    对于(I = 1;I < 10000;I++)
    {
    Log ("xyz\t");
    }
    }
    
    
    
    int main (void)
    {
    //用于加载和解密应用程序映像的代码
    //...
    
    // 1. 跳转到入口点--- >不奏效 (第2节。 必须注释)
    appEntry =((void)*(void)) Entrypoint;// Entrypoint 在上面的代码部分中分配
    sk_switchNonSec ((void*)(unsigned) appEntry);
    
    // 2. 跳转至本地功能--- >工作 (第1节。 必须注释)
    SK_switchNonSec ((void *)(unsigned)&boot_code);
    
    返回0;
    }
    
    

    希望您能对以上问题给予更清晰的回答。 如果我们无法在 OMAPL138 E 上写入安全的二级引导、我们将不得不拒绝 TI 芯片来提供我们的产品。

    谢谢、

     

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

    我n`t 的是、BootROM 实现了该功能、因此如果客户认为这对于他们的用例来说是安全的、则可以在他们的产品上实现该功能、但我们不会为其提供除提供包装代码之外的支持。 基本安全器件仅支持安全启动和 JTAG 锁定功能。

    为了引导器件、我们提供了一个参考示例、展示了如何将引导映像绑定到器件密钥、以及如何使用描述为绑定的过程重新刷新映像。 我们还提供安全内核 API 使用示例以供参考。 n`t 您没有这些示例、我可以通过私人消息共享。

    此致、
    Rahul
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我已经分享了使用 E2E 私人传播讯息供您参考的示例。 注意要调用安全 API、您需要在 SECUREWITHSK 状态下退出安全启动(使用 INI 文件设置)、在执行其余代码之前使用 SK_swtichnonSecure 解密进入非安全状态的模式。

    希望这对您有所帮助。

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

    我尝试从辅助引导加载程序引导映像、