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.

[参考译文] AM6442:创建多个 rpmsg 端点(resp. channel)、以在 A53 Linux 和 R5Fss0_0 FreeRTOS 之间交换数据

Guru**** 2551110 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1226565/am6442-creating-multiple-rpmsg-endpoints-resp-channels-to-exchange-data-between-a53-linux-and-r5fss0_0-freertos

器件型号:AM6442
主题中讨论的其他器件:SK-AM64

尊敬的社区和 TI 支持:

我正在接触的是 RPMsg 模块 A TI SK-AM64评估板。

我将带有端点14 (rpmsg_chrdev)的 ti-rpmsg-char 示例(Linux 和 FreeRTOS)移植到我自己的应用程序中、工作正常。

关于目标应用、我要打开 R5Fss0_0上的3个端点 、以便有三个通道  与 Linux 交换数据。

请查看随附的概念以进行进一步说明。 右侧的 for 循环应该只显示原理.. ;)

第一个端点由 R5F 创建并发布到 Linux 时、Linux 控制台会显示以下消息、指出端点(通道) 14可用:

[timestamp] virtio_rpmsg_bus virtio0: creating channel rpmsg_chrdev addr 0xe

rpmsg 设备在下创建/dev/rpmsg_ctrl0。 还  会创建以下(对应的)符号链接:

/sys/class/rpmsg/rpmsg_ctrl0 -> ../../devices/platform/bus@f4000/bus@f4000:r5fss@78000000/78000000.r5f/remoteproc/remoteproc1/remoteproc1#vdev0buffer/virtio0/virtio0.rpmsg_chrdev.-1.14/rpmsg/rpmsg_ctrl

sys/bus/rpmsg/devices/virtio0.rpmsg_chrdev.-1.14 -> ../../../devices/platform/bus@f4000/bus@f4000:r5fss@78000000/78000000.r5f/remoteproc/remoteproc1/remoteproc1#vdev0buffer/virtio0/virtio0.rpmsg_chrdev.-1.14


RPMessage_announce 执行第二个通道时、不会向控制台打印任何消息、表明已创建新通道。

我可以 单独宣布第二个端点,但以前没有宣布其他端点,而不是第二个端点。  

有人能帮助我如何管理我的问题吗?

甚至可以使用 rpmsg-char 驱动器从同一个内核(R5Fss0_0)打开3个相同类型的端点吗?

如何获取 更多 rpmsg 器件、如 rpmsg_crtl1和 rpmsg_ctrl2?

所有三个端点的服务名称"rpmsg_chrdev"是固定的吗?

您可能在阅读时已经注意到、我并不清楚所有的定义、例如通道、驱动程序(ti-rpmsg-char)、模块(rpmsg_char)...

 这些定义是否可以 与创建的符号链接匹配?

在本文中、Suman 提到该器件 需要绑定到 rpmsg-char 驱动程序。

我如何实现这一点、或者通常是否由 TI rpmsg API 完成这一操作?  DRA829V:rpmsg char 驱动程序没有/dev 条目

在此 Post Thao 有一个类似的问题(解决方案仍然缺失): AM6442: IPC rpmsg:创建2个设备或2个端点

非常感谢您提供的任何建议和帮助!

