Toradex Verdin iMX8M Plus 上使用 Bao Hypervisor
本文演示了如何在 Toradex Verdin iMX8M Plus 平臺上,使用 Bao 靜態(tài)分區(qū) hypervisor 運行 Torizon OS 和 FreeRTOS。
本演示針對需要將 Linux 環(huán)境與同一 SoC 上的確定性實時執(zhí)行相結(jié)合的混合關(guān)鍵性嵌入式系統(tǒng)。它展示了如何在 Linux 和 FreeRTOS 之間對 CPU、內(nèi)存區(qū)域和外設(shè)進行靜態(tài)分區(qū),同時保持隔離性和可預(yù)測的執(zhí)行。

現(xiàn)代嵌入式 SoC 能夠在單個芯片上整合多種工作負載,從而降低物料清單 (BOM) 成本、功耗并縮小電路板面積。這使得在同一設(shè)備上同時運行用于互聯(lián)、用戶界面和協(xié)調(diào)任務(wù)的富操作系統(tǒng),以及硬實時控制變得極具吸引力。但在實際應(yīng)用中,安全地整合這些工作負載仍然是一項挑戰(zhàn)。
通用型 hypervisor 依賴于調(diào)度機制和共享資源。這會引入時序干擾、增加抖動并削弱隔離邊界,這對實時或安全關(guān)鍵型組件而言尤為棘手。
無 CPU 超額分配或調(diào)度器干擾
無動態(tài)內(nèi)存管理
關(guān)鍵路徑中不進行設(shè)備虛擬
初始化完成后,hypervisor 基本處于被動狀態(tài),僅模擬關(guān)鍵的共享組件(例如中斷控制器)和固件服務(wù)。
工業(yè)自動化:伴隨 Linux HMI 運行確定性控制回路
機器人技術(shù):結(jié)合 ROS 2 或更高層協(xié)議棧的實時控制
醫(yī)療系統(tǒng):安全關(guān)鍵型監(jiān)測與用戶界面的分離
汽車領(lǐng)域:控制域與車載信息娛樂域之間的隔離
其他混合關(guān)鍵性領(lǐng)域:航空電子、國防、鐵路和能源系統(tǒng)
Bao 是一款輕量級、開源的靜態(tài)分區(qū) hypervisor,旨在實現(xiàn)強隔離和可預(yù)測的執(zhí)行。它支持 Arm(AArch64/AArch32)、RISC-V 及其他嵌入式架構(gòu),并采用 Apache 2.0 許可證發(fā)布。
其核心分區(qū)模型中不包含運行時調(diào)度器
不進行運行時內(nèi)存分配
不包含完整的設(shè)備仿真層
取而代之的是,Bao 依賴于 Stage-2 MMU/MPU 等硬件機制來實現(xiàn)隔離。設(shè)備在配置時被專屬分配給單個虛擬機,中斷直接路由至其對應(yīng)的虛擬機,從而避免了大部分虛擬化開銷。
某些用例需要對以太網(wǎng)或存儲設(shè)備等硬件資源進行受控共享。針對此類場景,Bao 支持基于 VirtIO 的通信:由一個虛擬機獨占物理設(shè)備,并通過共享內(nèi)存的前端/后端接口向其他虛擬機提供共享訪問權(quán)限。
針對更動態(tài)配置的可選調(diào)度支持目前正在開發(fā)中,預(yù)計將于 2026 年第三季度左右推出。
Bao 由社區(qū)驅(qū)動的 Bao 項目負責開發(fā)和維護。 OSYX 是 Bao 項目背后的面向行業(yè)的實體,為混合關(guān)鍵性設(shè)計提供商業(yè)支持、平臺調(diào)試、系統(tǒng)集成和長期維護服務(wù)。
Bao 支持廣泛的平臺,尤其側(cè)重于工業(yè)和汽車應(yīng)用中常用的 NXP i.MX SoC。本演示以 Verdin iMX8M Plus 為目標平臺,在 Toradex Verdin iMX8M Plus 模塊上運行 Bao,并托管:
Torizon OS(Toradex 的基于容器的嵌入式 Linux 平臺)
FreeRTOS(實時操作系統(tǒng))
該配置演示了靜態(tài)分區(qū)虛擬機管理程序如何在同一SoC上同時運行這兩個系統(tǒng),并實現(xiàn)強隔離和可預(yù)測的執(zhí)行。
Toradex Verdin iMX8M Plus 系統(tǒng)級模塊:Verdin iMX8MP Q 2GB WB IT V1.1A
Verdin 開發(fā)板:Dahlia V1.1D
Bao Hypervisor:v2.0.0 (0af4a1a)
bao-demos 分支:master (f4d55d8)
Torizon 操作系統(tǒng):7.1.0
FreeRTOS:demo (a4787e2)
U-Boot:v2024.10
這是一項技術(shù)演示,并非可用于生產(chǎn)環(huán)境的集成方案。它展示了系統(tǒng)分區(qū)、啟動流程以及虛擬機間的通信。若要投入生產(chǎn)環(huán)境(例如進行系統(tǒng)加固、驗證和認證),則需要額外的工作。OSYX 提供支持,以幫助團隊進一步推進相關(guān)工作。
需要在單個 SoC 上整合實時和 Linux 工作負載
需要確定性執(zhí)行,且不受通用操作系統(tǒng)干擾
已使用 Torizon OS 并希望集成 RTOS 工作負載
正在為新設(shè)計評估基于分區(qū)的架構(gòu)
試用指南:如果您已使用 Torizon OS,并希望在 i.MX8M Plus 硬件上評估混合關(guān)鍵度工作負載的整合,本演示將為您提供一個實用的起點。 該設(shè)置需要一塊 Verdin iMX8M Plus 模塊、一塊 Verdin 開發(fā)板以及一臺標準的 Ubuntu 構(gòu)建主機。完整的構(gòu)建和部署流程可在 Bao 演示代碼庫中找到。
虛擬機 1(Torizon OS):Linux、容器、網(wǎng)絡(luò)
虛擬機 2(FreeRTOS):具有專用資源的實時任務(wù)
通過共享內(nèi)存區(qū)域和中斷機制,實現(xiàn)兩者之間的受控通信。

