您好!
我们的配置:
- IPU (SYS/BIOS)-由引导加载程序(MLO)在引导过程的早期阶段加载、然后由 Linux 内核(remoteproc)稍后连接
- 运行 Linux 的 MPU
我们需要将消息(固定大小的数据)从 IPU (FW)传递到 MPU (用户空间应用)、同时记住 IPU 首先运行、需要等待 Linux 启动。
目前、我们将 MessageQ 用于此目的、其中 IPU 用作写入器、用户空间应用用作读取器。 根据 MessageQ API、只有读取器可以创建和拥有队列、以便应用程序处于用户空间。
IPU 正在引导的早期阶段收集消息、此时应用尚未运行、并且由于队列尚未创建、因此它必须在固件存储器中内部缓冲这些消息、这是我们想要避免的。
1.除 MessageQ 之外、我们的配置(BIOS -> Linux)是否有任何其他机制允许将数据放入共享存储器、以便在另一个部分(Linux)准备就绪时可以读取这些消息?
我发现只有具有 RPMB 传输的 MessageQ 才能执行此类 IPC 通信。 MessageQ 使用的所有其他组件、如 ListMP 或 HeapBuf/Mem、仅用于运行 SYS/BIOS 的内核之间的通信。
我还找到了 RingIO 机制、但我想它不支持 DRA7X、需要额外的内核驱动程序:
software-dl.ti.com/.../_ring_i_o_8h.html
2.除了轮询 MessageQ_open 外,是否还有其他选项可用于检查远程侧是否仍然存在消息队列? 因此、IPU 需要检查 Linux 端是否仍然存在队列。
我们观察到以下情况:
- IPU 首次打开队列并正在输入一些消息。
- 用户空间应用程序可以接收消息、一切正常。
- 用户空间应用程序突然崩溃。
- IPU 仍然可以无任何错误地放置消息、即 MessageQ_Put 返回成功
- 应用程序将恢复再次创建队列、但先前发送的所有消息都将丢失
BR、
Szymon