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.

[参考译文] TMDSIDK437X:未发生 PRU 和 ARM 通信- PRU 实践实验室中的 LAB5

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1251743/tmdsidk437x-pru-and-arm-communication-not-happening--lab5-in-pru-hands-on-labs

器件型号:TMDSIDK437X
主题中讨论的其他器件: PRU-SWPKG

您好

Im 使用 TMDSIDK437x 体验 PRU 内核的特性。 现在、我 尝试了"PRU 实践实验室"中的 LAB5实验、但 PRU 内核未发送消息、以下是步骤。

准备二进制文件

  1.    使用 Msg_Echo_Interrupt v12.3将通道名称更改为 rpmsg-client-sample、从 pru-software-support-package-6.2.0构建"pru_schr0 &1"和"pru_halt"项目
  2. 通过使用 dts 文件"tisdk_am335x-evm_defconfig.dts"从 AM437x Linux TI SDK v8.2编译内核源、我得到了 经过交叉编译的 rpmsg_client_sample.ko 模块。
  3. 使用默认映像"tisdk-default-image-AM437X-EVM"准备 SD 卡、并将上述四个二进制文件复制到 SD 卡 Linux 中。

运行二进制文件

  1. 将二进制文件 "PRU_CP0 Msg_Echo_Interrupt &1"和"PRU_Halt"移至/lib/firware/pru、"rpmsg_client_sample.ko"移至/home/root/pru
  2. 我使用 IPC 模式检查 remoteproc 1和2状态是否均未停止、并加载了其他固件。 所以我尝试了 remoteproc3和4
  3. remoteproc3和4的状态在 加载固件之前处于"脱机"状态、用于加载和 运行固件的命令为
    echo 'PRU/PRU_SCPH0.out' Msg_Echo_Interrupt >/sys/class/remoteproc/remoteproc4/firmware
    echo 'PRU/PRU_HALT.OUT'>/sys/class/remoteproc/remoteproc3/firmware
     
    echo 'start'>/sys/class/remoteproc/remoteproc3/firmware
    echo 'start'>/sys/class/remoteproc/remoteproc4/firmware
  4. 然后,我用 insmod 和 dmesg 加载了"rpmsg_client_sample.ko"模块,但没有输出。 我尝试了二进制 的 pru_pru_1 Msg_Echo_Interrupt 也没有运气。

PRU Hands on Link: 点击 这里

我需要使用用于构建 rpmsg_client_sample.ko 的同一个内核吗?

此致、

