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



投訴建議