"); //-->
本文演示了如何在 Toradex Verdin iMX8M Plus 平台上,使用 Bao 静态分区 hypervisor 运行 Torizon OS 和 FreeRTOS。
本演示针对需要将 Linux 环境与同一 SoC 上的确定性实时执行相结合的混合关键性嵌入式系统。它展示了如何在 Linux 和 FreeRTOS 之间对 CPU、内存区域和外设进行静态分区,同时保持隔离性和可预测的执行。

现代嵌入式 SoC 能够在单个芯片上整合多种工作负载,从而降低物料清单 (BOM) 成本、功耗并缩小电路板面积。这使得在同一设备上同时运行用于互联、用户界面和协调任务的富操作系统,以及硬实时控制变得极具吸引力。但在实际应用中,安全地整合这些工作负载仍然是一项挑战。
通用型 hypervisor 依赖于调度机制和共享资源。这会引入时序干扰、增加抖动并削弱隔离边界,这对实时或安全关键型组件而言尤为棘手。
无 CPU 超额分配或调度器干扰
无动态内存管理
关键路径中不进行设备虚拟
初始化完成后,hypervisor 基本处于被动状态,仅模拟关键的共享组件(例如中断控制器)和固件服务。
工业自动化:伴随 Linux HMI 运行确定性控制回路
机器人技术:结合 ROS 2 或更高层协议栈的实时控制
医疗系统:安全关键型监测与用户界面的分离
汽车领域:控制域与车载信息娱乐域之间的隔离
其他混合关键性领域:航空电子、国防、铁路和能源系统
Bao 是一款轻量级、开源的静态分区 hypervisor,旨在实现强隔离和可预测的执行。它支持 Arm(AArch64/AArch32)、RISC-V 及其他嵌入式架构,并采用 Apache 2.0 许可证发布。
其核心分区模型中不包含运行时调度器
不进行运行时内存分配
不包含完整的设备仿真层
取而代之的是,Bao 依赖于 Stage-2 MMU/MPU 等硬件机制来实现隔离。设备在配置时被专属分配给单个虚拟机,中断直接路由至其对应的虚拟机,从而避免了大部分虚拟化开销。
某些用例需要对以太网或存储设备等硬件资源进行受控共享。针对此类场景,Bao 支持基于 VirtIO 的通信:由一个虚拟机独占物理设备,并通过共享内存的前端/后端接口向其他虚拟机提供共享访问权限。
针对更动态配置的可选调度支持目前正在开发中,预计将于 2026 年第三季度左右推出。
Bao 由社区驱动的 Bao 项目负责开发和维护。
OSYX 是 Bao 项目背后的面向行业的实体,为混合关键性设计提供商业支持、平台调试、系统集成和长期维护服务。
Bao 支持广泛的平台,尤其侧重于工业和汽车应用中常用的 NXP i.MX SoC。本演示以 Verdin iMX8M Plus 为目标平台,在 Toradex Verdin iMX8M Plus 模块上运行 Bao,并托管:
Torizon OS(Toradex 的基于容器的嵌入式 Linux 平台)
FreeRTOS(实时操作系统)
该配置演示了静态分区虚拟机管理程序如何在同一SoC上同时运行这两个系统,并实现强隔离和可预测的执行。
Toradex Verdin iMX8M Plus 系统级模块:Verdin iMX8MP Q 2GB WB IT V1.1A
Verdin 开发板:Dahlia V1.1D
Bao Hypervisor:v2.0.0 (0af4a1a)
bao-demos 分支:master (f4d55d8)
Torizon 操作系统:7.1.0
FreeRTOS:demo (a4787e2)
U-Boot:v2024.10
这是一项技术演示,并非可用于生产环境的集成方案。它展示了系统分区、启动流程以及虚拟机间的通信。若要投入生产环境(例如进行系统加固、验证和认证),则需要额外的工作。OSYX 提供支持,以帮助团队进一步推进相关工作。
需要在单个 SoC 上整合实时和 Linux 工作负载
需要确定性执行,且不受通用操作系统干扰
已使用 Torizon OS 并希望集成 RTOS 工作负载
正在为新设计评估基于分区的架构
试用指南:如果您已使用 Torizon OS,并希望在 i.MX8M Plus 硬件上评估混合关键度工作负载的整合,本演示将为您提供一个实用的起点。 该设置需要一块 Verdin iMX8M Plus 模块、一块 Verdin 开发板以及一台标准的 Ubuntu 构建主机。完整的构建和部署流程可在 Bao 演示代码库中找到。
虚拟机 1(Torizon OS):Linux、容器、网络
虚拟机 2(FreeRTOS):具有专用资源的实时任务
通过共享内存区域和中断机制,实现两者之间的受控通信。

以下配置定义了由 Bao 强制执行的静态分配:
| 资源 | 虚拟机 1(Torizon OS) | 虚拟机 2(FreeRTOS) |
| CPU 核心 | 0、1、2 | 3 |
| RAM 基址 | 0x40200000(物理) | 0x0(虚拟) |
| RAM 大小 | 1 GB | 128 MB |
| 设备 | 除 UART3 以外的所有设备 | UART3 (0x30880000) |
| IPC 共享内存基址 | 0xf0000000 | 0xf0000000 |
| 共享内存大小 | 64 KB | 64 KB(同一区域) |
| IPC中断 | 61 | 52 |
| 网络 | 是(通过以太网 DHCP) | 否 |
| 控制台 | SSH | UART3(115200波特) |
这种资源划分可确保:
为 FreeRTOS 提供专用的 CPU 时间
虚拟机之间不存在设备争用
明确界定的通信边界
系统启动过程如下:
开发板通电
固件初始化硬件
U-Boot 启动
U-Boot:
从SD卡将bao.bin加载到RAM中
跳转至 Bao 的入口点
Bao:
为每个虚拟机生成第二阶段页表
为每个虚拟机分配内存区域、设备和中断
共享内存区域和进程间通信(IPC)通道
将控制权移交给虚拟机
初始化 CPU、内存管理子系统和控制台
并行进行虚拟机初始化:
此时:
FreeRTOS在CPU 3上启动并开始执行任务
Torizon OS 在 CPU 0–2 上启动,并初始化 Linux、Docker 和 SSH
两个系统并行运行,且不存在调度交互

