Components in OpenAMP - 2022.1 English

Libmetal and OpenAMP User Guide (UG1186)

Document ID
Release Date
2022.1 English

RPMsg (Remote Processor Messaging), VirtIO (Virtualization Module) and remoteproc are implemented in upstream Linux kernel. OpenAMP library provides the implementation for these components for the following environments: Baremetal, FreeRTOS (Real-Time Operating System), and Linux userspace.

virtIO : 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 capability for life cycle management (LCM) of the remote processors. The remoteproc API that OpenAMP library uses is compliant with the infrastructure present in the Linux Kernel 3.18 and later. The remoteproc uses information published through the remote processor firmware resource table to allocate system resources and to create virtIO devices. The remoteproc can be used to load arbitrary firmware; it is not limited to OpenAMP firmware.

RPMsg : This API allows inter-process communications (IPC) between software running on independent cores in an AMP system. This is also compliant with the RPMsg bus infrastructure present in the Linux Kernel version 3.18 and later.

The following diagrams show how OpenAMP is used in Xilinx Zynq ® and Zynq ® UltraScale+ MPSoC platforms:

1. Linux kernel master and RPU OpenAMP slave.

Figure 3-1: RPMsg Implementation in Kernel Space

X-Ref Target - Figure 3-1


Linux kernel space provides RPMsg and Remoteproc, but the RPU application requires Linux to load it in order to talk to the RPMsg counterpart in the Linux kernel. This is the Linux kernel RPMsg and Remoteproc implementation limitation.

2. Linux userspace OpenAMP application and RPU OpenAMP application.

Figure 3-2: OpenAMP RPMsg Implementation in Linux Userspace

X-Ref Target - Figure 3-2


OpenAMP library can also be used in Linux userspace. In this configuration, the remote processor can run independently to the Linux host processor.