-
Notifications
You must be signed in to change notification settings - Fork 10
RPMsg
RPMsg is a communication protocol for heterogeneous inter-processor communication. These processors are often on the same SoC but isolated from each other via software (for instance, a board may boot up Linux with an arm processor while additional microcontrollers (remote processors) run an RTOS or some bare-metal application).
This page aims to establish a how-to guide for enabling and testing RPMsg while elaborating on software concepts in use to provide a deeper understanding of its inner workings. Please note that this is by no means a definitive guide on any RPMsg implementation (eg Linux, OpenAMP, RPMsgLite, etc) and for a deeper understanding, it is encouraged to go through the respective project's dedicated documentation.
We now consider one of our DSP offerings as an example: the ADSP-SC598. This board contains 2 SHARC+ processing cores and 1 Arm Cortex A55, where the Arm processor is used to run Linux and is isolated, via software, from both the SHARC+ cores. All processors however share the memory provided to the system (L2 and L3). Additionally, the board has reserved memory for vrings and buffers.
In this scenario, we will aim to establish communication between a SHARC+ core and the cortex-A55. Both sides will require clients to handle RPMsg related activity. For the arm processor, since it is running Linux, the kernel includes support for RPMsg via a dedicated driver.
The latter, however, is currently assumed to be running bare-metal applications/RTOS only. Due to this, we use a lightweight, bare-metal library called rpmsg-lite. This implements a subset of features from Linux's RPMsg implementation to allow devices such as small MCUs to utilize this framework.