丹尼尔

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

    Daniel、您好!

    1) 1)您使用的是哪个版本的 SDK? (请注意、用于 Linux 内核6.1的 rpmsg userspace 库仍在开发中、因此我只能在我们发布的 SDK 中评论 Linux 内核)。

    2)您能解释一下您正在对 MCU+代码所做的更改,以及您观察到的输出是什么 ,您的声明"我可以单独宣布第二个端点,当以前没有其他端点被宣布,而不是作为第二个端点"。

    一般而言、是的、您应该能够定义多个通道、这些通道可以使用同一组 RPMsg Virtio 缓冲区在不同内核上运行的不同任务之间进行通信。

    此致、

    尼克

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

    您好、Nick。

    感谢您的回答和问题!

    到第1点):

    我正在使用 MCU+ SDK 版本08_02_00_31和此处提供的 TI 内核5.10.100-rt62 (TI_TAG 08.02.00.003-RT):08.02.00.003-RT 版本

    至第2点):

    我没有对 MCU+ SDK 代码进行任何更改。 它仅在我的 Code Composter Studio 项目中引用和使用。

    抱歉我的解释不清楚。  可以分别创建和宣布端点的编号为14和15。 但是、当我创建端点、编号为15、并在端点14成功创建并发布(并且在 Linux 中添加了其设备/dev/rpmsg_ctrl0)后、向 Linux 宣布它、则什么都不会发生。 Linux 控制台上没有像以前那样显示关于端点号15的消息。 此外、也未添加器件/dev/rpmsg_ctrl1。

    进一步说明见附图。  

    你还有什么建议给我吗? 我做错了吗?

    非常感谢或您的提前帮助!

    丹尼尔

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

    Daniel、您好!

    明白了。 我今天没有时间在我身边运行测试、我计划明天运行测试。 如果我在周四或周五尚未回复、请 Ping 该主题。

    此致、

    尼克

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

    您好、Nick。

    感谢您的时间和支持! 这里是 Ping;)

    丹尼尔

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

    Daniel、您好!

    我对这里继续拖延表示歉意。 我犯了更新 Ubuntu 系统的错误、这些操作最终(大多数情况下)已完成设置。 我们希望明天能在实验室里恢复一天。

    此致、

    尼克

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

    嗨、Nick、

    感谢您的回复! 你对我有一些新的见解吗?
    您是否能够花些时间解决此问题?

    非常感谢!

    丹尼尔

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

    Daniel、您好!

    感谢您一直以来对我们的关注。

    测试设置

    我目前正在为 Linux 和 MCU+ SDK 开发 SDK 8.6 (使用6月13日发布的 MCU+ SDK 8.6.0.45)。 我希望在 SDK 8.2上对您来说结果相似。

    我为 MCU+项目 IPC_rpmsg_echo_linux 编写了一个补丁、但今天我没有时间运行测试。 您能否试用一下、看看它是否允许您与多个端点交互? 基于对 RPMsg 代码的读取、这就是我希望我们在单个远程内核上创建多个端点的方法。

    e2e.ti.com/.../0001_2D00_Linux_5F00_RPMsg_5F00_Echo_2D00_add_2D00_additional_2D00_endpoints.patch

    如果您不熟悉 Git 文件的应用、我在 Linux 终端上按照以下过程进行操作:

    $ cd location/of/mcu+/sdk
    $ git status
    // we see no git repo has been created yet
    $ git init
    $ git add .
    // create the initial commit by adding everything in the SDK
    // this works best with a fresh SDK installation
    $ git branch
    // the master branch is the only branch
    $ git branch featureBranchName
    $ git checkout featureBranchName
    // copy over the patch file
    $ git apply patchFileName

    此致、

    尼克

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

    您好、Nick。  

    感谢您的回复以及您的进一步建议和说明!

    我将在明天或至少下星期三尝试修改后的示例。  

    我相信我仍然已经部署了相应的 Linux 程序(rpmsg_char_simple)、正如我在本示例中也开始的那样。

    我会让你知道结果!

    此致、

    丹尼尔

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

    嗨、Nick、

    我能够应用补丁并编译示例程序。 我可以在明天测试它、让您知道它是否按预期工作。

    丹尼尔

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

    听起来不错,感谢丹尼尔的更新!

    请随时向我们提供有关它是否有效的最新信息。 一旦我们开始工作、我会将此内容变成一个常见问题解答、以便未来的工程师可以更轻松地找到。

    此致、

    尼克

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

    我有一些结果:

    当 R5f 的二进制文件在启动过程中由 Linux 加载时、会显示已创建了所有3个所需的通道:

    [   15.881572] virtio_rpmsg_bus virtio0: creating channel ti.ipc4.ping-pong addr 0xd
    [   15.881837] virtio_rpmsg_bus virtio0: creating channel rpmsg_chrdev addr 0xe
    [   15.881979] virtio_rpmsg_bus virtio0: creating channel rpmsg_chrdev2 addr 0xf
    [   15.882093] virtio_rpmsg_bus virtio0: creating channel rpmsg_chrdev3 addr 0x10
    [   15.950668] virtio_rpmsg_bus virtio0: rpmsg host is online
    

    另一个乒乓通道也在交换其消息:

     ............................................................................ sg 92 (src: 0xd)
    [   17.774577] rpmsg_client_sample virtio0.ti.ipc4.ping-pong.-1.13: incoming msg 93 (src: 0xd)
    [   17.774815] rpmsg_client_sample virtio0.ti.ipc4.ping-pong.-1.13: incoming msg 94 (src: 0xd)
    [   17.775023] rpmsg_client_sample virtio0.ti.ipc4.ping-pong.-1.13: incoming msg 95 (src: 0xd)
    [   17.775231] rpmsg_client_sample virtio0.ti.ipc4.ping-pong.-1.13: incoming msg 96 (src: 0xd)
    [   17.775440] rpmsg_client_sample virtio0.ti.ipc4.ping-pong.-1.13: incoming msg 97 (src: 0xd)
    [   17.775676] rpmsg_client_sample virtio0.ti.ipc4.ping-pong.-1.13: incoming msg 98 (src: 0xd)
    [   17.775884] rpmsg_client_sample virtio0.ti.ipc4.ping-pong.-1.13: incoming msg 99 (src: 0xd)
    [   17.776094] rpmsg_client_sample virtio0.ti.ipc4.ping-pong.-1.13: incoming msg 100 (src: 0xd)
    [   17.776104] rpmsg_client_sample virtio0.ti.ipc4.ping-pong.-1.13: goodbye!
    

    通过使用相应的rpmsg_char_simple 应用程序测试程序,显示第一个端点运行良好,但第二个和第三个端点没有:

    第一个(rpmsg_chrdev、Endpt 编号14):

    root@-target-:/home/-user-/ti-example-multiple-channels# ./rpmsg_char_simple -r 2 -n 10 -d rpmsg_chrdev -p 14
    
    Created endpt device rpmsg-char-2-849, fd = 3 port = 1025
    Exchanging 10 messages with rpmsg device ti.ipc4.ping-pong on rproc id 2 ...
    
    Sending message from Linux #0: hello there 0!
    Receiving message echoed by R5F #0: hello there 0!
    Sending message from Linux #1: hello there 1!
    Receiving message echoed by R5F #1: hello there 1!
    Sending message from Linux #2: hello there 2!
    Receiving message echoed by R5F #2: hello there 2!
    Sending message from Linux #3: hello there 3!
    Receiving message echoed by R5F #3: hello there 3!
    Sending message from Linux #4: hello there 4!
    Receiving message echoed by R5F #4: hello there 4!
    Sending message from Linux #5: hello there 5!
    Receiving message echoed by R5F #5: hello there 5!
    Sending message from Linux #6: hello there 6!
    Receiving message echoed by R5F #6: hello there 6!
    Sending message from Linux #7: hello there 7!
    Receiving message echoed by R5F #7: hello there 7!
    Sending message from Linux #8: hello there 8!
    Receiving message echoed by R5F #8: hello there 8!
    Sending message from Linux #9: hello there 9!
    Receiving message echoed by R5F #9: hello there 9!
    
    Communicated 10 messages successfully on rpmsg-char-2-849
    
    TEST STATUS: PASSED

    第二个 (rpmsg_chrdev2、Endpt Number 15):

    root@-target-:/home/-user-/ti-example-multiple-channels# ./rpmsg_char_simple -r 2 -n 10 -d rpmsg_chrdev2 -p 15
    
    _rpmsg_char_find_ctrldev: rpmsg directory doesn't exist under virtio0.rpmsg_chrdev2.-1.15
    Can't create an endpoint device: No such file or directory
    TEST STATUS: FAILED

    第三个 (rpmsg_chrdev3、Endpt number 16):

    root@-target-:/home/-user-/ti-example-multiple-channels# ./rpmsg_char_simple -r 2 -n 10 -d rpmsg_chrdev3 -p 16
    _rpmsg_char_find_ctrldev: rpmsg directory doesn't exist under virtio0.rpmsg_chrdev3.-1.16
    Can't create an endpoint device: No such file or directory
    TEST STATUS: FAILED
    

    我在 rootfs 中搜索进一步的信息。 内核的 remoteproc 部分列出了所有端点:

    root@-target-:/home/-user-/ti-example-multiple-channels# ls -l /sys/class/remoteproc/remoteproc1/remoteproc1#vdev0buffer/virtio0/
    total 0
    -r--r--r-- 1 root root 4096 Aug  7 16:14 device
    lrwxrwxrwx 1 root root    0 Aug  7 16:14 driver -> ../../../../../../../../../bus/virtio/drivers/virtio_rpmsg_bus
    -r--r--r-- 1 root root 4096 Aug  7 16:14 features
    -r--r--r-- 1 root root 4096 Aug  7 16:14 modalias
    drwxr-xr-x 2 root root    0 Aug  7 16:14 power
    -r--r--r-- 1 root root 4096 Aug  7 16:14 status
    lrwxrwxrwx 1 root root    0 Aug  7 13:25 subsystem -> ../../../../../../../../../bus/virtio
    -rw-r--r-- 1 root root 4096 Aug  7 13:25 uevent
    -r--r--r-- 1 root root 4096 Aug  7 16:14 vendor
    drwxr-xr-x 4 root root    0 Aug  7 13:25 virtio0.rpmsg_chrdev.-1.14
    drwxr-xr-x 3 root root    0 Aug  7 13:25 virtio0.rpmsg_chrdev2.-1.15
    drwxr-xr-x 3 root root    0 Aug  7 13:25 virtio0.rpmsg_chrdev3.-1.16
    drwxr-xr-x 3 root root    0 Aug  7 13:25 virtio0.ti.ipc4.ping-pong.-1.13

    指向此端点的链接也全部创建在下/sys/bus/rpmsg/devices

    root@-target-:/home/-user-/ti-example-multiple-channels# ls -l /sys/bus/rpmsg/devices/                                                                                                                                                                  
    
    total 0
    lrwxrwxrwx 1 root root 0 Aug  7 14:33 virtio0.rpmsg_chrdev.-1.14 -> ../../../devices/platform/bus@f4000/bus@f4000:r5fss@78000000/78000000.r5f/remoteproc/remoteproc1/remoteproc1#vdev0buffer/virtio0/virtio0.rpmsg_chrdev.-1.14
    lrwxrwxrwx 1 root root 0 Aug  7 14:33 virtio0.rpmsg_chrdev2.-1.15 -> ../../../devices/platform/bus@f4000/bus@f4000:r5fss@78000000/78000000.r5f/remoteproc/remoteproc1/remoteproc1#vdev0buffer/virtio0/virtio0.rpmsg_chrdev2.-1.15
    lrwxrwxrwx 1 root root 0 Aug  7 14:33 virtio0.rpmsg_chrdev3.-1.16 -> ../../../devices/platform/bus@f4000/bus@f4000:r5fss@78000000/78000000.r5f/remoteproc/remoteproc1/remoteproc1#vdev0buffer/virtio0/virtio0.rpmsg_chrdev3.-1.16
    lrwxrwxrwx 1 root root 0 Aug  7 13:25 virtio0.ti.ipc4.ping-pong.-1.13 -> ../../../devices/platform/bus@f4000/bus@f4000:r5fss@78000000/78000000.r5f/remoteproc/remoteproc1/remoteproc1#vdev0buffer/virtio0/virtio0.ti.ipc4.ping-pong.-1.13

    然而,只创建了一个 rpmsg 设备rpmsg_ctrl0(),该设备指向第一个编号为14的已创建端点:

    root@-target-:/home/-user-/ti-example-multiple-channels# ls -l /dev/rpmsg*
    crw------- 1 root root 239, 0 Aug  7 13:25 /dev/rpmsg_ctrl0

    root@-target-:/home/-user-/ti-example-multiple-channels# ls -l /sys/class/rpmsg/
    total 0
    lrwxrwxrwx 1 root root 0 Aug  7 13:39 rpmsg_ctrl0 -> ../../devices/platform/bus@f4000/bus@f4000:r5fss@78000000/78000000.r5f/remoteproc/remoteproc1/remoteproc1#vdev0buffer/virtio0/virtio0.rpmsg_chrdev.-1.14/rpmsg/rpmsg_ctrl0

    所以我相信这些设备必须被创建才能正常工作,是吗?

    与我 自己的项目相比,可以看出,rpmsg_chrdev<2|3>当我使用相同的名称时,您正在为端点使用 diffenrent 服务名称()。   rpmsg_chrdev for both (Have to change this of course).

    Also it uses different freeRTOS Task while I am using one single task, which calls the subprogramms dealing with the endpoints cyclically.

    您是否 有关于样片计划的更多想法? 再次感谢 您的努力!

    此致  

    丹尼尔

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

    Daniel、您好!

    感谢您提供详细的测试和观察结果! 当我与 Linux 和 MCU+开发人员进行讨论时、这对我很有帮助。

    一个任务中是否可以有多个端点的好问题。 我反复核对一下 MCU+开发人员。 听起来 典型的设计似乎是每个任务都有一个端点、但我不知道 "典型"是指"这是唯一的方法"、还是"这是一种方法": https://software-dl.ti.com/mcu-plus-sdk/esd/AM64X/08_06_00_45/exports/docs/api_guide_am64x/IPC_GUIDE.html#autotoc_md408

    我还会联系其他更有 MCU+开发经验的团队成员、看看是否可以检查我的代码以及对 Linux 开发人员执行 Ping 操作。 我将在星期五尝试在我身边进行测试。

    此致、

    尼克

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

    您好、Nick、

    不用客气。 我在等待更多的消息。

    也许从我的角度再加一条注释:  服务名称可能rpmsg_chrdev是关键字吗? 我记得我为它尝试了不同的名称(就像你在rpmsg_chrdev2和示例中所做的那样rpmsg_chrdev3),并在我的代码中评论说这是一个关键字,因为它是我唯一可用的命名,即使只有一个端点。

    这或许会有所帮助。

    此致  

    丹尼尔

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

    Daniel、您好!

    我预计在周一收到开发人员的回复。

    这是一个好问题。 我会将其添加到 Linux 开发人员的问题列表中。

    此致、

    尼克

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

    实际上、我得到了 Linux 开发人员的周末更新! 我能让您重试一下,但给所有端点提供相同的 rpmsg_chrdev 服务名称吗?

    开发人员提供:

    "

    服务名称必须是"rpmsg_chrdev"、并且可以有多个端点。 我相信、AM62A 和 J7视觉应用使用多个端点。 在你的上面的线程中列出的 Virtio sysfs 列表看起来很好。 但是、由于没有"rpmsg-chrdev2" rpmsg 器件驱动程序、您不会看到/dev/rpmsg char 器件节点。

    "

    此致、

    尼克

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

    您好、Nick、  

    感谢您的回复!  我会在明天尝试它.

    我会在这里随时向您通报最新情况。

    此致

    丹尼尔

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

    听起来不错,期待更新!

    此致、

    尼克

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

    您好、Nick、

    我为您和您的团队提供了积极的反馈!

    我们现在可以使用 R5fs0_0上的服务名称 rpmsg_chrdev 与所有端点通信!

    root@-target-:/home/-user-/ti-example-multiple-channels# ./rpmsg_char_simple -r 2 -n 4 -d rpmsg_chrdev -p 14
    Created endpt device rpmsg-char-2-799, fd = 3 port = 1025
    Exchanging 4 messages with rpmsg device ti.ipc4.ping-pong on rproc id 2 ...
    
    Sending message from Linux #0: hello there 0!
    Receiving message echoed by R5F #0: hello there 0!
    Sending message from Linux #1: hello there 1!
    Receiving message echoed by R5F #1: hello there 1!
    Sending message from Linux #2: hello there 2!
    Receiving message echoed by R5F #2: hello there 2!
    Sending message from Linux #3: hello there 3!
    Receiving message echoed by R5F #3: hello there 3!
    
    Communicated 4 messages successfully on rpmsg-char-2-799
    
    TEST STATUS: PASSED
    
    
    root@-target-:/home/-user-/ti-example-multiple-channels# ./rpmsg_char_simple -r 2 -n 4 -d rpmsg_chrdev -p 15
    Created endpt device rpmsg-char-2-801, fd = 3 port = 1025
    Exchanging 4 messages with rpmsg device ti.ipc4.ping-pong on rproc id 2 ...
    
    Sending message from Linux #0: hello there 0!
    Receiving message echoed by R5F #0: hello there 0!
    Sending message from Linux #1: hello there 1!
    Receiving message echoed by R5F #1: hello there 1!
    Sending message from Linux #2: hello there 2!
    Receiving message echoed by R5F #2: hello there 2!
    Sending message from Linux #3: hello there 3!
    Receiving message echoed by R5F #3: hello there 3!
    
    Communicated 4 messages successfully on rpmsg-char-2-801
    
    TEST STATUS: PASSED
    
    
    root@-target-:/home/-user-/ti-example-multiple-channels# ./rpmsg_char_simple -r 2 -n 4 -d rpmsg_chrdev -p 16
    Created endpt device rpmsg-char-2-802, fd = 3 port = 1025
    Exchanging 4 messages with rpmsg device ti.ipc4.ping-pong on rproc id 2 ...
    
    Sending message from Linux #0: hello there 0!
    Receiving message echoed by R5F #0: hello there 0!
    Sending message from Linux #1: hello there 1!
    Receiving message echoed by R5F #1: hello there 1!
    Sending message from Linux #2: hello there 2!
    Receiving message echoed by R5F #2: hello there 2!
    Sending message from Linux #3: hello there 3!
    Receiving message echoed by R5F #3: hello there 3!
    
    Communicated 4 messages successfully on rpmsg-char-2-802
    
    TEST STATUS: PASSED

    与前一个示例相比,所有三个字符设备都被创建...

    root@-target-:/home/-user-/ti-example-multiple-channels# ls -l /dev/rpmsg_ctrl*
    crw------- 1 root root 239, 0 Aug  7 13:25 /dev/rpmsg_ctrl0
    crw------- 1 root root 239, 1 Aug  7 13:25 /dev/rpmsg_ctrl1
    crw------- 1 root root 239, 2 Aug  7 13:25 /dev/rpmsg_ctrl2

    ... 并链接到相应的缓冲区:

    root@-target-:/home/-user-/ti-example-multiple-channels# ls -l /sys/class/rpmsg/
    total 0
    lrwxrwxrwx 1 root root 0 Aug  7 16:03 rpmsg_ctrl0 -> ../../devices/platform/bus@f4000/bus@f4000:r5fss@78000000/78000000.r5f/remoteproc/remoteproc1/remoteproc1#vdev0buffer/virtio0/virtio0.rpmsg_chrdev.-1.14/rpmsg/rpmsg_ctrl0
    lrwxrwxrwx 1 root root 0 Aug  7 16:03 rpmsg_ctrl1 -> ../../devices/platform/bus@f4000/bus@f4000:r5fss@78000000/78000000.r5f/remoteproc/remoteproc1/remoteproc1#vdev0buffer/virtio0/virtio0.rpmsg_chrdev.-1.15/rpmsg/rpmsg_ctrl1
    lrwxrwxrwx 1 root root 0 Aug  7 16:03 rpmsg_ctrl2 -> ../../devices/platform/bus@f4000/bus@f4000:r5fss@78000000/78000000.r5f/remoteproc/remoteproc1/remoteproc1#vdev0buffer/virtio0/virtio0.rpmsg_chrdev.-1.16/rpmsg/rpmsg_ctrl2

    root@-target-:/home/-user-/ti-example-multiple-channels# ls -l /sys/class/remoteproc/remoteproc1/remoteproc1#vdev0buffer/virtio0/
    total 0
    -r--r--r-- 1 root root 4096 Aug  7 16:01 device
    lrwxrwxrwx 1 root root    0 Aug  7 16:01 driver -> ../../../../../../../../../bus/virtio/drivers/virtio_rpmsg_bus
    -r--r--r-- 1 root root 4096 Aug  7 16:01 features
    -r--r--r-- 1 root root 4096 Aug  7 16:01 modalias
    drwxr-xr-x 2 root root    0 Aug  7 16:01 power
    -r--r--r-- 1 root root 4096 Aug  7 16:01 status
    lrwxrwxrwx 1 root root    0 Aug  7 13:25 subsystem -> ../../../../../../../../../bus/virtio
    -rw-r--r-- 1 root root 4096 Aug  7 13:25 uevent
    -r--r--r-- 1 root root 4096 Aug  7 16:01 vendor
    drwxr-xr-x 4 root root    0 Aug  7 13:25 virtio0.rpmsg_chrdev.-1.14
    drwxr-xr-x 4 root root    0 Aug  7 13:25 virtio0.rpmsg_chrdev.-1.15
    drwxr-xr-x 4 root root    0 Aug  7 13:25 virtio0.rpmsg_chrdev.-1.16
    drwxr-xr-x 3 root root    0 Aug  7 13:25 virtio0.ti.ipc4.ping-pong.-1.13

    从现在开始、我想说的是将该工作示例移植到我的项目中。

    我将记录发现的差异、并让您在此了解结果(如上所述、我已经rpmsg_chrdev为所有端点尝试了相同的名称、但不起作用。 也许它与不同/单独的 FreeRTOS 任务有关。)。

    非常感谢您到目前为止的帮助! 当我 成功时、我会将这些线程标记为已解决。

    祝大家度过美好的一周、此致!

    丹尼尔

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

    Daniel、您好!

    感谢您的更新! 很高兴听到事情正朝着正确的方向发展。 我将在"需要执行不同的任务"问题上与 MCU+开发人员进行仔细检查。

    此致、

    尼克

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

    您好、Nick。

    我第一次射门就很幸运了!

    通过比较您的示例和我的项目、我看到了以下差异:

    在示例中, 首先创建了所有三个端点RPMessage_CreateParams_init( ... ), RPMessage_construct( ... )[]。

    之后、通过调用每个端点逐个向 Linux 发布所有端点  RPMessage_announce( ... ).

    在我的项目中,我RPMessage_CreateParams_init( ... ), RPMessage_construct( ... ) and RPMessage_announce( ... )立即相互调用所有三个函数,然后再次为下一个端点执行所有三个函数。

    在以前已经宣布了一个端点时、似乎不可能创建(和宣布)一个端点。

    可能有一个原因吗?

    因此、从我的角度来看、它似乎与"每个端点所需的不同任务" 猜测毫无关系。

    此致、

    丹尼尔

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

    Daniel、您好!

    MCU+开发人员表示、每个端点都需要单独的任务。 通过我们的对话:

    "

    我们需要为每个本地端点单独的 RPMessage_Object。 每个 对象将具有不同的信号量。  接收必须等待从 ISR 发布的信号量。  因此、我们需要在每个信标上等待一个单独的任务。

    "

    这是一个意想不到的发现! 我本以为操作顺序无关紧要。 我正在与开发人员进行核实、以便了解这是否符合预期。

    此致、

    尼克

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

    您好、Nick、

    感谢您提供有关不同任务的信息。 即使我没有不同的任务、每个本地端点也有两个单独的 RPMessage_Object。

    我将 在这里为您提供进一步的反馈。

    此致、

    丹尼尔

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

    嘿、Daniel、我已经根据我们的讨论创建了一个常见问题解答。 如果我有任何问题或您有任何需要添加的内容、请告诉我:

    https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1245326/faq-rpmsg-how-to-add-multiple-endpoints-to-a-remote-core-running-rtos

    感谢您的提问!

    此致、

    尼克

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

    您好、Nick。

    常见问题解答看起来没有问题! 这将有助于其他人做同样的事。
    我会随时向您提供有关"所需的不同 RTOS 任务?"的最新信息 问题、就我能够正确测试它而言。

    祝你度过一个愉快的周末!

    丹尼尔