主题中讨论的其他器件:OMAP-L138、 OMAPL138
大家好、
我正在为启用安全功能的 OMAP-L138芯片编写 DSP 次级引导加载程序、在该程序中、我需要唤醒 ARM 内核并为 ARM 和 DSP 分配入口点。
我已经按照 Rahul (第一个链接)提供的示例、并在下面的部分中阅读了一些有用的主题:
我的引导过程如下:
DSP 首先启动、DSP ROM 引导加载程序将 DSP 次级引导加载程序(SBL)加载到存储器中、将控制权转移到 DSP SBL、然后在 SECUREWITHSK 模式下退出
DSP SBL 将 ARM 和 DSP 应用程序映像加载到 mDDR 中、使用安全内核 API 对其进行解密并检索两个入口点。 该过程处于 SECUREWITHSK 模式
DSP SBL 运行 PRUSS 以将 ARM 复位矢量写入0xFFFFFF0000、通过该矢量可唤醒 ARM 内核并开始运行 ARM 应用。 该过程仍处于 SECUREWITHSK 模式
4.同时使用 SK_switchNonSec () API 将 DSP SBL 切换到非安全模式,并将控制权转移到 DSB 用户应用程序。 现在、整个系统在不安全的世界中运行。
用于设置 ARM 复位矢量的 PRU 代码和 ARM 代码与 Rahul 示例中的代码相同。
/* PRU 代码*/
unsigned int armBootDmaxCodeConst[]={
0x24000080、//将 ARM 矢量表地址加载到 r0
0x24ffffc0、
0x24000081、//将 ARM 代码地址加载到 R1
0x240000c1、
0xf500e182、//从*R1读取 ARM 代码到 R2、……
0xe500e082、//从 R2写入 ARM 代码、…… 至*r0
0x79000000、//自循环
};
/* arm boot arm code */
unsigned int armBootArmCodeConst[]={
0xEA000007、// vt0:b boot
0xEAFFFFFE、// vt0:自循环
0xEAFFFFFE、// vt0:自循环
0xEAFFFFFE、// vt0:自循环
0xEAFFFFFE、// vt0:自循环
0xEAFFFFFE、// vt0:自循环
0xEAFFFFFE、// vt0:自循环
0xEAFFFFFE、// vt0:自循环
//跳转:、数据:
0x00000000、
//启动:
0xE51F000C、// LDR R0、跳转
0xE1A0F000、// MOV PC、R0
};
我的问题是只有 DSP 应用程序运行、似乎 ARM 内核尚未唤醒。 这很奇怪、因为有些人成功地运行了 Rahul 的考试代码。 我的问题是:
1.我的引导顺序是否正确?
2. ARM 入口点是否需要位于共享 RAM 中(我的位于 DDR 中)?
3.我应该在非安全模式下唤醒 ARM 内核、还是可以在 SECUREWITHSK 模式下唤醒?
4.我应该尝试哪些可接受的解决方案?
提前感谢、