以下配置定義了由 Bao 強制執(zhí)行的靜態(tài)分配:
| 資源 | 虛擬機 1(Torizon OS) | 虛擬機 2(FreeRTOS) |
| CPU 核心 | 0、1、2 | 3 |
| RAM 基址 | 0x40200000(物理) | 0x0(虛擬) |
| RAM 大小 | 1 GB | 128 MB |
| 設(shè)備 | 除 UART3 以外的所有設(shè)備 | UART3 (0x30880000) |
| IPC 共享內(nèi)存基址 | 0xf0000000 | 0xf0000000 |
| 共享內(nèi)存大小 | 64 KB | 64 KB(同一區(qū)域) |
| IPC中斷 | 61 | 52 |
| 網(wǎng)絡(luò) | 是(通過以太網(wǎng) DHCP) | 否 |
| 控制臺 | SSH | UART3(115200波特) |
這種資源劃分可確保:
為 FreeRTOS 提供專用的 CPU 時間
虛擬機之間不存在設(shè)備爭用
明確界定的通信邊界
系統(tǒng)啟動過程如下:
開發(fā)板通電
固件初始化硬件
U-Boot 啟動
U-Boot:
從SD卡將bao.bin加載到RAM中
跳轉(zhuǎn)至 Bao 的入口點
Bao:
為每個虛擬機生成第二階段頁表
為每個虛擬機分配內(nèi)存區(qū)域、設(shè)備和中斷
共享內(nèi)存區(qū)域和進程間通信(IPC)通道
將控制權(quán)移交給虛擬機
初始化 CPU、內(nèi)存管理子系統(tǒng)和控制臺
并行進行虛擬機初始化:
此時:
FreeRTOS在CPU 3上啟動并開始執(zhí)行任務(wù)
Torizon OS 在 CPU 0–2 上啟動,并初始化 Linux、Docker 和 SSH
兩個系統(tǒng)并行運行,且不存在調(diào)度交互

