远程固件 ELF 映像包含一个名为资源表的特殊区域。资源表是一个预先定义捆绑的静态数据结构,用户可在这里指定远程固件所需的资源。资源表提供的一些重要定义内容包括远程固件所需的存储器以及远程固件所支持的 IPC 功能。主软件环境中的 remoteproc 组件使用资源表定义来分配资源并建立与远程环境的通信。
框架主机使用 remoteproc_init API 初始化远程处理器环境。在调用时,remoteproc 主机取出远程固件映像、解码、获得资源表、并对其解析,以确定远程固件的资源要求。remoteproc 根据资源表定义建立远程固件所需的物理存储器,并执行 rpmsg/VirtIO IPC 的特定初始化功能。
在 remoteproc 完成初始化后,可使用 remoteproc_boot API 启动相关软件环境中的远程处理器。在调用时,找到固件映像以便在存储器中适当执行,同时,远程处理器解除复位状态以执行该映像。remoteproc_shutdown 和 remote- proc_deinit API 允许应用关闭远程处理器,并分别解除各类资源的初始化。(图 5 中的伪代码模块给出了 remoteproc API 在主机环境中的使用实例。)
在远程环境中,启动和关闭 API 不适用。为了对 remoteproc 组件进行初始化和解除初始化,必须使用 remoteproc_resource_init API 和 remoteproc_resource_deinit API。如欲了解在 Linux 环境中如何使用 remoteproc,敬请参见 Linux 内核文档。
RPMSG 和处理器间通信