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 and ARM communication not happening -LAB5 in PRU Hands-on Labs

Part Number: TMDSIDK437X
Other Parts Discussed in Thread: PRU-SWPKG

Hi

Im using the TMDSIDK437x to experiement the features of PRU core. Now, I tried the Lab5 experiment from "PRU Hands-on Labs", but no message from PRU core, below are the steps.

Preparing the binaries

  1. Build the "PRU_RPMsg_Echo_Interrupt0 & 1" and "PRU_Halt" project from pru-software-support-package-6.2.0 by changing the channel name as rpmsg-client-sample using the CCS v12.3
  2. By compiling the kernel source from AM437x Linux TI SDK v8.2 with dts file "tisdk_am335x-evm_defconfig.dts", i got the rpmsg_client_sample.ko module cross-compiled.
  3. Prepared the SD card with default image "tisdk-default-image-am437x-evm" and copied the above four binaries into the SD card Linux.

Running the binaries

  1. Moved the binaries "PRU_RPMsg_Echo_Interrupt0 & 1" and "PRU_Halt" to /lib/firware/pru & "rpmsg_client_sample.ko" to /home/root/pru
  2. I check the remoteproc 1 & 2 state's both are not stopping and loaded with other firmware using IPC mode. So i tried remoteproc3 & 4
  3. The state of remoteproc3 & 4 are "offline" before loading the firmware, the commands used to load and run the firmware are
    echo 'pru/PRU_RPMsg_Echo_Interrupt0.out' > /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. Then next, i loaded the "rpmsg_client_sample.ko" module using the insmod and did dmesg , but no output. I tried the binary PRU_RPMsg_Echo_Interrupt1 as well but no luck.

PRU Hands on Link : Click here

Is i need to use the same kernel which used to build the rpmsg_client_sample.ko?

Regards,

