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.

[参考译文] AM5728:Linux 的运行时 DSP 功能替代产品

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/661515/am5728-runtime-dsp-function-replacement-from-linux

器件型号:AM5728

您好!

我的客户想知道使用现有的 C6x/链接器选项是否可以执行以下操作:

主要概念是在不重新启动 C6x 的情况下从 ARM 端替换 DSP 函数映像(换言之,在文件系统上获取函数映像的 bin 文件,并在执行之前将其部署到 DSP 存储器)。 如果支持此功能、他们希望了解为每个函数生成*。bin 的确切链接器选项。

...我的理解是、C6x 工具链中不支持这一点。 正确,对吧?
我建议了另一种方法:与上述方法不完全相同、但类似的方法可能是 C6x 中的存储器覆盖技术、以实现将函数重映射到同一运行地址。 本文档中介绍的内容:

http://www.ti.com/lit/an/spraa46a/spraa46a.pdf

他们还对存储器覆盖技术感兴趣,似乎可以从链接下载一些示例代码()

此下载链接在上述文档的第1页中进行了说明、但遗憾的是、它未激活。 您可以在此处分享此示例吗?

此致、
NK

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

    您可以参阅 processors.wiki.ti.com/.../Processor_SDK_RTOS_BOOT_C66x 、了解如何将 DSP 映像转换为二进制文件。 然后、Linux 主机需要将该二进制文件加载到特定的 DSP 存储器位置。 您需要知道 DSP func0和 DSP fun1的入口地址。 然后在任务中、使用类似的 DSP_func0 =(uint32_t (*)(void)) DSP_func0_address 执行函数。

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

    尊敬的 Eric:

    感谢您的回复。 我相信您建议的链接适用于 C6678等 KeyStoneI 系列、与此主题无关。 我想我知道使用 hex6x 从整个图像中获得图像的基本方法。 但在这种情况下、它们只需要从特定函数中 romize。 如何使用 hex6x (或一些其他实用程序)解析和提取自 elf 格式的可执行文件中的特定函数数据?  

    此致、
    NK

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

    我提供的链接适用于 Keystone 系列、但您使用的是 DSP 的 C66x、此信息也适用。 让我检查一下如何从函数中获取、然后返回给您。

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

    谢谢、Eric。 我在`ll 等待您的回复。

    此致、
    NK

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

    我不清楚用例、也不清楚为什么需要创建连续二进制文件来实现此功能。 我建议为 DSP 函数构建一个函数表、其中每个函数都作为与其关联的 ID。 当 Linux 调用 DSP 时、它可以传递函数 ID 作为消息的一部分、帮助 DSP 确定需要执行哪个函数。

    另一种方法是使用函数指针。 加载 DSP 二进制文件后、ARM Linux 可以发送指向需要在 DSP 上执行的函数的函数指针。

    如果这些方法不可行、请提供更多详细信息、说明为什么需要使用链接器和编译器工具而不是使用在 DSP 上运行的软件来实现这一点?

    此致、
    Rahul

    PS:如果您仍想了解基于 hex6x 的工具。 创建连续二进制文件/从二进制文件的文档在 C6000编译器文档中提供、该文档与 SDK 中的 CGTools 一起提供。 它需要使用.RMD 文件和 hex6x。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Rahul - San、

    我理解您的观点。 根据我的想法 、您建议的方式将更通用。 或者、我在前一封邮件中提到的存储器覆盖可能是可行的解决方案。  我认为客户希望对 DSP 进行类似 OpenCL 的图像替换、仅用于函数调用、而不是完整的 DSP 图像、以便在其应用中实现最低的开销。 有道理吗?

    `ve hex6x、我相信我已经知道它的基础知识、根据我的理解、没有办法只针对用户指定的函数调用进行模式化。 正确?

    此致、
    NK

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

    在我建议的方法中、过音量最小、因为它只是使用单个 switch 语句的控制代码、它将根据函数 ID 执行不同的功能。 但是、如果他们已经确定这不是他们想要追求的路径、那么您可以使用 OpenCL 或基于链接器的技术来实现这一实现。

    我不是对 hex6x 和 OpenCL 发表评论的合适专家、因此我将邀请合适的专家来研究这个问题。

    此致、
    Rahul
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    OpenCL 使用集成到在 A15/Linux 上运行的 OpenCL 主机运行时中的动态加载程序将具有 OpenCL C 内核的 OpenCL 程序加载到 DSP 上。 文章前面提到的 DSP 函数在某种程度上对应于 OpenCL C 内核。

    以下是 OpenCL 运行时使用动态加载程序的链接: git.ti.com/.../ocl_load

    有关 C6000动态加载器的更多信息: processors.wiki.ti.com/.../C6000_Dynamic_Loader

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

    [引用用户="Naoki Kawada"]

    我建议了另一种方法:与上述方法不完全相同、但类似的方法可能是 C6x 中的存储器覆盖技术、以实现将函数重映射到同一运行地址。 本文档中介绍的内容:

    http://www.ti.com/lit/an/spraa46a/spraa46a.pdf

    [/报价]

    这种方法不太可能有用。  该应用手册(包括其他内容)介绍了如何在单个静态链接的可执行文件中创建覆盖。  用例是存储器的一部分速度非常快、但很小。  因此、您有多位代码或数据共享它。  链接器的联合体和复制表功能使管理符号和复制内容变得非常简单。  尽管它在管理寿命方面不起任何作用、即确保一次只有一件事位于快速存储器块中。  无论如何,这似乎与最初的问题陈述无关。

    谢谢、此致、

    乔治

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

    乔治

    是的、我知道。 我对 C6x 中的内存覆盖有一些经验,这就是我提到*相似*的原因。  我认为他们的主要目标是交换现有存储器区域上的功能。 在这种情况下、存储器覆盖是一种很好的方法。 但是、客户似乎不希望在 C6x 上下文中使用自我管理方法、而是希望从 A15上下文中了解。  我们将询问客户 OpenCL 是否满足他们的要求。

    此致、
    NK