Inter process Communication

I want to run rpmsg via openamp_rsc_table using zephyr on M7 Core and Linux on A55 Core on imx95. I was able to generate zephyr.elf and load it on A core’s remote processor’s firmware. When I chnaged the state to start, the endpoints are not created and /dev directory has rpmsg_ctrl0 instead of rpmsg0 and rpmsg1.

Hi, I’m the Toradex AI Assistant.

I might make mistakes. Our support team will step in if needed. If I answered your question, please tick the “Solution” checkbox. For follow-up questions to me, please use @ToradexAI in your post.

Did you like my answer? :+1: :-1:


Hello! Thank you for your question.

Based on your description, it sounds like the RPMsg endpoints are not being properly created after starting your Zephyr firmware on the M7. When you only see rpmsg_ctrl0 in /dev instead of rpmsg0 and rpmsg1, this usually indicates an issue with the setup of the communication link between Zephyr (on M7) and Linux (on A55).

Here are the key areas to check:

1. Device Tree Overlay on Linux

Ensure that your device tree overlay correctly sets up:

  • The shared memory region for RPMsg.
  • The mailbox node for interprocessor communication.
  • The resource table region is mapped and matches between Zephyr and Linux.

If these aren’t configured correctly, the Linux remoteproc driver can’t establish communication properly.

2. Zephyr Application Configuration

Your Zephyr application needs to:

  • Use the right sample and Kconfig settings. The openamp_rsc_table sample should be built and you must ensure CONFIG_OPENAMP and mailbox (MBOX) configurations are enabled.
  • Include a resource table in your firmware that matches the expectations of the Linux kernel for the iMX95.

3. Firmware Loading Sequence

  1. Copy your compiled zephyr.elf to the Linux filesystem on the iMX95.
  2. Load the firmware using the remoteproc interface:
    cd /sys/devices/platform/imx95-cm7/remoteproc/remoteproc1/
    echo ~/zephyr.elf > firmware
    
  3. Start the Cortex-M7 core:
    echo start > state
    

4. Resource Table and Shared Memory Consistency

The usual cause for seeing only rpmsg_ctrl0 is that the Linux side does not detect the endpoints described in the resource table, either because the resource table is missing or mismatched. Make sure:

  • Your Zephyr application includes a valid resource table. For iMX95, check that the memory regions (addresses, sizes) match what the Linux side expects.
  • The device tree overlay and Zephyr resource table must define the same shared memory region and mailbox.

5. Expected Behavior

When everything works, you should:

  • See both endpoints (rpmsg0, rpmsg1) in /dev on Linux.
  • See console logs on both the Linux and Zephyr sides indicating successful communication.

For further details on configuration, please refer to:
https://www.toradex.com/blog/imx95-zephyr-asymmetric-multiprocessing

Summary Checklist

  • Double-check device tree overlay for shared memory/mailbox/resource table.
  • Verify the Zephyr resource table and Kconfig values.
  • Ensure both sides use the same memory addresses and sizes.
  • Confirm you are using the correct firmware loading steps.

If you go through these steps and check your configurations, rpmsg0 and rpmsg1 should appear once the link is correctly established.

Best regards,
Toradex AI Assistant.

I followed all these steps without changing anything in the samples/subsys/ipc/openamp_rsc_table example. The steps listed above to load elf file in firmware file and then changing the state of remoteproc is working as expected but /dev/rpmsg0 and rpmsg1 is not created. I checked the logs and there is not log of rpmsg_core specifying address/endpoint.

Hi @deepshika,

Could you please specify the NXP BSP version that you are using here on the iMX95 EVK?
Also, I understand that you are using the iMX95 Verdin EVK here. Is that correct?

Hi @rudhi.tx,
I am using i.MX Linux Yocto Project BSP 6.12.3_1.0.0 Release, for the verdin board. Using only NXP’s BSP was not useful because remoteproc was in attached state. I need to modify this application and will therefore require modified BSP used to generate binaries.

Hello @deepshika,

Thanks for your reply. I checked with our partner who wrote the blog of iMX95-zephyr asymmetric multiprocessing.
He used NXP BSP release L6.6.36-2.1.0 and Zephyr v3.5.0. From what I understood, he didn’t have to modify the BSP. He had to flash the imx-boot-variant-alt-imx95-19x19-verdin-sd.bin-flash_alt variant to the board to allow control of the M7 firmware.