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.

[参考译文] SK-AM62A-LP:关于 A53和 r5f 之间的 IPC、如何知道在 REMOTE_Endpt=21时可访问 DM r5f 和 C7X、在 REMOTE_Endpt=14时可访问 MCU r5f

Guru**** 2394295 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1491913/sk-am62a-lp-about-ipc-between-a53-and-r5f-how-do-i-know-that-dm-r5f-and-c7x-can-be-accessed-when-remote_endpt-21-and-mcu-r5f-can-be-accessed-when-remote_endpt-14

器件型号:SK-AM62A-LP

工具与软件:

您好

我遇到了一个问题、尝试了解 A53和 MCU r5f 之间的 IPC 函数、并使用"rpmsg_char_simple"示例代码、 使用此应用时、需要指定 proc id 和 remote_Endpt。  有一个问题: remote_endpt=14或21如何对应 C7X、dm r5f 和 MCU r5f。 函数"_rpmsg_char_find_ctrldev () "查找指定的路径"/sys/bus/virtio/devices/virtiox/virtio2.rpmsg_chrdev.-1.21 "、这似乎确认与 DM 和 C7X 进行 IPC 通信的 Remote_Endpt 必须为21。

在/dev/路径 中、有多个/dev/rpmsgx char 设备、 是否有一种与 Remoteproc 关联的更为简单的方式/dev/rpmsgx 来访问字符设备以进行直接 IPC 通信?

由于相关信息或文档相对有限、请详细解释、谢谢!

祝你一切顺利

