当前位置: 首页 > news >正文

OpenAMP专题(一):一文了解OpenAMP全貌

目录

一.概述

1.1 核心目标

1.2 核心设计

二.OpenAMP框架的核心组件

三.OpenAMP框架图

四.流程示例

4.1 初始化阶段

4.2 通信阶段

五.依赖关系总结


一.概述

        OpenAMP​(Open Asymmetric Multi-Processing)是一个开源框架,专为异构多核系统设计,用于实现不同处理器核心之间的通信与协同工作。它最初由Xilinx、STMicroelectronics等公司推动,现已成为Linux基金会管理的开源项目。

        在AMP系统中,多个处理器核心运行不同的操作系统或软件环境(如Linux、RTOS或裸机程序),主处理器(Master Core)负责全局管理与任务调度,远程处理器(Remote Core)则执行特定任务。这种架构通过资源隔离和分工协作提升系统性能,尤其适合嵌入式实时系统和高性能计算场景。

1.1 核心目标

        在非对称多核架构​(如CPU + DSP、CPU + FPGA、CPU + Real-Time Core)中,提供标准化的远程处理器管理、通信协议和资源共享机制

1.2 核心设计

        基于标准化的组件和协议,如VirtIO、RPMsg和Remoteproc,适用于Linux、RTOS及裸机环境。

二.OpenAMP框架的核心组件

        OpenAMP的核心功能由三大组件实现,涵盖生命周期管理、虚拟化IO及硬件抽象。

OpenAMP核心组件
序号组件角色描述
1Remoteproc生命周期管理

(1)负责远程处理器的启动、停止、固件加载及资源释放。例如,主核可通过RemoteProc类加载远程核的固件(如.elf文件),并触发其执行。

(2)支持动态配置内存地址,确保固件加载到正确位置,并初始化VirtIO和RPMsg设备。

2VirtIO虚拟化传输层

        虚拟化I/O设备抽象,实现跨操作系统的设备共享。

(1)基于共享内存实现核间通信的底层数据传输,通过vring(虚拟环形缓冲区)管理数据交换。vring包含三个关键部分:

①缓冲区描述符池:描述共享内存中数据块的位置和长度;

②可用环形缓冲区(avail ring):写入者向接收者指示新数据的位置;

③已用环形缓冲区(used ring):接收者通知写入者数据已处理;

(2)采用单写者单读者模式,避免多核竞争,无需信号量等同步机制。
3RPMsg消息传递协议

(1)在VirtIO之上构建,提供标准化的消息传输接口。每个消息包含16字节头部(含源地址、目标地址、长度和标志位)和用户数据负载。

(2)支持动态创建通道(Channel)和端点(Endpoint),允许多个应用在同一通道上绑定不同回调函数,实现灵活通信。

三.OpenAMP框架图

        笔者参阅相关资料及个人开发经验总结的框架图,可能有错漏。后面会根据学习认知的变化修正。

        

        libmetal提供了一个统一的硬件抽象层和跨平台运行时支持,这使得基于 OpenAMP 的应用能够以相对一致的代码和逻辑,在 Linux 用户空间、各种实时操作系统(RTOS)乃至裸机环境中运行。       

        但在Linux和RTOS两种环境下存在以下功能差异:

四.流程示例

4.1 初始化阶段

1.Remoteproc驱动加载固件到从核内存 → 初始化VirtIO设备(配置vring地址)。

2.Libmetal在用户空间映射共享内存(如/dev/mem或UIO设备)。

4.2 通信阶段

1.主核发送数据

应用程序调用rpmsg_send() → RPMsg封装消息头 → VirtIO将数据写入vring → 触发中断通知从核

2.从核响应

从核处理数据后,通过vring返回响应 → VirtIO触发中断 → RPMsg驱动读取数据→ 用户空间通过回调或read()获取结果

五.依赖关系总结

1.垂直依赖

        用户应用 → OpenAMP → Libmetal → 内核驱动(Remoteproc/VirtIO) → 硬件。

2.横向协作

(1)Libmetal与Remoteproc:共享内存地址需一致(通过设备树或动态协商)。

(2)RPMsg与VirtIO:共用同一vring配置,确保数据格式兼容。

http://www.dtcms.com/a/464751.html

相关文章:

  • C++ 中 rfind 方法详解
  • SpringBoot 教程(十四) SpringBoot之集成 Redis(优化版)
  • 【Linux】线程同步与互斥(上)
  • 图观 模型编辑器
  • Win11 输入延迟与鼠标卡顿:系统化排查与优化指南
  • 【开题答辩全过程】以 爱运动健身小程序的设计与实现为例,包含答辩的问题和答案
  • Linux 内核IIO sensor驱动
  • 《Linux系统编程之入门基础》【Linux的前世今生】
  • 活动汪活动策划网站龙岗建设网站
  • Apache IoTDB 架构特性与 Prometheus+Grafana 监控体系部署实践
  • LLM时代基于unstructured解析非结构化pdf
  • uniapp tab切换及tab锚点效果(wx小程序及H5端)
  • Hadoop面试题及详细答案 110题 (71-85)-- 集群部署与运维
  • 5-1〔OSCP ◈ 研记〕❘ SQL注入攻击▸SQL注入理论基础
  • 南充市企业网站建设wordpress极客主题
  • 企业做小红书关键词搜索排名推广时,怎么找到小红书上有一定搜索量但竞争度低的蓝海词?
  • 数据仓库与数据挖掘基础知识
  • 鸿蒙:使用Rating组件实现五角星打分评价
  • 外国人可以在中国做网站吗做个网站得花多少钱
  • 双均线策略
  • 【vLLM 学习】Neuron
  • 网站做行业认证好处施工企业在施工过程中发现工程设计图纸存在差错的
  • 迅为RK3576开发板挂载Windows以及虚拟机Ubuntu测试
  • 第1篇:创建基础电商AI客服
  • 【MyBatis从入门到入土】告别JDBC原始时代:零基础MyBatis极速上手指南
  • MaxScript 科研绘图教程:从数据到精确的可视化
  • org.apache.http.conn.HttpHostConnectException: Connect to localhost:8086
  • 深度学习入门(一)——从神经元到损失函数,一步步理解前向传播(上)
  • 沧州网站制作公司宁波网站的优化
  • 工程承包去哪个网站做网站的步骤 优帮云