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.

[参考译文] AM623:remoteproc remoteproc0:can##39;t stop rproc:-110

Guru**** 2460850 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1478974/am623-remoteproc-remoteproc0-can-t-stop-rproc--110

器件型号:AM623

工具与软件:

您好、TI 专家! 我有 AM6234的开发环境、其中包含我们自己的评估板。
软件 PROCESSOR-SDK-LINUX-RT 版本是 SDK-AM62X-10.01.10.04。

当我在 Linux 中停止 M4内核时、遇到以下错误:

root@AM62x:~# dmesg | grep remote
[    8.294555] k3-m4-rproc 5000000.m4fss: configured M4 for remoteproc mode
[    8.295271] remoteproc remoteproc0: 5000000.m4fss is available
[    8.321947] remoteproc remoteproc0: powering up 5000000.m4fss
[    8.321987] remoteproc remoteproc0: Booting fw image am62-mcu-m4f0_0-fw, size 54860
[    8.343845] remoteproc remoteproc0: remote processor 5000000.m4fss is now up
[    8.462118] remoteproc remoteproc1: 78000000.r5f is available
[    8.462209] remoteproc remoteproc1: attaching to 78000000.r5f
[    8.466116] remoteproc remoteproc1: remote processor 78000000.r5f is now attached
[   11.243622] remoteproc remoteproc2: 30074000.pru is available
[   11.244060] remoteproc remoteproc3: 30078000.pru is available


root@AM62x:~# ll /sys/class/remoteproc/
total 0
lrwxrwxrwx 1 root root 0 10月 21 23:53 remoteproc0 -> ../../devices/platform/bus@f0000/bus@f0000:bus@4000000/5000000.m4fss/remoteproc/remoteproc0
lrwxrwxrwx 1 root root 0 10月 21 23:53 remoteproc1 -> ../../devices/platform/bus@f0000/bus@f0000:bus@b00000/bus@f0000:bus@b00000:r5fss@78000000/78000000.r5f/remoteproc/remoteproc1
lrwxrwxrwx 1 root root 0 10月 21 23:53 remoteproc2 -> ../../devices/platform/bus@f0000/30040000.pruss/30074000.pru/remoteproc/remoteproc2
lrwxrwxrwx 1 root root 0 10月 21 23:53 remoteproc3 -> ../../devices/platform/bus@f0000/30040000.pruss/30078000.pru/remoteproc/remoteproc3
root@AM62x:~#
root@AM62x:~#
root@AM62x:~#
root@AM62x:~# cat /sys/class/remoteproc/remoteproc0/state
running
root@AM62x:~#
root@AM62x:~# echo stop > /sys/class/remoteproc/remoteproc0/state
[   48.672953] k3-m4-rproc 5000000.m4fss: k3_m4_rproc_stop: timedout waiting for rproc completion event
[   48.675567] remoteproc remoteproc0: can't stop rproc: -110
-bash: echo: write error: Connection timed out


我想问是什么原因导致了这个问题、如何解决这个问题?


