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.

[参考译文] PROCESSOR-SDK-J721E:SDK:7.03

Guru**** 2539500 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1023035/processor-sdk-j721e-sdk-7-03

器件型号:PROCESSOR-SDK-J721E

您好!

我正在尝试使用我们定制板上的 SBL 启用 OSPI 引导、但不是
我们使用的是定制 MCU1_0固件的标准 MCU-SW (CAN-boot-app)
(这将像 MCU-SW 那样从 OSPI 闪存引导其他内核)。

基本上、这与 SBL -> MCU-SW 设置非常相似、只有
区别在于、MCU-SW 加载到 SRAM、而我们在 MCU1_0上运行的定制固件使用 DDR。
但是、这对于我们来说不是开箱即用的、因为在期间 BSS 部分未调零
二进制加载。 遗憾的是、有一段与 SCI 服务器/客户端相关的代码
假设静态变量(位于 BSS 中)在启动时实际等于零的逻辑。
例如、请参阅 pdk_jacinto_07_03_00_29/packages/ti/drv/sciclient/srm_pm_hal/pm/drivers/spc/psc.c
具体来说、PSC_Lookup 函数假设'static struct device * PSC_devs'初始化为零。
BTW 这似乎不是应用此假设的唯一位置、因为它无法完全解决问题。

如果我获得了正确的 RPRC 格式、用于对 OSPI 闪存进行编程、那么当从 ELF 生成时、将完全丢失 BSS 段信息
因此、SBL 似乎甚至不知道在固件加载期间应将哪个存储器区域归零。
作为权变措施、我已将 SBL 的代码更新为零、将用于 MCU 固件的整个 DDR 更新为零、现在一切正常
但是、由于我们实际使用了相当多的 MCU、因此我们必须将大量耗时的内存归零
(我们的 MCU 固件类似于 MCU-SW、使用相同的固件加载逻辑和 RPRC 格式、因此 SBL 仅加载 MCU1_0
我们似乎需要为 MCU2_0和 MCU3_0等其他内核实现零 DDR、以确保其正常工作)。

我想知道我是否错过了某个东西、并且有一种方法可以正确地处理 BSS
使用 SBL 正确启用 OSPI 引导、否则预计会出现这种行为、SBL 应仅从 SRAM 启动代码
(由于硬件规格、我假设在初始化时将其归零-不是吗?)。

谢谢、
安德烈。

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

    尊敬的安德烈:

    理想情况下、SBL 应该将内存的这个部分设置为0x0、如果它知道的话。 不确定是否已经处理好了。 我们会检查并返回。  

    另一种解决 方案是正确初始化 sciclient/sciserver 的数据结构、而无需将 BSS 段指定为 memset。 我将与团队一起查看如何/是否可以做到这一点。  

    此致、

    Brijesh

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

    尊敬的安德烈:

    还有一个选项、您能否检查编译器是否支持 zero_init 标志? 然后、您可以 在链接器标志中将此标志设置为 on、如"--zero_init=on"、这有助于初始化这些变量。

    此致、

    Brijesh

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

    您好、Brijesh、

    感谢您的提示。 我们将 TI Arm 编译器用于 R5F 内核和该选项

    默认情况下似乎已启用、但有另一个与--zero_init 相关的选项、

    也就是--rom_model/--ram_model。

    --zero-init 选项仅在 ROM 模型处于 RAM 模型时影响 BSS 初始化

    BSS 初始化应由加载程序(本例中为 SBL)完成。

    因此、默认情况下、固件是在 RAM 模型中构建的、当固件以 ROM 模型链接且启用了--zero-init 时、SBL BSS 初始化(实际上不是初始化)似乎不是问题。 此外、从性能的角度来看、这似乎是一个更好的解决方案-我们在 SBL 中没有太多的内存。

    我唯一的问题是非 ARM 内核。 实际上、我不确定此问题是否会影响它们、以及适当的编译器是否提供类似的选项/链接模型。

    谢谢、

    安德烈。

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

    您好 Andrey、

    我认为即使对于 DSP 内核也有类似的编译器标志、因此 SBL 不需要对本节进行零初始化。

    此致、

    Brijesh