Vairamani. V

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

    您好  Vairamani。 V、

    提供一些工具来确保项目正常运行:

    $ head /sys/class/remoteproc/remoteproc */ name 将告诉您每个 Remoteproc 条目是什么(以防万一)

    可以、您需要使用在 AM437x 上运行的同一内核来编译内核模块。 请注意、不应将 "tisdk_am335x-evm_defconfig.dts"与 AM437x 一起使用。 请使用 AM437x Foundational_Components_Kernel_Users_Guide 8.2文档中记录的 defconfig:https://software-dl.ti.com/processor-sdk-linux/esd/AM437X/08_02_00_24/exports/docs/linux/SDK.html#users-guide

    此外、作为供参考、我在 SDK 8.2发布之后添加了一组新的 PRU 实验的文档。 在2023年晚些时候发布下一个 AM437x SDK 之前、您可以在 AM62x Linux SDK 文档中找到这些 PRU 入门实验: https://software-dl.ti.com/processor-sdk-linux/esd/AM62X/09_00_00_03/exports/docs/common/PRU-ICSS/PRU-Getting-Started-Labs.html

    此致、

    尼克

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

    您好、Nick。

     感谢您提供信息、我能够使用 XDS110在 PRU 内核中调试简单的程序、但我需要 ARM 和 PRU 之间进行一些通信、所以我尝试了 PRU 实践实验室 (示例5)

     我使用了正确的 DTS 文件、误给了 tisdk_am335x-evm_defconfig.dts、而不是 tisdk_AM437X-evm_defconfig.dts

     现在、我使用./ create_sdcard.sh (单击 此处)准备了 SD 卡、其中"rpmsg_client_sample.ko"使用我在板中使用的相同内核构建。

     内核详细信息

    SDK: AM437x Linux TI SDK v8.2

    DTS: tisdk_AM437X-evm_defconfig.dts

    文件系统: tisdk-base-image-am437x-evm.tar.xz

     我按照同样的步骤,但仍然没有输出,步骤是

     

    echo 'pru/PRU_RPMsg_Echo_Interrupt0.out' > /sys/class/remoteproc/remoteproc3/firmware

    echo 'pru/PRU_Halt.out' > /sys/class/remoteproc/remoteproc4/firmware

    echo 'start' > /sys/class/remoteproc/remoteproc3/firmware

    echo 'start' > /sys/class/remoteproc/remoteproc4/firmware

     

    然后,我加载"rpmsg_client_sample.ko"模块,但没有输出

    你有什么想法,为什么它失败。

    此致、

    韦拉马尼

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

    您好 Vairamani:

    对于此处的延迟回答、我们深表歉意。 我想先在我身边运行测试、但我一直没有时间。 因此、这个响应 没有在我使用基于 SDK 8.2的 AM437x 进行任何测试。

    快速检查:您能向我确认加载的是 AM437x 二进制文件、而不是 AM335x 二进制文件吗? 您还应验证传递给 Remoteproc 驱动程序的二进制名是否与系统上的文件名实际匹配。

    PRU_AM335x 2.Out 是 Msg_Echo_Interrupt 二进制文件所使用的名称。 如果您使用  Msg_Echo_Interrupt 的是实验5中 AM437x 的"解决方案"中构建的文件、则文件名应为 PRU_PROFILE_PORTING_1_1
    https://git.ti.com/cgit/pru-software-support-package/pru-software-support-package/tree/labs/Hands_on_Labs/lab_5/solution/am437x 

    或者、如果您只是构建其中一个 AM437x RPMsg 示例工程、则输出二进制文件仍然具有不同的命名约定:  
    https://git.ti.com/cgit/pru-software-support-package/pru-software-support-package/tree/examples/am437x 

    在执行 echo "启动"命令之后、您还应该会看到终端输出、该命令可以验证 PRU 内核是否正在进行初始化。

    如果您键入  echo 'pru/pru_halt.out'、则应该可以在/lib/firmware/pru 下的 Linux 文件系统中检查出一个名为 PRU_halt.out 的二进制文件。

    调试 Remoteproc 信息  

    我假设您已经运行"head"命令、确保与您认为所与的 PRU 内核进行通信:

    $ head /sys/class/remoteproc/remoteproc */ name 将告诉您每个 Remoteproc 条目是什么(以防万一)

    现在、让我们检查 Remoteproc 内核是否正在运行:

    $ cat /sys/class/remoteproc/remoteproc3/state

    如果内核未运行、则状态将不是"正在运行"

    如果您需要其他帮助、请提供终端输出  

    这样我就可以看到您键入的命令、是否存在任何错误代码等。

    此致、

    尼克

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

    您好 Vairamani:

    很高兴你能够使它工作!

    面向未来读者:

    不幸的是,我们不得不 两次破坏向后兼容性,而我只记得 PRU 软件支持包(PSSP)中的 PRU 驱动程序和相关项目(一次是较早的 Linux 版本,一次是从 Linux 5.4 -> Linux 5.10)。 我希望现在 PRU Linux remoteproc 驱动程序已更新、我们能够更大限度地减少后续的断言。  

    以下是一些关键信息:
    Linux 内核5.4:使用 PSSP v5.9.0。 请参阅 https://git.ti.com/cgit/pru-software-support-package/pru-software-support-package/tag/?h=v5.9.0
    Linux 内核5.10:使用 PSSP v6.0.0 - v6.1.0。 请参阅 https://git.ti.com/cgit/pru-software-support-package/pru-software-support-package/tag/?h=v6.1.0
    Linux 内核6.1:使用 PSSP v6.2.0、请参阅 https://git.ti.com/cgit/pru-software-support-package/pru-software-support-package/tag/?h=v6.2.0

    即使 PSSP v6.2.0增加了对 Linux 内核6.1的支持、它仍应能与 Linux 内核5.10一起使用。

    此致、

    尼克