工具/软件:
您好:
我跟进了关于如何使用全局 CMA 保留分配来在 AM62x 和 M4 内核之间共享缓冲区的问题。 只需检查此问题是否已修复以及更新的代码是否可用。
这是上一个主题:
PROCESSOR-SDK-AM62X:PROCESSOR-SDK-AM62X — 处理器论坛-处理器 — TI E2E 支持论坛
谢谢你。
-艾曼
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.
工具/软件:
您好:
我跟进了关于如何使用全局 CMA 保留分配来在 AM62x 和 M4 内核之间共享缓冲区的问题。 只需检查此问题是否已修复以及更新的代码是否可用。
这是上一个主题:
PROCESSOR-SDK-AM62X:PROCESSOR-SDK-AM62X — 处理器论坛-处理器 — TI E2E 支持论坛
谢谢你。
-艾曼
您好、Ayman、
感谢您发送编修。我们会重新检视您的建议。
开发人员通过向库中添加新 API 来动态分配/dev/remoteproc ID 来整理修复。 尝试修补程序、让我知道它们是否可以修复您自己的问题、然后我们继续将修补程序合并到 ti-rpmsg-char 中:
此致、
Nick
如果我使用 CMA、是否仍必须使用“-e"选项“选项来指定堆名? 函数 dmaheap_open() 试图打开/dev/dma_heap/reserved、而我在/dev/dma_heap.下没有该堆文件 我运行的是内核 6.12.35-ti、我拥有的是:
# ls -l /dev/dma_heap
很糟糕 1 根根 253、5 月 1 日 13:48 Linux、CMA
很糟糕 1 根根 253、0 5 月 29 日 13:48 系统
因此、我必须使用“-e linux、cma“作为堆名。 是这样吗? 我的设备树文件在保留内存节点下具有此节点:
/*全局 CMA 区域*/
Linux、CMA{
compatible =“shared-dma-pool";“;
可重复使用;
Size =<0x00 0x8000000>;
linux、cma-default;
};
因此、堆名称为 linux、cma
-艾曼
不幸的是、它仍然对我不起作用。 使用 Linux、CMA 堆会导致 M4 侧在开始验证缓冲区时锁定、就像地址错误一样。 这些是使用 CMA 堆运行测试时来自 Linux/M4 的日志
CMA 堆、Linux
===============
#/tmp/rpmsg-zcp -r 9 -e linux, cma
已创建 Endpt 设备 rpmsg-char-9-390、fd = 4 端口= 1025
使用 rproc id 9 上的 rpmsg 设备交换 1 条消息...
内核 rproc id 为 1
dma-buf 地址:0xf8500000
缓冲区@0xffa4420000(大小 1048576)、其中填充了模式 0xaaaa5555
发送缓冲区数据#0
地址:0xf8500000
尺寸:1048576
模式:0xaaaa5555
接收缓冲区数据#0:
CMA 堆、M4 侧
=================
IPC 消息:缓冲区地址 0xf8500000、大小 1048576、模式 0xaaaa5555
接下来、按照您的文档、我在 DTS 中使用此配置创建了一个新的保留内存节点:
apps-shared-memory{
compatible =“dma-heap-carveout";“;
REG =<0x00 0xa6000000 0x00 0x2000000>;
无映射;
};
现在,我重新运行测试,但这次使用的应用共享内存堆,这一次测试通过。
apps-shared-memory heap、linux
=============================
#/tmp/rpmsg-zcp -r 9 -e carveout_apps-shared-memory
已创建 Endpt 设备 rpmsg-char-9-387、fd = 4 端口= 1025
使用 rproc id 9 上的 rpmsg 设备交换 1 条消息...
内核 rproc id 为 1
dma-buf 地址:0xa6000000
缓冲区@0xffbbaa0000(大小 1048576)、其中填充了模式 0xaaaa5555
发送缓冲区数据#0
地址:0xa6000000
尺寸:1048576
模式:0xaaaa5555
接收缓冲区数据#0:
地址:0xa6000000
尺寸:1048576
模式:0x5555aaaa
缓冲区@0xffbbaa0000(大小 1048576)通过 0x5555aaaa 模式成功验证
在 rpmsg-char-9-387 上成功完成 1 次缓冲区更新
测试状态:通过
apps-shared-memory heap、M4
==========================
IPC 消息:缓冲区地址 0xa60000、大小 1048576、模式 0xaaaa5555
通过模式 0xaaaa5555 成功验证了缓冲区@0xa60000(大小 1048576)
缓冲器@0xa60000(大小 1048576)、填充模式 0x5555aaaa
您好:
文档似乎表明 CMA 保留的堆将是默认堆(即无需使用-e 传递名称)。
https://git.ti.com/cgit/rpmsg/rpmsg_char_zerocopy/tree/linux/README.md
因此、如果这种方法能按预期运行、 我希望这样的方法能够正常运行:
#/tmp/rpmsg-zcp -r 9 -s 128(或以 KB 为单位的其他大小)
如果这不起作用、请告诉我、我将与开发人员聊天。
此致、
Nick
不管用。 代码与内核配置之间明显断开。 示例代码尝试打开不存在的堆器件/dev/dma_heap/reserved。 根据我的设备树、存在的是“CMA"/dev/dma_heap/linux“/dev/dma_heap/linux、我必须通过“-e"选项“选项来传递它。 然而,正如我在上一篇文章中指出的,传递 heap_name 现在不是我的问题。 问题在于使用 heap_name “/dev/dma_heap/linux、cma“会导致 M4 在开始验证缓冲区时锁定。 如果我在 DTS 中使用了我在上一个帖子中提到的自己分配的缓冲区、零复制示例就可以正常工作。 因此、CMA 实现似乎仍有一些问题。
#/tmp/rpmsg-zcp -r 9 -s 128
已创建 Endpt 设备 rpmsg-char-9-1182、FD = 4 端口= 1025
使用 rproc id 9 上的 rpmsg 设备交换 1 条消息...
无法打开/dev/dma_heap/reserved:–2
测试状态:失败