虛擬機之間的通信通過以下方式實現(xiàn):
一個 64 KB 的共享內(nèi)存區(qū)域
門鈴中斷機制
/dev/baoipc0
echo "Hello from TorizonOS" > /dev/baoipc0
FreeRTOS 接收并輸出:
Task1: 53 Task2: 53 message from linux: Hello from TorizonOS Task1: 54 Task2: 54
FreeRTOS 還會寫回數(shù)據(jù):
cat /dev/baoipc0 freertos has received 16 uart interrupts!
這展示了在沒有共享調(diào)度或意外交互的情況下,如何實現(xiàn)受控通信。
該演示程序可在 Bao 演示代碼庫中獲?。?/p>
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 的構(gòu)建使用 Yocto,首次運行可能需要較長時間。
Toradex Verdin iMX8M Plus 模塊 + 開發(fā)板
microSD 卡
USB-C 調(diào)試線(用于 UART 和固件刷寫)
支持 DHCP 的以太網(wǎng)
主機:Ubuntu 22.04 及以上版本,約 60 GB 磁盤空間
運行演示時,請重點關(guān)注:
啟動隔離:兩臺虛擬機獨立啟動
確定性執(zhí)行:FreeRTOS在專用CPU上運行
資源隔離:無意外的內(nèi)存或設(shè)備訪問
受控進程間通信(IPC):僅通過定義的通道進行通信
為評估虛擬化開銷,分別對原生 FreeRTOS 執(zhí)行環(huán)境和在 Bao 上運行的 FreeRTOS 進行了中斷延遲測量。
| 配置 | 平均延遲 | WCET 延遲 |
| 原生 FreeRTOS(裸機) | 216.5 ns | 230 ns |
| Bao 平臺上的 FreeRTOS | 503.3 ns | 520 ns |
結(jié)果表明,Bao 在保持確定性執(zhí)行特性的同時,引入的額外延遲極小。
還可以采用直接中斷注入和緩存分區(qū)(緩存著色)等額外優(yōu)化技術(shù),以進一步降低混合關(guān)鍵性部署中的干擾效應(yīng)。OSYX 支持根據(jù)應(yīng)用需求對這些技術(shù)進行評估和集成。
有關(guān)靜態(tài)分區(qū)和混合關(guān)鍵度系統(tǒng)的更深入分析,請參閱: 深入解析基于 Arm 的混合關(guān)鍵度系統(tǒng)中的靜態(tài)分區(qū) Hypervisor
進一步探索:
修改分區(qū)配置(CPU、內(nèi)存、設(shè)備)
集成特定于應(yīng)用程序的工作負載
在實際條件下評估延遲和抖動
若需最簡入門方案:
https://github.com/bao-project/bao-helloworld
Bao 支持的其他配置包括:
多個 Linux 虛擬機(包括 Android 虛擬機)
Zephyr 虛擬機
裸機分區(qū)
虛擬機之間的 VirtIO 設(shè)備共享
通過緩存著色實現(xiàn)緩存分區(qū)
本演示展示了如何通過 Bao 實現(xiàn)靜態(tài)分區(qū),從而在現(xiàn)代嵌入式平臺上對混合工作負載進行可預(yù)測且隔離的執(zhí)行。
通過結(jié)合:
用于實現(xiàn)高級功能的 Torizon OS
FreeRTOS 用于實時控制
Bao 實現(xiàn)嚴格分區(qū)
開發(fā)人員可以在保持明確隔離邊界和確定性行為的同時,實現(xiàn)系統(tǒng)整合。
免責聲明:此集成方案由 OSYX 開發(fā)和維護,并非 Toradex 的官方產(chǎn)品。
Bao 項目
Bao 虛擬機監(jiān)控程序
Bao 演示
Bao Hello World
OSYX
提交
基于 NXP i.MX8M Plus 測試 Zephyr RTOS
Verdin iMX8M Plus 實現(xiàn)上電亮屏的無閃爍啟動
基于 Verdin i.MX95 的單目深度估計
從0開始點亮DSI屏幕
基于 NXP iMX8MP ARM平臺安裝測試 Openclaw


投訴建議