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.

[参考译文] PROCESSOR-SDK-J721S2:我希望使用其他方法(pub/sub middle ware)来共享文件描述符、而不是套接字通信。

Guru**** 2483335 points
Other Parts Discussed in Thread: J721S2XSOMXEVM

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1442825/processor-sdk-j721s2-i-hope-to-use-other-method-pub-sub-middle-ware-for-file-descriptor-sharing-instead-socket-communication

器件型号:PROCESSOR-SDK-J721S2
主题中讨论的其他器件:J721S2XSOMXEVM

工具与软件:

您好、TI 出口产品部。

我使用 J721S2XSOMXEVM 和 RTOS+Linux SDK。

TI RTOS SDK  提供了"app_fd_exchange"演示、用于 在多进程中共享 vx_reference。

我回顾了这一点、并且我理解:

"app util libs"管理 vx_reference 的 DMA 缓冲器、dma 缓冲器转换的管理和导出。

这种方法的关键功能是 "由 util libs 管理的 FD 编号"、该 FD 编号可以在进程间共享。

然后、我使用套接字进行如下简单演示:

在生产者中、

1.创建 vx_reference / vx_image 对象

2.调用 tivxReferenceExportHandle (将引用转换为虚拟地址)

3.调用 tivxMemTranslateVirtAddr (将虚拟地址转换为"手动 FD"和物理地址)

->我可以得到 FD 编号/大小/物理地址

4.使用套接字发送消息

(APP_FD_EXCHANGE 演示中使用的套接字通信 aputils_net.c)

在消费类应用中、

1.从套接字获取消息。

2.从消息中获取 FD

3.调用 tivxMemTranslateFd (将 FD 转换为虚拟/物理地址)

->我可以得到 FD 编号/大小/物理地址 ,我和生产者的内容相同。

我希望使用其他消息 PUB/SUB 中间件而不是套接字通信。

我只需将插座部件替换为中间件源、然后发送 FD 编号和缓冲大小。

中间件可以接收相同的 FD 编号(+大小),但此 FD 无法转换为虚拟/物理地址。 (就像这样)

  9562.425287 s: MEM: ERROR: appMemDmaHeapGetPhys failed (dma buf = 24, dmabuf2phys = 24)!!!
  9562.425295 s: MEM: ERROR: memory alloc of size = 2764800 bytes, failed with status = -22 !!!
  9562.425305 s: DDR_SHARED_MEM: Alloc's: 0 alloc's of 0 bytes
  9562.425311 s: DDR_SHARED_MEM: Free's : 0 free's  of 0 bytes
  9562.425316 s: DDR_SHARED_MEM: Open's : 0 allocs  of 0 bytes
  9562.425321 s: MEM: ERROR: Failed to translate dmaBufFd [24]
  9562.425328 s: MEM: ERROR: Failed to translate dmaBufFd [24]
  9562.425334 s:  VX_ZONE_ERROR:[tivxMemTranslateFd:577] appMemTranslateDmaBufFd() failed.

我想看起来套接字通信也只是将 FD 移交给 FD.

除了"受管 FD(+size)"之外、是否还有其他需要发送的内容?

是否可以使用套接字通信以外的其他方法?

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

    您好!

    是的、也可以使用其他方法。 此处使用套接字通信作为演示来展示用例。

    除 FD 之外、您还应发送缓冲区描述符、其中包含有关引用大小和类型(图像、张量或任何其他数据对象)的信息

    在演示中、变量 appBuffDesc 内部包含 ipcMsg、其中 ipcMsg->refDesc 中包含此信息   

    您能确认您也发送了此邮件吗?

    此致、

    Nikhil

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

    您好、Nikhil

    感谢您的回答。

    在我等待回答时,我研究了文件描述符(FDS)与其他过程的通信。

    我发现每个流程都有自己的流程特定的 FDS 表、这就是为什么接收到的 FDS 数量无法在另一个流程中正确访问的原因。

    只有套接字通信可以发送/接收我找到的 FDS 本身。

    我想如果我使用 pub/submiddle ware、我不能发送/接收 FDS 本身、我应该使用 FDS 的其他信息。

    是否有其他解决方案替代发送/接收 FDS 本身? (如文件路径或其他文件)

    (原因、vx_reference 共享、非正常文件)

    似乎流程可以直接从 QNX 中的共享物理地址访问、但我使用的是 Linux。

    +编辑)

    如果 从 vx_reference 转换的 FDS 可以在没有套接字通信的情况下发送/接收、

    PLZ 您能用一些例子解释更多细节吗?

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

    您好!

    Vx_reference 信息用于了解正在使用的数据对象的参数。

    FD 通常用于获取此数据对象的存储器分配详细信息。  

    在 Linux 中、我发现需要 FD 来获取虚拟和物理地址信息。

    如前所述、在 QNX 中、可以传递 物理地址本身、但对于 Linux、我们同样需要 FD

    此致、

    Nikhil

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

    您好、Nikhil

    感谢您的回答。

    我很抱歉、但我有些困惑、我希望整理一下我的问题、再问一次。

    TI RTOS SDK 提供用于存储器管理的"app util 库"。

    此库提供了一个 API、可将 vx_reference 转换为 Linux FD。

    根据我的理解、Linux FD 本身的数量只能使用套接字通信进行传输。

    但是、我希望使用其他方法、而不是套接字通信。

    换句话说、我可能无法使用共享 FD 编号的方法。

    Nikhil 说
    是的、也可以使用其他方法。 此处使用套接字通信作为演示来展示用例。

    如果它是可行的,你能解释其他方法更多的细节?

    除了在 app util 库中使用转换的 FD 之外、是否有其他方法可以共享 vx_reference?

    如果转换后的 FD 共享是共享应用程序 util 库提供的 vx_reference 的唯一方法、
    FD 在 FD 编号以外的其他进程中是否可以访问任何其他信息?
    (我尝试在 compsumer 进程中使用生产者的 pid + fd 编号在 procfs 中打开 fd、但无法打开)

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

    您好!

    我目前还不确定是否有其他方法、因为 TI 只验证了这个生产者-使用套接字方法的消费流程。  

    如果其他的专家有任何其他的了解、我可以在内部咨询、但与此同时、这是 TI 提供的解决方案或建议

    由于 FD 是由 dma-buf 框架创建的、因此相同的跟踪(即 FD、phy 和 virt)由相同的框架完成、因此内存相关信息通过 FD 传递、并且有关数据对象的详细信息通过对象描述符传递(两者都可以在演示中的 IPC 结构中找到)。

    此致、

    Nikhil

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

    您好、Nikhil

    感谢你的帮助。

    如果您有其他方法、请告诉我。

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

    您好!

    我内部检查了、目前只有套接字通信方式已知并在 TI 进行了测试  
    由于这更多是一个开源问题、即这更多是一般知识内容、而不是特定于 TI、因此我建议在线查看这方面的内容。

    此致、

    Nikhil