此致、
Li

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

    您好、Li:

    您是在 M4F 内核上运行 IPC_Echo 示例固件还是其他固件?

    我们仅支持用于关闭 Linux 远程处理器的"正常关机"功能(即、如果内核能够回复确认关机请求、Linux remoteproc 驱动程序仅会关闭内核)。 有关更多信息、请参阅 AM62x Academy 多核模块中的"正常关断"页面:
    https://dev.ti.com/tirex/explore/node?node=A__AXsPVjrUN0EAU1ezb.8iuQ__AM62-ACADEMY__uiYMDcq__LATEST

    此致、

    Nick

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

    您好、Nick。

    您是在 M4F 内核上还是在其他方面运行 IPC_Echo 示例固件?

    我使用了 SDK 工厂的 IPC_Echo 固件进行测试、如下:

    测试结果表明 virtio0未创建 rpmsgchrdev 和 ti.ipc4.ping-pong:

    root@AM62x:~# ll /dev/rpmsg*
    crw------- 1 root root 234, 0 10月 22 03:52 /dev/rpmsg0
    crw------- 1 root root 511, 0 10月 22 03:52 /dev/rpmsg_ctrl0
    crw------- 1 root root 511, 1 10月 22 03:52 /dev/rpmsg_ctrl1
    
    root@AM62x:~# dmesg | grep rpmsg
    [   84.127988] virtio_rpmsg_bus virtio0: rpmsg host is online
    [   84.144053] virtio_rpmsg_bus virtio1: rpmsg host is online
    [   84.144365] virtio_rpmsg_bus virtio1: creating channel ti.ipc4.ping-pong addr 0xd
    [   84.144514] virtio_rpmsg_bus virtio1: creating channel rpmsg_chrdev addr 0xe
    
    
    root@AM62x:~# ll /sys/bus/rpmsg/devices
    total 0
    lrwxrwxrwx 1 root root 0 10月 22 03:56 virtio0.rpmsg_ctrl.0.0 -> ../../../devices/platform/bus@f0000/bus@f0000:bus@4000000/5000000.m4fss/remoteproc/remoteproc0/rproc-virtio.3.auto/virtio0/virtio0.rpmsg_ctrl.0.0
    lrwxrwxrwx 1 root root 0 10月 22 03:56 virtio0.rpmsg_ns.53.53 -> ../../../devices/platform/bus@f0000/bus@f0000:bus@4000000/5000000.m4fss/remoteproc/remoteproc0/rproc-virtio.3.auto/virtio0/virtio0.rpmsg_ns.53.53
    lrwxrwxrwx 1 root root 0 10月 22 03:56 virtio1.rpmsg_chrdev.-1.14 -> ../../../devices/platform/bus@f0000/bus@f0000:bus@b00000/bus@f0000:bus@b00000:r5fss@78000000/78000000.r5f/remoteproc/remoteproc1/rproc-virtio.4.auto/virtio1/virtio1.rpmsg_chrdev.-1.14
    lrwxrwxrwx 1 root root 0 10月 22 03:56 virtio1.rpmsg_ctrl.0.0 -> ../../../devices/platform/bus@f0000/bus@f0000:bus@b00000/bus@f0000:bus@b00000:r5fss@78000000/78000000.r5f/remoteproc/remoteproc1/rproc-virtio.4.auto/virtio1/virtio1.rpmsg_ctrl.0.0
    lrwxrwxrwx 1 root root 0 10月 22 03:56 virtio1.rpmsg_ns.53.53 -> ../../../devices/platform/bus@f0000/bus@f0000:bus@b00000/bus@f0000:bus@b00000:r5fss@78000000/78000000.r5f/remoteproc/remoteproc1/rproc-virtio.4.auto/virtio1/virtio1.rpmsg_ns.53.53
    lrwxrwxrwx 1 root root 0 10月 22 03:56 virtio1.ti.ipc4.ping-pong.-1.13 -> ../../../devices/platform/bus@f0000/bus@f0000:bus@b00000/bus@f0000:bus@b00000:r5fss@78000000/78000000.r5f/remoteproc/remoteproc1/rproc-virtio.4.auto/virtio1/virtio1.ti.ipc4.ping-pong.-1.13

    同时执行 rpmsc_char_stmple 会导致以下错误:

    完整的测试日志如下:

    e2e.ti.com/.../test_5F00_log_5F00_for_5F00_sdk_5F00_10_5F00_1.txt

    但在 SDK 8.6上、测试是正常的、完整的日志如下:

    e2e.ti.com/.../0333.test_5F00_log_5F00_for_5F00_sdk_5F00_08_5F00_06.txt

    此致、

    Li

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

    您好、Li:

    多个问题:

    1) 1)您是否在 SDK 10.1上使用与 SDK 8.6相同的 M4F 二进制文件? 或者您是否在 SDK 10.1上使用 SDK 10.1中的 M4F 二进制文件?

    我问的原因是我们在 Linux 内核5.10/SDK 8.6上不支持正常关机。 从 Linux 方面来看、这意味着 Linux 驱动程序无需先发送警告信号即可关闭远程内核。  从 M4F 端来看、这意味着 MCU+ SDK 代码没有任何方法来侦听关断信号。

    这意味着、如果您采用 SDK 8.6二进制文件并在 SDK 10.1上运行、它应该仍然可以正常运行、但当 Linux 内核6.6发送关断信号时、SDK 8.6 M4F 固件将不会听到该信号或对该信号做出响应、因此 Linux 会显示错误。 我不记得您会期望看到-16 (EBUSY)或-110 (ETIMEDOUT)。

    2) 2)您是否能够使用 SDK 10.1在 TI EVM 上复制此行为? 如果是、这意味着我可以在这方面进行测试并验证您的观察结果。

    此致、

    Nick

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

    您好、Nick。

    1)您在 SDK 10.1上使用的是与 SDK 8.6相同的 M4F 二进制文件吗? 或者您是否在 SDK 10.1上使用 SDK 10.1中的 M4F 二进制文件?[/QUOT]

    我们将在 SDK 10.1中使用默认的 M4F 二进制文件、即解压缩 tisdk-default-image-rt-am62xx-evm.rootfs.tar.xz、然后在其中使用 lib/ti-ipc/am62xx/ipc_echo_test_ccu_20ureleas_strip.xer5f 进行测试。

    [报价 userid="280115" url="~/support/processors-group/processors/f/processors-forum/1478974/am623-remoteproc-remoteproc0-can-t-stop-rproc--110/5681609 #5681609"]2)您是否能够使用 SDK 10.1在 TI EVM 上复制此行为? 如果是这样、这意味着我可以在这方面进行测试并验证您的观察结果。

    我们没有 TI EVM 板、因此我们无法测试。

    我想知道此问题是否与 M4F 固件的签名有关。 M4F 固件是否需要使用我们公司自己的密钥进行签名才能在 Linux 中正确加载? 如果它没有签名、就会出现问题?

    此致、

    Li

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

    您好、Nick。

    我现在可以正常启动和停止远程内核。

    但是、在测试过程中、存在以下误差:

    我发现 ti rpmsg char 代码存在问题、如下所示:

    board-support/linux-rt-5.10.168+gitAUTOINC+c1a1291911-gc1a1291911/drivers/remoteproc/remoteproc_core.c

    https://git.ti.com/cgit/rpmsg/ti-rpmsg-char/tree/src / rpmsg_char.c

    TI rpmsg char 与最新的 SDK 10.1不兼容

    在内核空间中测试 RPMSg 也存在问题:

    执行上述命令后、没有输出。

    通常、以下日志应该是输出:

    software-dl.ti.com/.../Foundational_Components_IPC62x.html

    我想问一下如何解决这个问题?

    此致、

    Li

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

    您好、Li:

    对于 TI EVM 上的默认用例、您无需以特殊方式对 M4F 固件进行签名。

    我无法在 SDK 10.0中复制您对 AM62x SDK 的观察结果。

    root@am62xx-lp-evm:~# uname -a
    Linux am62xx-lp-evm 6.6.32-gb572d5b4c831-dirty #1 SMP PREEMPT Sun Feb 16 18:59:01 CST 2025 aarch64 GNU/Linux
    root@am62xx-lp-evm:~# dmesg | grep remoteproc
    [    8.067154] k3-m4-rproc 5000000.m4fss: configured M4 for remoteproc mode
    [    8.121691] remoteproc remoteproc0: 5000000.m4fss is available
    [    8.137007] remoteproc remoteproc0: powering up 5000000.m4fss
    [    8.143146] remoteproc remoteproc0: Booting fw image am62-mcu-m4f0_0-fw, size 55016
    [    8.287504] remoteproc remoteproc0: remote processor 5000000.m4fss is now up
    [    8.548233] remoteproc remoteproc1: 78000000.r5f is available
    [    8.548391] remoteproc remoteproc1: attaching to 78000000.r5f
    [    8.553684] remoteproc remoteproc1: remote processor 78000000.r5f is now attached
    root@am62xx-lp-evm:~# dmesg | grep virtio
    [    8.164966] rproc-virtio rproc-virtio.4.auto: assigned reserved memory node m4f-dma-memory@9cb00000
    [    8.223086] virtio_rpmsg_bus virtio0: rpmsg host is online
    [    8.223141] virtio_rpmsg_bus virtio0: creating channel ti.ipc4.ping-pong addr 0xd
    [    8.248818] virtio_rpmsg_bus virtio0: creating channel rpmsg_chrdev addr 0xe
    [    8.256385] rproc-virtio rproc-virtio.4.auto: registered virtio0 (type 7)
    [    8.552473] rproc-virtio rproc-virtio.5.auto: assigned reserved memory node r5f-dma-memory@9da00000
    [    8.553609] virtio_rpmsg_bus virtio1: rpmsg host is online
    [    8.553666] rproc-virtio rproc-virtio.5.auto: registered virtio1 (type 7)
    [    8.554327] virtio_rpmsg_bus virtio1: creating channel ti.ipc4.ping-pong addr 0xd
    [    8.554659] virtio_rpmsg_bus virtio1: creating channel rpmsg_chrdev addr 0xe
    root@am62xx-lp-evm:~# rpmsg_char_simple -r 9 -n 1
    Created endpt device rpmsg-char-9-1121, fd = 4 port = 1025
    Exchanging 1 messages with rpmsg device rpmsg-char-9-1121 on rproc id 9 ...
    
    Sending message #0: hello there 0!
    Received message #0: round trip delay(usecs) = 176575
    hello there 0!
    
    Communicated 1 messages successfully on rpmsg-char-9-1121
    
    TEST STATUS: PASSED
    

    您是否对 ti-rpmsg-char 代码或 M4F 固件源代码进行了任何修改?

    请附加您的 devicetree 文件、在其中分配存储器区域并定义 M4F devicetree 节点。

    此致、

    Nick