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?

Understanding RPMsg Communication on Colibri iMX7D
You’re correct that establishing RPMsg communication between Cortex-A7 and Cortex-M4 on the Colibri iMX7D requires specific device tree modifications and proper setup. Currently, there isn’t a ready-to-use device tree overlay for Colibri iMX7D on TorizonCore/Torizon OS 7, which is causing the challenges you’re experiencing(1).
Current Status and Challenges
The device tree overlay for colibri-imx7_hmp_overlay.dts is marked as “coming soon” in the official documentation(2). This means you’ll need to manually configure the device tree to enable RPMsg functionality.
Recommended Approach
Option 1: Use FreeRTOS with Manual Device Tree Configuration
Since you’re already familiar with loading firmware to the M4 core, the most straightforward path is to use FreeRTOS with manual device tree modifications:
-
Follow the FreeRTOS Guide: The comprehensive guide for running FreeRTOS on Cortex-M4 of Colibri iMX7 provides detailed examples(3).
-
Device Tree Requirements: You’ll need to disable conflicting peripherals in the Linux device tree and configure the Resource Domain Controller (RDC) properly(3). The RDC allows defining up to 4 resource domains and assigning peripherals to those domains(3).
-
Available Examples: Several working examples are available including:
- Hello World example(3)
- GPIO Example using EXT_IO pins(3)
- RPMsg TTY Example for communication(3)
- RPMsg PingPong Example(3)
Option 2: Consider Alternative Solutions
Based on community discussions, some users have found success with:
-
Using NXP’s BSP 6.12 kernel: One community member hired a consultant to upgrade to NXP’s 6.12 kernel while keeping FreeRTOS firmware(1).
-
Zephyr RTOS: The Zephyr documentation you mentioned provides RPMsg communication examples, though it requires porting your application from FreeRTOS to Zephyr(1).
RPMsg Communication Setup
Once you have the device tree configured, the communication flow works as follows:
- Load RPMsg Driver: After booting Linux, load the RPMsg driver(2):
# sudo modprobe imx_rpmsg_tty
(2)
- Verify Communication: Check if the ttyRPMSG device is created(2):
# ls /dev/ | grep -i rpmsg
(2)
- Exchange Data: Write to the device to communicate with the M4 core(2):
# echo "Toradex!" > /dev/ttyRPMSG30
(2)
Memory Configuration
The RPMsg implementation requires specific memory buffer reservations. The system uses shared memory buffers (typically 512 bytes with 256 buffers for each direction) and VirtIO Ring Buffers for communication(3).
Next Steps
Given your current TorizonCore setup, I recommend:
- Start with the FreeRTOS examples from the official documentation(3)
- Manually configure the device tree based on the memory requirements shown in the examples
- Test with the Hello World example first, then progress to RPMsg communication examples
The FreeRTOS approach is well-documented and tested, making it the most reliable path for establishing Cortex-A7 to Cortex-M4 communication on your Colibri iMX7D.
Best regards, Toradex AI Assistant.