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.

[参考译文] J721S2XSOMXEVM:rpmsg_chrdev 驱动程序在从 6.6 迁移到 6.12 内核版本后无法正常工作(/dev 下缺少 rpmsg 设备)

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1638875/j721s2xsomxevm-rpmsg_chrdev-driver-not-working-after-moving-from-6-6-to-6-12-kernel-version-missing-rpmsg-devices-under-dev

器件型号: J721S2XSOMXEVM

您好:

我正在运行基于 J721S2 的定制电路板。 C7 DSP 用于某些信号处理、并且已经设置为使用 rpmsg_char 与 Linux 内核通信。

这是 ti-linux-staging 6.6.58 的工作设置日志

ls /dev/rpmsg*
/dev/rpmsg0         /dev/rpmsg1         /dev/rpmsg_ctrl0    /dev/rpmsg_dsp_msg
[    1.096355] systemd[1]: Expecting device /dev/rpmsg_dsp_msg...
[    4.548066] k3_r5_rproc bus@100000:bus@28380000:r5fss@41000000: MCU cluster requires both R5F cores to be enabled but num_cores is set to = 0
[    4.549775] k3_r5_rproc bus@100000:r5fss@5c00000: MCU cluster requires both R5F cores to be enabled but num_cores is set to = 0
[    4.553250] k3_r5_rproc bus@100000:r5fss@5e00000: MCU cluster requires both R5F cores to be enabled but num_cores is set to = 0
[    4.605403] k3-dsp-rproc 64800000.dsp: assigned reserved memory node c71-dma-memory@a6000000
[    4.607359] k3-dsp-rproc 64800000.dsp: configured DSP for IPC-only mode
[    4.607668] remoteproc remoteproc0: 64800000.dsp is available
[    4.607763] remoteproc remoteproc0: attaching to 64800000.dsp
[    4.608078] remoteproc remoteproc0: unsupported resource 65538
[    4.608112] rproc-virtio rproc-virtio.0.auto: assigned reserved memory node c71-dma-memory@a6000000
[    4.610186] virtio_rpmsg_bus virtio0: rpmsg host is online
[    4.610272] rproc-virtio rproc-virtio.0.auto: registered virtio0 (type 7)
[    4.610279] remoteproc remoteproc0: remote processor 64800000.dsp is now attached
[    4.610560] virtio_rpmsg_bus virtio0: creating channel rpmsg_chrdev addr 0x21
[    4.611527] k3-dsp-rproc 65800000.dsp: assigned reserved memory node c71-dma-memory@a7000000
[    4.613220] k3-dsp-rproc 65800000.dsp: configured DSP for IPC-only mode
[    4.617164] remoteproc remoteproc1: 65800000.dsp is available
[    4.617223] remoteproc remoteproc1: attaching to 65800000.dsp
[    4.617239] remoteproc remoteproc1: remote processor 65800000.dsp is now attached

 

更新到 6.12 内核版本后(我尝试了各种 SRCRV、但比方说 6.12.57)、只有/dev/rpmsg_ctrl0 器件可用、其他器件缺失。
DSP 固件是相同的、我还使用 ti-rtos-firmware 包中的 ipc_echo_test_c7x_1_release_strip.xe71 进行了测试。
使用 6.6 rpmsg 设备创建、而 6.12 设备不存在。

内核版本之间是否有任何 remoteproc/rpmsg 框架更新、以及通过 rpmsg 与 DSP 内核通信时需要使用 6.12 进行哪些额外更新?