守护程序

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

    大家好、Daemon、AM62Ax Academy 具备关于 IPC 的非常好的信息。 我建议您查看以下链接、这些链接可引导您访问其他链接和配套资料

    IPC 基础知识;  

    如何运行开箱即用的 IPC 示例:IPC 示例 (https://dev.ti.com/tirex/explore/node?node=A__AYEyuCg.JDdHqpTk3sF27g__AM62A-ACADEMY__WeZ9SsL__LATEST)

    如何引导远程内核: 引导远程内核 (https://dev.ti.com/tirex/explore/node?node=A__AX2DLf3J3o-JHYMSq7Eg0w__AM62A-ACADEMY__WeZ9SsL__LATEST)

    具体来说、为了回答您的问题、我们在此处定义了远程处理器 ID: rproc_id.h«include - rpmsg/ti-rpmsg-char - Unnamed repository;编辑此文件"destination "以命名 repository。

    谢谢!

    Paula.

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

    你好、 Paula

    感谢您的答复!

    我知道上面的内容、意思是当我尝试创建一个新的线程来与 mcu-r5f 或 dm-r5f 或 c7x 通信时、我如何为每个内核新设远程端点的值、这意味着尽管 rproc_id.h 中定义了 rproc_id、但在与 IPC 的其他内核通信时必须指定远程端点、因此在定义或创建远程端点的位置是固定匹配的? i 表示"rproc=0、remote=14"代表 r5f、" rproc=15、remote=21"代表 dm、" rproc=8、remote=21"代表 c7x、" rproc =14"代表 R5F。 对吗?  

    请帮助解释详情

    非常感谢!

    祝你一切顺利

    守护程序

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

    您好!

    为了说明这一点、远程处理器 ID (每个非 Linux 内核都有固定的远程处理器 ID、如所提供的链接 Paula 中所示)和单独的 rpmsg 端点(由软件分配)之间存在差异。

    即使您有多个 Linux 任务与同一非 Linux 内核上的多个 MCU+任务进行通信、具有唯一的端点也能让内核准确地知道他们正在与另一个内核上进行通信的任务。

    在我们的默认 RPMsg Echo 示例中、Linux 应用程序会指示 Linux OS 自动为其分配一个端点号(因此该编号在运行时生成、将会是1024或更高)、并且 MCU+内核会创建2个端点、其中一个为13 (用于 Linux 内核测试)、另一个为14 (用于 Linux 用户空间测试): https://github.com/TexasInstruments/mcupsdk-core-k3/blob/k3_main/examples/drivers/ipc/ipc_rpmsg_echo_linux/ipc_rpmsg_echo.c 

    有关 Linux 端发生的情况(以及如何根据需要为 Linux 设置固定端点值)的更多信息、请参阅
    https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1369380/sk-am62a-lp-ipc-rp-message-related-queries-communication-between-a53-and-mcu-r5-core/5229585#5229585

    此致、

    Nick

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

    您好、Nick

    感谢您的答复!

     如何将多个 RPMSG 端点添加到 MCU+项目中?那么关于  Linux A53使用的远程端点变量,它已经在 MCU 端预先定义,就像下面一样,是不是对?

    #define IPC_RPMESSAGE_ENDPT_ping           (13U)

    #define IPC_RPMESSAGE_ENDPT_CHRDEV_ping  (14U)

    #define IPC_RPMESSAGE_ENDPT_CHRDEV_PING2 (15u)

    ...

    另一个问题是"mcu_plus_sdk_am62ax_10_01_00_33\examples\drivers\ipc\ipc_rpmsg_echo_linux\am62ax-sk\r5fss0-0_freertos"和"C:\ti\mcu_plus_sdk_am62ax_10_01_00_33\examples\drivers\ipc\r2\ipc_rpssmsg_freertos\rtos\ipc_75msg_freeo-modes"。 Linux A53使用"rpmsg_char_simple"应用程序与 dm-r5f 和 c7x 进行通信时、需要输入"rpmsg_char_simple -r15 -p21 -n10"和"rpmsg_char_simple -r8 -p21 -n10"、 我搜索两个项目、但未找到值为"8"和"21"的远程端点定义、它们在哪里?

    祝你一切顺利

    守护程序

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

    您好、Daemon:

    是的、您对在 MCU+示例  IPC_rpmsg_echo_linux 中设置的静态 RPMessage 端点是正确的。

    如何解释 Linux 输出  

    首先、让我们检查哪些 Virtio 实例分配给了哪些远程内核:

    root@am62axx-evm:/opt/edgeai-gst-apps# uname -a
    Linux am62axx-evm 6.6.58-ti-01497-ga7758da17c28-dirty #1 SMP PREEMPT Wed Nov 27 13:23:15 UTC 2024 aarch64 GNU/Linux
    
    root@am62axx-evm:/opt/edgeai-gst-apps# dmesg | grep virtio
    [    7.122779] rproc-virtio rproc-virtio.7.auto: assigned reserved memory node c7x-dma-memory@99800000
    [    7.171508] virtio_rpmsg_bus virtio0: rpmsg host is online
    [    7.172074] virtio_rpmsg_bus virtio0: creating channel rpmsg_chrdev addr 0xd
    [    7.178284] rproc-virtio rproc-virtio.7.auto: registered virtio0 (type 7)
    [    7.255281] rproc-virtio rproc-virtio.8.auto: assigned reserved memory node r5f-dma-memory@9b800000
    [    7.265176] virtio_rpmsg_bus virtio1: rpmsg host is online
    [    7.266330] virtio_rpmsg_bus virtio1: creating channel ti.ipc4.ping-pong addr 0xd
    [    7.278335] rproc-virtio rproc-virtio.8.auto: registered virtio1 (type 7)
    [    7.278501] virtio_rpmsg_bus virtio1: creating channel rpmsg_chrdev addr 0xe
    [    7.479548] rproc-virtio rproc-virtio.9.auto: assigned reserved memory node r5f-dma-memory@9c800000
    [    7.489667] virtio_rpmsg_bus virtio2: rpmsg host is online
    [    7.495442] virtio_rpmsg_bus virtio2: creating channel rpmsg_chrdev addr 0xd
    [    7.502796] virtio_rpmsg_bus virtio2: creating channel rpmsg_chrdev addr 0x15
    [    7.509855] rproc-virtio rproc-virtio.9.auto: registered virtio2 (type 7)
    [    7.510092] virtio_rpmsg_bus virtio0: creating channel rpmsg_chrdev addr 0x15
    [    7.524102] virtio_rpmsg_bus virtio0: creating channel ti.ipc4.ping-pong addr 0xe
    [    7.539198] virtio_rpmsg_bus virtio0: msg received with no recipient
    [    7.556580] virtio_rpmsg_bus virtio2: creating channel ti.ipc4.ping-pong addr 0xe
    [    7.572311] virtio_rpmsg_bus virtio2: msg received with no recipient
    

    所以在这个引导中、virtio2 --> rproc-virtio.9.auto --> r5f-dma-memory@9c800000

    如果我们检查 devicetree 文件
    /board-support/ti-linux-kernel-6.6.58 +git-ti/arch/arm64/boot/dts/ti$ vi k3-am62a7-sk.dts

    我们看到 r5f-dma-memory@9c800000 是 DM R5F/WAKEUP 域 R5F 的内存区域。
    有关存储器区域的更多信息、请参阅 AM62Ax Academy > Multicore module > How to allocation memory
    https://dev.ti.com/tirex/explore/node?node=A__AZVZJv4-HUUgYw7e1iCjsg__AM62A-ACADEMY__WeZ9SsL__LATEST 

    好的、因此 virtio2与 DM R5F 相关联。 我们可以看到、无论加载的固件是什么、都在创建本地端点0xd、0xe、0x15。 这有道理吗?

    确实如此。 请记住、默认文件系统中 AM62Ax DM R5F 上运行的固件不是 IPC Echo 演示。 它是运行 VPAC/ISP 代码的另一个固件(例如、如果您要使用摄像头)。 我们无法访问此项目的源代码、但看起来他们使用了 IPC Echo 示例作为模板(因此我们看到14和15处的端点)、然后在21处添加另一个端点。

    还有其他有用的信息吗?

    AM62Ax Academy 中的其他页面提供了有关引导内核和运行 IPC 开箱即用演示的有用信息:

    AM62Ax Academy > Linux > Booting remote cores
    https://dev.ti.com/tirex/explore/node?node=A__AX2DLf3J3o-JHYMSq7Eg0w__AM62A-ACADEMY__WeZ9SsL__LATEST

    AM62Ax Academy > Linux > IPC 示例
    https://dev.ti.com/tirex/explore/node?node=A__AYEyuCg.JDdHqpTk3sF27g__AM62A-ACADEMY__WeZ9SsL__LATEST

    此致、

    Nick

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

    IPC 示例页面对此进行了更详细的讨论、但作了澄清:

    默认情况下、MCU R5F 内核是在 AM62Ax 默认文件系统上运行 IPC Echo 示例的唯一内核。

    如上所述、DM R5F 正在运行另一个 VPAC/ISP 项目。

    C7正在运行 EdgeAI 固件。

    您可以在此处找到有关可以与 C7内核交互运行的演示的一些附加信息:
    https://dev.ti.com/tirex/explore/node?node=A__ADQsLuupElXo7JidqvGaRA__AM62A-ACADEMY__WeZ9SsL__LATEST

    此致、

    Nick