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.

[参考译文] Linux/AM5706:IPC 问题

Guru**** 2935310 points

Other Parts Discussed in Thread: AM5706

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/671432/linux-am5706-ipc-questions

器件型号:AM5706

工具/软件:Linux

您好:

   我在 A15中有一个 AM5706 EVM、在 DSP/M4中有一个支持 Linux 的 TI-RTOS。 对于 IPC 通信:

硬件资源包括:

-自旋锁、邮箱、中断和 RAM 存储器。

 一些 Linux 服务和功能:

- GateMP、MessageQ、RPMsg (remoteproc、rpmsg)...

我正在尝试了解 Linux IPC 服务是如何  基于 硬件资源在低级别实现的、

我已经阅读了一些文档、E2E 问题等。 对我来说不是很清楚,所以这里有一些

我的解释中、我 要确认以下几点:

GateMP:我想使用"GateMP_RemoteProtect 系统"。  我能不能认为是这样

它 利用 硬件自旋锁?

-它在低级上具有"spin_lock_irqsave()函数?

-我可以从用户空间中使用它吗? 我需要禁用无法在用户空间完成的中断。

- 用户空间中有任何功能可以绕过 硬件自旋锁? 或者我需要在内核空间工作吗?

MessageQ:我能不能假设这样

-它有"remoteproc"和 "rpmsg"作为传输消息和 vring 缓冲区的机制? 还是基于硬件邮箱?

-它会触发 到接收内核的硬件中断?

那么、它会在用户空间触发软件中断吗?

-它只能在用户空间使用?

RPMsg: 我能不能假定

它与 MessageQ 具有类似的实现方式?

- 它有"remoteproc"和 "rpmsg"作为传输消息和 vring 缓冲区的机制?

-它会触发 到接收内核的硬件中断?

它只能在内核空间工作?

´s 在哪里可以找到一些用户需要的文档?

"spin_lock_irqsave(): 我能不能假定

它 利用 硬件自旋锁?

-我只能在内核空间使用它吗?

硬件邮箱:  

-什么 Linux 用户服务 利用 了它?

-我只能在内核空间使用它吗?

从 一个内核到另一个内核触发一个硬件中断:  

-Linux 中是否有任何机制来实现它?

-它是否仅在内核空间工作?

- 除了 TI-RTOS 中的 MAIBOX 之外、还有其他机制可以实现它吗?

很抱歉、问题太长了。

此致

新罗

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

    AM57x 支持硬件自旋锁、是的、Linux 和 RTOS 都使用它。 在使用自旋锁的共享存储器保护方面、对于 ARM/Linux 和 DSP/RTOS 通信、它是通过 Virtio 实现的、它使用不同的读取和写入区域。 这不会导致任何争用问题。

    GateMP 使用其下方的自旋锁。 因此、如果您需要使用自旋锁、GateMP API 是否足够了?

    Remoteproc 是将映像下载到 DSP 的机制、不应与 rpmsg 混淆。 MessageQ 在 Linux 和 RTOS 应用程序之间发送消息。 MessageQ 使用位于 Virtio 顶部的 RPMsg 进行数据传输。 一旦消息被复制到缓冲器、邮箱被用来触发一个中断来通知对方。

    IPC 通过应使用的 API 为底层硬件提供抽象层。 某些模块具有用户空间 API、可在 IPC_x_xx_xx_xx/packages/ti/ipc/*.h 中找到 如果未使用 TI IPC API、但在用户空间中继续执行自定义访问、则可以通过 MM 器件映射来完成、但具有用户空间 API 的目的是什么、IPC API 中缺少哪些不能在项目中使用的 API?

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

    您好 Rex:

        我的理解是、您无法在 用户空间中禁用中断。 我想 GateMP 在获取自旋锁之前禁用内核空间中的某个位置的中断、对吧?

    我想、在用户空间中使用 GateMP 保护共享资源的过程意味着此函数调用切换到内核空间、禁用中断、并在一段时间内尝试获取自旋锁。

    然后、它将返回用户空间、以便应用程序访问受保护的共享资源。 最后、它必须释放与获得自旋锁相同的路径上的自旋锁。

    我的意思是、访问共享资源可能需要很长时间、自旋锁将被锁定。 这是要避免的。

    因此、我不清楚从用户空间使用 GateMP。 更重要的是、如果您对共享存储器的访问次数过多、而其他内核每1毫秒更改一次、则此机制不会非常高效。

    此致

    新罗

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

    我能否假设 MessageQ 和 RPMsg API 之间的唯一区别是 MessageQ 用于用户空间、而 RPMsg 用于内核空间?
    根据您的回答、我的理解是、硬件邮箱和硬件中断都使用底层。
    在哪里可以找到 RPMsg API 文档?

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

    访问硬件(包括自旋锁)的正确方法是通过内核。 它确实涉及开销、但提供了必要的保护。 在用户空间中公开访问权限、您就会失去内核中的所有保护功能。

    RPMsg 是内核设备驱动程序。 文档位于 Documentation/rpmsg.txt 中、是 drivers/rpmsg 中的源代码。

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

    您好 Rex:

        总之、您不能使用硬件自旋锁保护来保护用户空间。

    或者、如果您使用它、用户应用程序将使用内核驱动程序来保护-取消保护

    共享资源。 后者可能意味着将自旋锁和中断保持在锁定状态、然后

    长时间禁用。

    此致

    新罗

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

    您好、Billa、

    不建议绕过内核。 您可能还需要探索其他方法。 uio 可以是一个选项、也可以是用户空间中不在我们支持范围内的其他方式。

    雷克斯

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

    我已经读过关于 UIO 的一些评论、并将尝试处理它、并检查它是否适合我。

    非常感谢!!