谢谢您、
Darko

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

    尊敬的 Darko:

    更新到 6.12 内核版本后(我尝试了各种 SRCRV、但假设是 6.12.57)、只有/dev/rpmsg_ctrl0 器件可用、其他器件缺失。

    6.12.57 将是 11.2 SDK、即 11.x 版本流中的 LTS SDK 版本。

    要在 TDA4 SoC 上实现复杂的多核用例、IPC 是基础、如果这不起作用、我们的 SDK 将完全损坏。 我们的 SDK 已经过全面测试、我相信这是您定制电路板/构建的一些集成问题、而不是 Linux 驱动程序或 SDK 的问题。

    这是 ti-linux-staging 6.6.58
    的工作设置日志

    您的日志有限、我可以看到 C71_0 已成功引导、而 C71_1 尚未引导。 日志确实可以识别到固件之前已引导(仅 IPC 模式检测)、但我没有看到任何与 RSC_TABLE 段解析相关的布线。

    Linux 要求在适当的位置提供资源表并将其链接到您的固件映像中(根据您的迹线,以及 SDK 中 IPC 固件使用的地址、预期为 0xa71000000)。

    请提供以下命令的输出:

    $ head /sys/kernel/debug/remoteproc/remoteproc*/name

    head /sys/kernel/debug/remoteproc/remoteproc*/resource_table

    您是否还能尝试不在 U-Boot 或 SBL 处启动 DSP、并依赖 Linux 内核启动固件? 这样可能会再提供一些布线。

    DSP 固件是相同的、我还使用 ti-rtos-firmware 包中的 ipc_echo_test_c7x_1_release_strip.xe71 进行了测试。

    您是重新使用使用使用旧 SDK 构建的固件、还是使用相应的 11.2 RTOS SDK 重新构建固件?

    内核版本之间是否有任何 remoteproc/rpmsg 框架更新、以及 6.12 通过 rpmsg 与 DSP 内核通信时需要执行的额外更新?

    Remoteproc/rpmsg 都是上游代码、基本架构仍然相同。

    此致

    Suman

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

    感谢您发送编修。

    下面是我尝试尽可能轻松地复制的最小测试设置

    meta-ti 的结账地址为 11.02.13 https://git.yoctoproject.org/meta-ti/tag/?h=11.02.13
    我使用 ti-ipc-RTOS 配方中的 C7 二进制文件来确保我的 SDK 构建不会引入问题、再次使用标签 11.02.13 https://git.ti.com/cgit/processor-firmware/ti-linux-firmware/tag/?h=11.02.13

    然后、通过 在 local.conf 中设置 TI_preferred_bp 变量、我构建了一个类似于 core-image-minimal 的映像、一个具有 6.6 内核、另一个具有 6.12 内核

    以下是您询问的资源表命令的日志

    e2e.ti.com/.../log_5F00_6.6.txte2e.ti.com/.../log_5F00_6.12.txt

    6.12 内核没有创建通道片段

    [    5.739340] virtio_rpmsg_bus virtio0: creating channel ti.ipc4.ping-pong addr 0xd
    [    5.765537] virtio_rpmsg_bus virtio0: creating channel rpmsg_chrdev addr 0xe
    
    
    [    5.896204] virtio_rpmsg_bus virtio1: creating channel ti.ipc4.ping-pong addr 0xd
    [    5.904535] virtio_rpmsg_bus virtio1: creating channel rpmsg_chrdev addr 0xe
    
    

    而且 6.12 也没有创建/dev/rpmsg0 和/dev/rpmsg1 器件。

    似乎有什么改变与 6.12 内核的方式 rpmsg 处理方式,我不太明白到底是什么.
    我现在尝试通过 rpmsg_char_simplet 测试重新测试。

    谢谢您、
    Darko

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

    这是 rpmsg_char_simplet 测试

    6.6 内核

    rpmsg_char_simple -r 8 -n 1 -p 14
    Created endpt device rpmsg-char-8-760, fd = 3 port = 1025
    Exchanging 1 messages with rpmsg device rpmsg-char-8-760 on rproc id 8 ...
    
    Sending message #0: hello there 0!
    hello there 0!
    
    Communicated 1 messages successfully on rpmsg-char-8-760
    
    TEST STATUS: PASSED

    6.12  

    rpmsg_char_simple -r 8 -n 1 -p 14
    _rpmsg_char_find_ctrldev: could not find the matching rpmsg_ctrl device for virtio0.rpmsg_chrdev.-1.14
    Can't create an endpoint device: Invalid argument
    TEST STATUS: FAILED
    

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

    尊敬的 Darko:

    6.12 内核没有创建通道片段

    在 rpmsg_ns 驱动程序上没有跟踪提示而不创建设备。

    您能否提供以下命令的输出?

    $ lsmod

    $ ls -l /sys/bus/rpmsg/devices

    $ ls -l /sys/bus/rpmsg/drivers

    $ ls -l /sys/bus/virtio/devices

    $ ls -l /sys/bus/virtio/drivers

    并且 6.12 没有创建/dev/rpmsg0 和/dev/rpmsg1 器件。

    只有通过 与 rpmsg_ctrl 驱动程序交互的字符驱动程序创建本地 Endpt 设备时、才会创建这些设置。 rpmsg_ctrl 设备似乎是根据 6.12 日志创建的。

    我现在尝试使用 rpmsg_char_simple test 重新测试。

    您使用哪个版本的 ti-rpmsg-char 库? 您是否更新了文件系统以获取 6.6 到 6.12 之间的任何库更新?

    此致

    Suman

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid=“35368" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1638875/j721s2xsomxevm-rpmsg_chrdev-driver-not-working-after-moving-from-6-6-to-6-12-kernel-version-missing-rpmsg-devices-under-dev/6320040

    您使用哪个版本的 ti-rpmsg-char 库? 您是否更新了文件系统以获取 6.6 到 6.12 之间的任何库更新?

    此致

    [/报价]

    当我将 meta-ti 切换到标签 11.02.13 时、它被更新为 0.6.10 (SRCREV =“057b1a249261e26d00c501b59646957160ec815b")“)

    find / | grep libti_rpmsg
    /usr/lib/libti_rpmsg_char.so.0
    /usr/lib/libti_rpmsg_char.so.0.6.10


    日志已附加(请注意,在这些日志中,只有第一个 C71 内核正在运行)

    e2e.ti.com/.../log2_5F00_6.12.txte2e.ti.com/.../log2_5F00_6.6.txt

    lsmod 的第一个明显区别是 6.12 有单独的 ti_k3_common_driver 、ti_k3_dsp_remoteproc 使用该驱动程序。
    6.6 没有  ti_k3_common、应 直接在 ti_k3_dsp_remoteproc 中实现这些函数。

    我想我可以在某个地方找到一些 SK 或 EVM 板来测试预构建的映像。

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

    嗨、Suuman、谢谢您、这对我们非常有帮助。

    我将我的日志与您的日志进行了比较、比较了内存分割并在 6.6 和 6.12 之间进行了一些比较、最终我找到了根本原因。

    在 6.6 器件树中、main_timer0 到 main_timer5 在 k3-j721s2-main.dtsi 中的 status =“reserved"属性“属性
    https://github.com/TexasInstruments/ti-linux-kernel/blob/ti-linux-6.6.y/arch/arm64/boot/dts/ti/k3-j721s2-main.dtsi#L251

    在 6.12 中、计时器的 STATUS =“reserved"移至“移至 k3-j721s2-som-po.dtsi
    https://github.com/TexasInstruments/ti-linux-kernel/blob/c52c5589aab8c376f975b1feb7b8746b7b6624bd/arch/arm64/boot/dts/ti/k3-j721s2-som-p0.dtsi#L668

    将它们添加到我的设备树和 dtsi 文件后、rpmsg devs 出现、rpmsg_char_simplet 测试通过!

    感谢您的帮助。 非常感谢!