Remote processor messageing (RPMsg), virtualization module (VirtIO), and remoteproc are implemented in upstream Linux kernel. The OpenAMP library provides implementations of these components for the following environments:
- Baremetal
- Real-time operating system (FreeRTOS)
- Linux userspace
- virtIO
- The OpenAMP library implements virtIO standard for shared memory management. The virtIO is a virtualization standard for network and disk device drivers where only the driver on the guest device is aware it is running in a virtual environment, with the hypervisor.
- remoteproc
- Remoteproc provides life cycle management (LCM) for remote processors. The OpenAMP library uses a remoteproc API that is compatible with the infrastructure in the Linux kernel 3.18 and later. Remoteproc uses information in the remote processor firmware resource table to allocate system resources and create VirtIO devices. You can also use remoteproc to load arbitrary firmware. It is not limited to OpenAMP firmware.
- RPMsg
- The RPMsg API enables inter-process communication (IPC) between software that runs on independent cores in an AMP system. It is compatible with the RPMsg bus infrastructure in Linux kernel 3.18 and later.
The following diagrams show how OpenAMP is used on MPSoC platforms:
- Linux kernel (Cortex-A) host and RPU (Cortex-R) OpenAMP remote:
Linux kernel space provides RPMsg and remoteproc. However, the RPU application depends on Linux to load it before it can communicate with the RPMsg counterpart in the Linux kernel. This dependency is a limitation of the Linux kernel RPMsg and remoteproc implementation.
- Linux userspace OpenAMP application and RPU OpenAMP application:
You can also use the OpenAMP library in Linux user space. In this configuration, the remote processor can run independently of the Linux host processor. AMD deprecates this use case. Use the RPMsg and VirtIO implementations in the Linux kernel instead.