The resource table#

A remote core application must have a resource table in order to be initialized by the Linux Remoteproc driver.

What is a resource table?

Linux uses the remoteproc driver to initialize remote cores. The remoteproc driver assumes that all remote cores use RPMsg to do inter-processor communication (IPC) with Linux. The resource table is used to pass RPMsg initialization information between Linux and the remote cores.

The resource table is generated by the remote core, and included in the remote core binary. The remoteproc driver takes the resource table from the binary, and places the resource table in DDR memory. Linux adds a couple of values to the resource table, and then Linux initializes IPC resources based on the information given in the resource table. Finally, the remote core checks the resource table to read the values Linux wrote into the table.

If the remoteproc driver does not find a resource table in the remote core binary, it will refuse to load the binary.

Note

Linux can initialize a remote core binary that has a resource table, even if Linux RPMsg is not enabled in the remote core binary. However, some remoteproc features (like graceful shutdown of remote cores) are ONLY available if Linux RPMsg is enabled in the remote core firmware. For more information about whether your usecase actually needs RPMsg, refer to section When does an MCU+ application need Linux RPMsg?.

There are several ways to add a resource table to an MCU+ project:

  1. Add Linux IPC to the MCU+ Project

    This is the simplest option, and the option that we will cover in Add Linux IPC to the remote core project.

    The Linux RPMsg libraries can be built into a project, even if the project does not use IPC with Linux. However, the RPMsg libraries do take up several kB of space in both instruction memory, and data memory.

  2. Manually add an empty resource table to the MCU+ project

    We do NOT recommend starting with this option.

    If Linux IPC is not needed in the application, you can reduce local memory usage by including an empty resource table instead of adding in all the RPMsg libraries. This takes several additional steps. For more information, refer to Adding an empty resource table