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.

[参考译文] TDA4VH-Q1:从 Linux 引导时使用 C7X L2 时的问题

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1600122/tda4vh-q1-issue-when-using-c7x-l2-when-booting-from-linux

器件型号: TDA4VH-Q1

您好 TI、

 

我正在 SDK 10_01_00_04 上使用 J784S4。

 

我联系您是因为在使用 Linux 引导时使用 C7X L2 存储器时遇到了问题。  确实我做了几个测试:

 

  • 我尝试在 L2 中创建一个段,然后使用#pragma 在 L2 中运行代码:

image.pngimage.png

Linux 似乎无法加载相应 Remoteproc 的二进制文件、并且 EVM 不断重新启动、无法引导。

image.png

  • 我尝试了另一种方法、使用该方法尝试通过添加引导程序来从 u-boot 加载二进制文件。 以下是我所遵循的步骤:
    • 已在/run/media/BOOT-mmcblk1p1 中复制应用
    • 重新引导并中断 u-boot
    • 命令 MMC 1:1(检查文件是否在此处)
    • 加载 MMC 1:1 0x90000000 app.bin
    • rproc init
    • rproc 列表(获取我们要在其中加载二进制文件的内核 ID)
    • Rproc 负载 0x90000000 0x${filesize}
    • rproc 启动

加载步骤中出现相同的问题、EVM 会不断重新启动:

image.png

 

  • 为了确保只有在使用 Linux 引导时才会出现问题,我在 no_boot 模式下尝试了我的代码,这意味着没有正在运行的 Linux ,并且我能够在 L2 中运行代码:

image.png

 

  • 另外,我注意到当使用 L2 用于其他目的时,例如存储段.stack 时,我不能使用 L2 ,除非我在链接器文件中使用 type=NoLoad 属性,因为知道 NoLoad 属性删除了二进制文件中该段使用的地址:

image.png

 

在尝试加载包含 L2 使用情况的二进制文件时似乎存在问题、通过这些测试、我预计会与 A72 内核发生冲突。

如果您能在这个主题上帮助我、那会很棒。

 

谢谢您、

 

此致、

Wissam

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

    尊敬的 Wissam:

    您是否尝试在 C7x L2 SRAM 中加载具有可加载程序段的固件?

    您能否提供 C7x 固件的 readelf -l 输出?

    此致

    Suman

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

    尊敬的 Suman:

    感谢您的反馈。

    实际上、我正尝试在 C7X L2 SRAM 中加载具有可加载程序段的固件、因为必须在 L2 中运行代码。

    以下是 C7X 固件的 readelf -l 输出:  

    e2e.ti.com/.../output_5F00_elf.txt

    谢谢您、

    此致、

    Wissam

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

    尊敬的 Wissam:

    实际上、我正在尝试加载 C7X L2 SRAM 中具有可加载程序段的固件、因为有必要在 L2 中运行代码。

    感谢您提供详细信息。

    在从 A72 U-Boot 或内核(甚至从 R5F 内核)加载时、无法做到这一点。 C7x L2SRAM 是 C7x 子系统的一部分、但它在 TDA4 器件上没有单独的电源控制。

    A72 内核需要单独的电源控制、通常用于加载该内部存储器、同时要求 C7x 内核仍处于复位状态。 h/w 不支持这一点、因此 C7x L2 SRAM 中不支持可加载程序段。

    您必须在引导时依赖 C7x 固件重定位代码。

    LOAD 0x0000000000000040 0x00000000648005c0 0x00000000648005c0
    0x0000000000000340 0x0000000000000340 R E 0x40

    顺便说一下、 C7x 链接器文件应使用 C7x 本地地址 0x800000、而不是 SoC 总线地址 0x64800000。

    这在无引导模式下非常有用、因为您实际上是通过 CCS 从 C7x 内核本身进行自加载。  

    此致

    Suman

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

    尊敬的 Suman:  

    感谢您的反馈。

    实际上我正在尝试在相关 L2 中加载 C7X 代码、这意味着第一个 C7X 代码->第一个 C7X L2。

    从 A72 的角度来看、除了在器件树中指定 L2 地址范围并使用 remoteproc 加载内核之外、我们不执行任何操作。 这样做是否正确?

    我尝试使用您给我的 C7X 本地地址将代码从 C7X 链接器重定位、但也有同样的问题。 我将地址 0x64800000 替换为 0x00800000。

    下面是新的 readelf -l 输出:

    e2e.ti.com/.../output_5F00_elf_5F00_800000.txt

    此致、

    Wissam

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

    尊敬的 Wissam:

    [引述 userid=“621619" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1600122/tda4vh-q1-issue-when-using-c7x-l2-when-booting-from-linux/6169306

    这样做是否正确?

    我尝试使用您给我的 C7X 本地地址将代码从 C7X 链接器重定位、但也有同样的问题。 我将地址 0x64800000 替换为 0x00800000。

    [/报价]

    如果您尝试从 A72 加载 L2SRAM、这仍然不起作用。 根本无法从 A72 加载 L2SRAM、这是我在上一个响应中提到的。

    您本质上需要确保可加载段在 C7x L2SRAM 中没有任何内容。 这将成功引导您的 C7x、然后您可以将代码从 DDR 重定位到 L2SRAM(从 C7x 本身)。

    此致

    Suman

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

    尊敬的 Suman:

    谢谢、因此我需要找到另一种将 L2SRAM 用于我的代码的方法、因为可加载段确实使用了 L2SRAM。 引导后、我将尝试将代码从 DDR 重新定位到 L2SRAM。

    谢谢您、

    此致、

    Wissam