Vairamani.V

  • Hello Vairamani.V,

    Giving some tools to make sure things are running properly:

    $ head /sys/class/remoteproc/remoteproc*/name will tell you what every remoteproc entry is (just in case)

    Yes, you need to compile the kernel module with the same kernel that is running on the AM437x. Please note that you should NOT use "tisdk_am335x-evm_defconfig.dts" with AM437x. Please use the defconfig documented in the AM437x SDK 8.2 docs: https://software-dl.ti.com/processor-sdk-linux/esd/AM437X/08_02_00_24/exports/docs/linux/Foundational_Components_Kernel_Users_Guide.html#users-guide

    Also as an FYI, I added documentation for a new set of PRU labs after the SDK 8.2 release. You can find those PRU Getting Started Labs in the AM62x Linux SDK docs until the next AM437x SDK release later in 2023: https://software-dl.ti.com/processor-sdk-linux/esd/AM62X/09_00_00_03/exports/docs/common/PRU-ICSS/PRU-Getting-Started-Labs.html

    Regards,

    Nick

  • Hi Nick

     Thanks for providing the info, I can able to debug the simple program in PRU core using XDS110 but I need some communication between ARM & PRU, so I tried PRU Hands-on Labs (Example 5)

     I used the correct dts file, by mistake I gave the tisdk_am335x-evm_defconfig.dts instead of tisdk_am437x-evm_defconfig.dts.

     Now, I prepared the SD card using ./create_sdcard.sh (click here), where "rpmsg_client_sample.ko" is build with same kernel which I'm using in board.

     The kernel detail are

    SDK: AM437x Linux TI SDK v8.2

    dts :tisdk_am437x-evm_defconfig.dts

    Filesystem: tisdk-base-image-am437x-evm.tar.xz

     I followed the same steps, but still no output , the steps are

     

    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

     

    Then next, i load the "rpmsg_client_sample.ko" module , but no output

    Do you have any thoughts that why it's failing.

    Regards,

    Vairamani

  • Hello Vairamani,

    Apologies for the delayed responses here. I wanted to run tests on my side first, but I keep running out of time. So this response is WITHOUT testing things on my end with AM437x on SDK 8.2.

    Quick check: can you verify for me that you are loading the AM437x binaries, and NOT the AM335x binaries? You should also verify that the binary name you are passing in to the remoteproc driver actually matches the file name on your system.

    PRU_RPMsg_Echo_Interrupt0.out is the name used by AM335x binaries. If you were using the file that is built in the "solutions" folder for AM437x in Lab 5, I would expect the filename to be PRU_RPMsg_Echo_Interrupt1_1
    https://git.ti.com/cgit/pru-software-support-package/pru-software-support-package/tree/labs/Hands_on_Labs/lab_5/solution/am437x 

    Or if you were just building one of the AM437x RPMsg example projects, the output binary file would still have a different naming convention: 
    https://git.ti.com/cgit/pru-software-support-package/pru-software-support-package/tree/examples/am437x 

    You should also see terminal output after your echo 'start' command that verifies that the PRU core is getting initialized.

    If you type out echo 'pru/PRU_Halt.out', I would expect that you checked that there is a binary file names PRU_Halt.out in the Linux filesystem under /lib/firmware/pru/

    Debugging the remoteproc information 

    I will assume you have already run the "head" command to make sure you are talking with the PRU cores that you think you are talking with:

    $ head /sys/class/remoteproc/remoteproc*/name will tell you what every remoteproc entry is (just in case)

    Now let's check to see if the remoteproc cores are even running:

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

    If the core is not running, then the state will be something other than "running"

    If you need additional assistance, please provide terminal output 

    That way I can see the commands you are typing out, whether there are any error codes, etc.

    Regards,

    Nick

  • Hi Nick,

    Thanks for response.

    I used the "PRU_SSP" git source code from the link which you gave and now its working fine.

    Early, i was trying the am437x example from PRU-SWPKG (click here), that wasn't worked

    root@am437x-evm:~/pru# insmod rpmsg_client_sample.ko
    [  308.708956] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: new channel: 0x400 -> 0x1e!
    [  308.718256] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 1 (src: 0x1e)
    [  308.726912] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 2 (src: 0x1e)
    [  308.735535] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 3 (src: 0x1e)
    [  308.744416] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 4 (src: 0x1e)
    [  308.753040] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 5 (src: 0x1e)
    [  308.761666] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 6 (src: 0x1e)
    [  308.770254] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 7 (src: 0x1e)
    [  308.778865] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 8 (src: 0x1e)
    [  308.787479] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 9 (src: 0x1e)
    [  308.796096] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 10 (src: 0x1e)
    [  308.804784] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 11 (src: 0x1e)
    [  308.813474] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 12 (src: 0x1e)
    [  308.822162] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 13 (src: 0x1e)
    [  308.830853] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 14 (src: 0x1e)
    [  308.839530] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 15 (src: 0x1e)
    [  308.848222] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 16 (src: 0x1e)
    [  308.856914] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 17 (src: 0x1e)
    [  308.865618] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 18 (src: 0x1e)
    [  308.874310] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 19 (src: 0x1e)
    [  308.882999] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 20 (src: 0x1e)
    [  308.891687] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 21 (src: 0x1e)
    [  308.900360] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 22 (src: 0x1e)
    [  308.909053] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 23 (src: 0x1e)
    [  308.917747] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 24 (src: 0x1e)
    [  308.926440] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 25 (src: 0x1e)
    [  308.935131] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 26 (src: 0x1e)
    [  308.943819] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 27 (src: 0x1e)
    [  308.952510] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 28 (src: 0x1e)
    [  308.961201] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 29 (src: 0x1e)
    [  308.969880] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 30 (src: 0x1e)
    [  308.978572] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 31 (src: 0x1e)
    [  308.987263] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 32 (src: 0x1e)
    [  308.995954] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 33 (src: 0x1e)
    [  309.004644] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 34 (src: 0x1e)
    [  309.013338] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 35 (src: 0x1e)
    [  309.022029] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 36 (src: 0x1e)
    [  309.030721] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 37 (src: 0x1e)
    [  309.039400] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 38 (src: 0x1e)
    [  309.048092] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 39 (src: 0x1e)
    [  309.056779] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 40 (src: 0x1e)
    [  309.065468] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 41 (src: 0x1e)
    [  309.074157] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 42 (src: 0x1e)
    [  309.082851] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 43 (src: 0x1e)
    [  309.091541] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 44 (src: 0x1e)
    [  309.100216] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 45 (src: 0x1e)
    [  309.108905] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 46 (src: 0x1e)
    [  309.117598] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 47 (src: 0x1e)
    [  309.126299] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 48 (src: 0x1e)
    [  309.134987] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 49 (src: 0x1e)
    [  309.143678] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 50 (src: 0x1e)
    [  309.152371] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 51 (src: 0x1e)
    [  309.161061] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 52 (src: 0x1e)
    [  309.169737] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 53 (src: 0x1e)
    [  309.178428] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 54 (src: 0x1e)
    [  309.187121] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 55 (src: 0x1e)
    [  309.195812] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 56 (src: 0x1e)
    [  309.204498] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 57 (src: 0x1e)
    [  309.213263] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 58 (src: 0x1e)
    [  309.221972] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 59 (src: 0x1e)
    [  309.230673] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 60 (src: 0x1e)
    [  309.239351] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 61 (src: 0x1e)
    [  309.248040] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 62 (src: 0x1e)
    [  309.256730] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 63 (src: 0x1e)
    [  309.265418] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 64 (src: 0x1e)
    [  309.274105] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 65 (src: 0x1e)
    [  309.282796] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 66 (src: 0x1e)
    [  309.291486] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 67 (src: 0x1e)
    [  309.300161] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 68 (src: 0x1e)
    [  309.308854] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 69 (src: 0x1e)
    [  309.317548] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 70 (src: 0x1e)
    [  309.326238] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 71 (src: 0x1e)
    [  309.334925] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 72 (src: 0x1e)
    [  309.343620] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 73 (src: 0x1e)
    [  309.352314] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 74 (src: 0x1e)
    [  309.361005] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 75 (src: 0x1e)
    [  309.369679] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 76 (src: 0x1e)
    [  309.378370] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 77 (src: 0x1e)
    [  309.387062] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 78 (src: 0x1e)
    [  309.395753] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 79 (src: 0x1e)
    [  309.404442] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 80 (src: 0x1e)
    [  309.413132] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 81 (src: 0x1e)
    [  309.421822] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 82 (src: 0x1e)
    [  309.430497] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 83 (src: 0x1e)
    [  309.439186] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 84 (src: 0x1e)
    [  309.447880] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 85 (src: 0x1e)
    [  309.456579] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 86 (src: 0x1e)
    [  309.465270] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 87 (src: 0x1e)
    [  309.473959] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 88 (src: 0x1e)
    [  309.482652] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 89 (src: 0x1e)
    [  309.491340] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 90 (src: 0x1e)
    [  309.500019] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 91 (src: 0x1e)
    [  309.508713] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 92 (src: 0x1e)
    [  309.517404] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 93 (src: 0x1e)
    [  309.526092] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 94 (src: 0x1e)
    [  309.534783] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 95 (src: 0x1e)
    [  309.543477] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 96 (src: 0x1e)
    [  309.552167] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 97 (src: 0x1e)
    [  309.560859] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 98 (src: 0x1e)
    [  309.569592] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 99 (src: 0x1e)
    [  309.578292] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: incoming msg 100 (src: 0x1e)
    [  309.587046] rpmsg_client_sample virtio0.rpmsg-client-sample.-1.30: goodbye!

  • Hello Vairamani,

    Glad you were able to get it working!

    For future readers:

    Unfortunately, we have had to break backwards compatibility twice that I can remember with the PRU drivers & associated projects in the PRU Software Support Package (PSSP) (once with an earlier Linux release, and once going from Linux 5.4 --> Linux 5.10). My hope is that now that the PRU Linux remoteproc driver has been upstreamed, we will be able to minimize breakages going forward. 

    Here's some key info:
    Linux Kernel 5.4: Use PSSP v5.9.0. See https://git.ti.com/cgit/pru-software-support-package/pru-software-support-package/tag/?h=v5.9.0
    Linux Kernel 5.10: Use PSSP v6.0.0 - v6.1.0. See https://git.ti.com/cgit/pru-software-support-package/pru-software-support-package/tag/?h=v6.1.0
    Linux Kernel 6.1: Use PSSP v6.2.0 See https://git.ti.com/cgit/pru-software-support-package/pru-software-support-package/tag/?h=v6.2.0

    Even though PSSP v6.2.0 adds support for Linux kernel 6.1, it should still work with Linux kernel 5.10.

    Regards,

    Nick