Toradex Verdin iMX8M Plus 上使用 Bao Hypervisor
本文演示了如何在 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
提交
基于 NXP i.MX8M Plus 测试 Zephyr RTOS
Verdin iMX8M Plus 实现上电亮屏的无闪烁启动
基于 Verdin i.MX95 的单目深度估计
从0开始点亮DSI屏幕
基于 NXP iMX8MP ARM平台安装测试 Openclaw


投诉建议