虚拟机之间的通信通过以下方式实现:
一个 64 KB 的共享内存区域
门铃中断机制
/dev/baoipc0
echo "Hello from TorizonOS" > /dev/baoipc0
FreeRTOS 接收并输出:
Task1: 53 Task2: 53 message from linux: Hello from TorizonOS Task1: 54 Task2: 54
FreeRTOS 还会写回数据:
cat /dev/baoipc0 freertos has received 16 uart interrupts!
这展示了在没有共享调度或意外交互的情况下,如何实现受控通信。
该演示程序可在 Bao 演示代码库中获取:
https://github.com/bao-project/bao-demos
平台:imx8mp-verdin
演示项目:torizonos+freertos
export CROSS_COMPILE=/path/to/aarch64-none-elfgit clone https://github.com/bao-project/bao-demos cd bao-demos export PLATFORM=imx8mp-verdin export DEMO=torizonos+freertos make -j$(nproc)
输出:
wrkdir/imgs/imx8mp-verdin/torizonos+freertos/bao.bin wrkdir/imgs/imx8mp-verdin/torizonos+freertos/torizonos.tar
Torizon OS 的构建使用 Yocto,首次运行可能需要较长时间。
Toradex Verdin iMX8M Plus 模块 + 开发板
microSD 卡
USB-C 调试线(用于 UART 和固件刷写)
支持 DHCP 的以太网
主机:Ubuntu 22.04 及以上版本,约 60 GB 磁盘空间
运行演示时,请重点关注:
启动隔离:两台虚拟机独立启动
确定性执行:FreeRTOS在专用CPU上运行
资源隔离:无意外的内存或设备访问
受控进程间通信(IPC):仅通过定义的通道进行通信
为评估虚拟化开销,分别对原生 FreeRTOS 执行环境和在 Bao 上运行的 FreeRTOS 进行了中断延迟测量。
| 配置 | 平均延迟 | WCET 延迟 |
| 原生 FreeRTOS(裸机) | 216.5 ns | 230 ns |
| Bao 平台上的 FreeRTOS | 503.3 ns | 520 ns |
结果表明,Bao 在保持确定性执行特性的同时,引入的额外延迟极小。
还可以采用直接中断注入和缓存分区(缓存着色)等额外优化技术,以进一步降低混合关键性部署中的干扰效应。OSYX 支持根据应用需求对这些技术进行评估和集成。
有关静态分区和混合关键度系统的更深入分析,请参阅:
深入解析基于 Arm 的混合关键度系统中的静态分区 Hypervisor
进一步探索:
修改分区配置(CPU、内存、设备)
集成特定于应用程序的工作负载
在实际条件下评估延迟和抖动
若需最简入门方案:
https://github.com/bao-project/bao-helloworld
Bao 支持的其他配置包括:
多个 Linux 虚拟机(包括 Android 虚拟机)
Zephyr 虚拟机
裸机分区
虚拟机之间的 VirtIO 设备共享
通过缓存着色实现缓存分区
本演示展示了如何通过 Bao 实现静态分区,从而在现代嵌入式平台上对混合工作负载进行可预测且隔离的执行。
通过结合:
用于实现高级功能的 Torizon OS
FreeRTOS 用于实时控制
Bao 实现严格分区
开发人员可以在保持明确隔离边界和确定性行为的同时,实现系统整合。
免责声明:此集成方案由 OSYX 开发和维护,并非 Toradex 的官方产品。
Bao 项目
Bao 虚拟机监控程序
Bao 演示
Bao Hello World
OSYX
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
[转帖]NeuLinux嵌入式Linux开发平台
Arm架构服务器市场份额逼近x86
最新ARM技术和嵌入式技术发展动态 下
安谋科技Arm China闪耀WAIC AI前瞻分享
WinCE+ARM开发及关键技术 下
ARM嵌入式系统开发
嵌入式LINUX开发套件常见问题解答
具身机器人量产前夜 研华RK3588 RTXe模块化方案助力“小脑”成本优化
Linux内核源代码的阅读和工具介绍(aqian转)
Linux系统下USB摄像头驱动开发
安谋将扩大采用阿尔蒂斯安全技术
arm学习资料
基于ARM-Linux的MiniGUI的仿真与移植
从Token 到任务:智能体AI如何改变基础设施的关注焦点
ARM嵌入式软件编程经验谈
恩智浦亮相2026慕尼黑上海电子展
最新ARM技术和嵌入式技术发展动态 中
ARM嵌入式系统开发:软件设计与优化
uClinux系统分析
英伟达新一代Rosa处理器搭载参宿四 Rigel(Arm v9.2)内核
表现复盘:恩智浦FRDM i.MX 8M Plus开发板
ARM 展示小型低功耗上网本样品
慕展现场|NXP展示可信智能边缘系统相关方案
基于Linux平台的温度传感器DS18B20驱动程序设计
恩智浦i.MX 95应用处理器量产,为自主智能边缘注入创新动力
ARM开发详解
移植 FreeRTOS 環境下實現Web Server电路图
uClinux系统分析
WinCE+ARM开发及关键技术 上
Linux系统的DS18B20驱动程序源代码