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-AM62X:rpmsg_char_zerocopy 后续内容

Guru**** 2562120 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1544813/processor-sdk-am62x-rpmsg_char_zerocopy-follow-up

器件型号:PROCESSOR-SDK-AM62X


工具/软件:

您好:

我跟进了关于如何使用全局 CMA 保留分配来在 AM62x 和 M4 内核之间共享缓冲区的问题。 只需检查此问题是否已修复以及更新的代码是否可用。

这是上一个主题:

PROCESSOR-SDK-AM62X:PROCESSOR-SDK-AM62X — 处理器论坛-处理器 — TI E2E 支持论坛

谢谢你。

-艾曼

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

    您好、Ayman、

    我们的一位团队成员开始研究它。 此时他们尚未推送任何代码、让我与他们核对。 如果我没有回复、请在星期一上 ping 通该线程。

    此致、

    Nick

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

    实际上、我的团队成员在本周剩余时间内不在办公室。 如果星期三没有回复、请 ping 通该线程。

    此致、

    Nick

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

    您好:

    是否有任何更新?

    谢谢

    Ayman

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

    您好、Ayman、

    感谢您发送编修。我们会重新检视您的建议。

    开发人员通过向库中添加新 API 来动态分配/dev/remoteproc ID 来整理修复。 尝试修补程序、让我知道它们是否可以修复您自己的问题、然后我们继续将修补程序合并到 ti-rpmsg-char 中:

    e2e.ti.com/.../0001_2D00_src_2D00_add_2D00_api_2D00_to_2D00_fetch_2D00_kernel_2D00_allocated_2D00_remote_2D00_proc_2D00_id.patch

    e2e.ti.com/.../0001_2D00_linux_2D00_call_2D00_rpmsg_2D00_lib_2D00_to_2D00_get_2D00_remote_2D00_proc_2D00_id.patch

    此致、

    Nick

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

    您好、Ayman、

    您是否有机会在您的端测试修补程序?

    此致、

    Nick

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

    您好、Nick、

    我被带到另一个任务中、但一段时间没有处理过。 我正在切换回并测试您指出的补丁。 发布它。 谢谢。

    -艾曼

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

    好的、谢谢 Ayman

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

    如果我使用 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
    测试状态:失败

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

    您好、Ayman、

    我懂了。 让我与开发人员聊天、并在几天内回复您。

    此致、

    Nick