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.

[参考译文] TDA4AL-Q1:[TDA4] IPC 在 Linux 端实现服务器示例

Guru**** 2455490 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1486340/tda4al-q1-tda4-ipc-implement-server-on-linux-side-example

器件型号:TDA4AL-Q1

工具与软件:

您好:

   我已经 在 Linux 端运行工具 rpmsg_char_simple。 它可以在我的构建环境中有效。

   并使用 R5F CPU 上的 FreeRTOS 固件 IPC_ECHO_TEST。 IPC 可以工作。  

   以上测试示例是 R5F 端的服务器。 Linux OS 是客户端。 我想知道如何在 Linux 端和 R5F 端创建 IPC 服务器。 因为我们希望 R5F 从 CAN 总线获取一些数据、然后将数据从 R5F 端传输到 A72 Linux 端。 我们希望 IPC 服务器位于 A72 Linux 端。

   您能否提供一个示例演示代码? 谢谢!

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

    我使用的 SDK 版本是 10.01.00.04

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

    您好:

       以上是关于 Linux 端的 EHE 服务器的评论。 这意味着我要在 Linux 端创建端点。 我怎么能做到这一点?

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

    尊敬的 Sheng-Shun:

       关于 Linux 端以河服务器的上述评论。 这意味着我要在 Linux 端创建端点。 我该怎么做?

    您可以在 Linux 上创建新的端点、但任何已 创建的端点始终作为相应 rpmsg_ctrl 器件(之前从固件端发布的端点)的子 rpmsg 器件创建。

    Linux 应用必须将端点地址交换给固件端、以使其知道。  因此、它们始终被视为辅助服务器端点。 不能在 Linux 端创建独立服务器端点。  

    此致

    Suman

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

    尊敬的舒曼:

       谢谢你的答复!

        从您的注释可以看出、端点地址仅在 RTOS 上创建。 Linux rpmsg 器件将在/dev/rpmsgx.上创建一个端点节点 因此、我无法在 Linux 方面创建它、而是让 RTOS 知道它。

       正如我所知道的 ipc_echo_test RTOS 固件代码、它会创建一个具有特定端点号的任务。 也让 Linux 内核知道它。 然后创建/dev/rpmsgx 设备节点。 Linux 端可将此/dev/rpmsgx 器件 节点连接到 IPC、再连接到 RTOS 端。

    Linux 应用程序必须将端点地址交换给固件端才能知晓该地址。  因此、它们始终被视为辅助服务器端点。 不能在 Linux 端创建独立服务器端点。  [报价]

      如您所说、让我了解您的理想:

       1、在 RTOS 端、我为端点20创建了一个任务。 减少  

       2.在 Linux 方面,已经运行了一个进程。 本地端点设置为25。 使用 IPC 到 RTOS 端、可将端点交换到 RTOS 端。

       3.我会让 Linux 端以后台进程的方式运行这个进程。

       4.如果 RTOS 端会向 Linux 端发送消息。 它将知道 Linux 端点编号。 RTOS 端可以将 IPC 发送到 Linux 端。

       这是正确的吗? 如果我错了、请告诉我。

     

       如果不想用 IPC 交换 Linux 端点号、可以预定义 Linux 端点号吗? 我是说硬代码定义 Linux 端点号。

      就像我知道的最大值 端点号为256。 这是什么意思256?  即/dev/rpmsg0 ~/dev/rpmsg255? 总共 R5F (CORE 0、1)、C7X 1和 C7X 2可以创建最大端点数 是256、对吧?

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

    尊敬的 Sheng-Shun:

    [报价 userid="642242" url="~/support/processors-group/processors/f/processors-forum/1486340/tda4al-q1-tda4-ipc-implement-server-on-linux-side-example/5707566 #5707566"]    根据您的意见、端点地址仅在 RTOS 上创建。 Linux rpmsg 器件将在/dev/rpmsgx.上创建一个端点节点 因此、我无法在 Linux 方面创建它、而是让 RTOS 知道它。

    正确。

    已知 ipc_echo_test RTOS 固件代码后、它将创建一个具有特定终点编号的任务。 也让 Linux 内核知道它。 [报价]

    是的、请注意、这会创建一个/dev/rpmsg_ctrlX 节点。 /dev/rpmsgX 节点与 Linux 端点相关联。

       正确吗? 如果我错了、请告诉我。

    有。 当消息从 Linux 端发送到 RTOS 端点时、RTOS 始终可以继承知道 Linux 的端点。

       如果我不想用 IPC 交换 Linux 端点号、我可以预定义 Linux 端点号吗? 我的意思是硬代码定义 Linux 端点号。

    否、不支持此功能。 用户空间端点始终由内核分配。

    [报价 userid="642242" url="~/support/processors-group/processors/f/processors-forum/1486340/tda4al-q1-tda4-ipc-implement-server-on-linux-side-example/5707566 #5707566"]  据我所知 端点号为256。 这是什么意思256?  即/dev/rpmsg0 ~/dev/rpmsg255? 总共 R5F (CORE 0、1)、C7X 1和 C7X 2可以创建最大端点数 是256、对吗?[/quote]

    您是否指的是 RTOS 端使用的宏? 端点号对于每个处理器都是本地的。

    在 RTOS 端上、Linux 端点不受这个宏的约束。

    此致

    Suman

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

    尊敬的 舒曼:

    [报价 userid="35368" url="~/support/processors-group/processors/f/processors-forum/1486340/tda4al-q1-tda4-ipc-implement-server-on-linux-side-example/5708782 #5708782"]

    您是否指的是 RTOS 端使用的宏? 端点号对于每个处理器都是本地的。

    在 RTOS 端上、Linux 端点不受这个宏的约束。

    [报价]

       从您的注释可以看出、端点只能在 RTOS 端创建。 那么 RTOS 侧是否有上限? 可在 RTOS 端创建多少个端点?

       在 Linux 端、不存在创建端点。 但要 IPC 到 RTOS 端、则有本地端点。 让我们在内核端自动分配。 Linux 是否有最大本地端点限制?

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

    尊敬的 Sheng-Shun:

    [报价 userid="642242" url="~/support/processors-group/processors/f/processors-forum/1486340/tda4al-q1-tda4-ipc-implement-server-on-linux-side-example/5708826 #5708826"]根据您的意见、端点只能在 RTOS-side 创建

    如果您的评论是关于创建一个具有已知端点号的端点,那么以上陈述是准确的。 Linux 用户空间应用程序无法创建具有预定数字的端点。

    [报价 userid="642242" url="~/support/processors-group/processors/f/processors-forum/1486340/tda4al-q1-tda4-ipc-implement-server-on-linux-side-example/5708826 #5708826"]那么 RTOS-side 是否有上限? 可在 RTOS 端创建多少个端点?[/QUOT]

    是的、RTOS IPC 驱动程序的编写目的是确保安全、因此需要将存储器计入所有存储空间。 这是由决定的 MAXNDPOINTS 宏 IN /packages/ti/drv/ipc src / ipc_priv.h  文件、当前设置为256。 这应该比一般情况下更足够。 如果产品部署需要、您可以始终重新构建驱动程序以增加此值。

    Linux 是否有本地端点上限?

    Linux 驱动程序使用 IDR_ALLOC() API 来 分配终点、因此受使用情况的约束。 Virtio rpmsg 驱动程序的使用可分配从1024到 INT_MAX  的本地端点、这是相当多的。

    此致

    Suman