主题中讨论的其他器件: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.
是否可以使用套接字通信以外的其他方法?