RPMsg
RPMsg (Remote Processor Messaging) is a protocol enabling inter-processor communication inside multi-core processors.
Background
Modern SoCs usually employ heterogeneous processors in Asymmetric multiprocessing (AMP) configurations, each of which may be running a different instance of an Operating system. Typically, SoCs have a central multi-core processor running a high-level OS, such as Linux, in a Symmetric multiprocessing (SMP) configuration, and additional remote processors running various flavors of a Real-time operating system. These remote processors are often used to offload CPU-intensive tasks from the main application processor, or to access hardware blocks otherwise inaccessible by the central processor. Rpmsg facilitates communication between the various processors in the system, by providing means of sending inter-processor messages back and forth.
Implementations
RPMsg is present in the Linux kernel,[1][2] has been demonstrated in Zephyr (operating system),[3][4] FreeRTOS,[5] Cadence XOS,[6] ThreadX,[7] QNX[8] and is also available as a stand-alone component for microcontroller-based systems.[9][10] Most of the RPMsg implementations are developed as open-source.[2][9][10][11]
History
RPMsg was developed for the Linux kernel by Ohad Ben-Cohen of Wizery [12][13][14][15][16] and was merged to Linux 3.4 on 20 May 2012.[17] It was first used by Google, in Android Ice Cream Sandwich, on the Galaxy Nexus phone, to enable offloading of cpu-intensive multimedia tasks on the OMAP4: from the ARM Cortex-A9 cores, running the Linux Kernel, to the ARM Cortex-M3 cores, running the TI-RTOS OS. Several semiconductor companies have since added support for RPMsg, including Texas Instruments,[18] STMicroelectronics,[19] Xilinx,[11][20] NXP Semiconductors,[10] Renesas Electronics[21] and Nordic Semiconductor.[22]
References
- "Remote Processor Messaging (rpmsg) Framework — The Linux Kernel documentation". www.kernel.org. Retrieved 2022-02-25.
- "Linux/Documentation/staging/rpmsg.rst - Linux Cross Reference - Bootlin". lxr.bootlin.com. Retrieved 2019-09-04.
- Project, Zephyr (2019-02-20). "The Zephyr Project Demonstrates IoT Innovation at Embedded World". Zephyr Project. Retrieved 2022-03-05.
- RPMsg Component, NXP Micro, 2022-02-16, retrieved 2022-03-05
- RPMsg Component, NXP Micro, 2022-02-16, retrieved 2022-03-05
- RPMsg Component, NXP Micro, 2022-02-16, retrieved 2022-03-05
- RPMsg Component, NXP Micro, 2022-02-16, retrieved 2022-03-05
- RPMsg Component, NXP Micro, 2022-02-16, retrieved 2022-03-05
- "RPMsg-Lite User's Guide: RPMsg Component". nxpmicro.github.io. Retrieved 2016-09-27.
- "NXPmicro/rpmsg-lite". GitHub. Retrieved 2016-09-27.
- "Xilinx Wiki - OpenAMP". www.wiki.xilinx.com. Retrieved 2016-09-27.
- "Introducing a generic AMP/IPC framework [LWN.net]". lwn.net. Retrieved 2022-02-24.
- "LKML: Ohad Ben-Cohen: [GIT PULL] adding rpmsg and remoteproc to 3.3". lkml.org. Retrieved 2022-02-24.
- "LKML: Ohad Ben-Cohen: [PATCH 0/7] Introducing a generic AMP framework". lkml.org. Retrieved 2022-02-24.
- "A Generic AMP/IPC Framework For Linux". www.phoronix.com. Retrieved 2022-02-24.
- "kernel/git/torvalds/linux.git - Linux kernel source tree". git.kernel.org. Retrieved 2022-07-03.
- "Linux_3.4 - Linux Kernel Newbies". kernelnewbies.org. Retrieved 2022-07-03.
- "3.6.2.3. RPMsg Quick Start Guide — Processor SDK Linux for AM65X Documentation". software-dl.ti.com. Retrieved 2022-02-25.
- "Linux RPMsg framework overview - stm32mpu". wiki.st.com. Retrieved 2022-02-25.
- Aboelhassan, Mustafa O. E.; Bartik, Ondrej; Novak, Marek (November 2017). "Embedded multi-core systems for mixed-critical applications with RPMSG protocol based on xilinx ZYNQ-7000". 2017 7th IEEE International Conference on Control System, Computing and Engineering (ICCSCE). pp. 162–167. doi:10.1109/ICCSCE.2017.8284398. ISBN 978-1-5386-3897-2. S2CID 46746400.
- "Renesas RPMsg".
- "nRF5340: Multiprotocol RPMsg — nRF Connect SDK 1.9.99 documentation". developer.nordicsemi.com. Retrieved 2022-03-05.