工控網首頁
>

應用設計

>

Toradex Verdin iMX8M Plus 上使用 Bao Hypervisor

Toradex Verdin iMX8M Plus 上使用 Bao Hypervisor

本文演示了如何在 Toradex Verdin iMX8M Plus 平臺上,使用 Bao 靜態分區 hypervisor 運行 Torizon OS 和 FreeRTOS。

本演示針對需要將 Linux 環境與同一 SoC 上的確定性實時執行相結合的混合關鍵性嵌入式系統。它展示了如何在 Linux 和 FreeRTOS 之間對 CPU、內存區域和外設進行靜態分區,同時保持隔離性和可預測的執行。

Bao Hypervisor On Verdin IMX8 Plus
為何要為混合關鍵性系統采用靜態分區?

現代嵌入式 SoC 能夠在單個芯片上整合多種工作負載,從而降低物料清單 (BOM) 成本、功耗并縮小電路板面積。這使得在同一設備上同時運行用于互聯、用戶界面和協調任務的富操作系統,以及硬實時控制變得極具吸引力。但在實際應用中,安全地整合這些工作負載仍然是一項挑戰。

通用型 hypervisor 依賴于調度機制和共享資源。這會引入時序干擾、增加抖動并削弱隔離邊界,這對實時或安全關鍵型組件而言尤為棘手。

靜態分區 hypervisor 則采取了不同的方法。在系統啟動時,CPU、內存區域和外設會被分配給相互隔離的虛擬機(VM)。每臺虛擬機都獨占其資源:
  • 無 CPU 超額分配或調度器干擾

  • 無動態內存管理

  • 關鍵路徑中不進行設備虛擬

初始化完成后,hypervisor 基本處于被動狀態,僅模擬關鍵的共享組件(例如中斷控制器)和固件服務。

該模型通常應用于:
  • 工業自動化:伴隨 Linux HMI 運行確定性控制回路

  • 機器人技術:結合 ROS 2 或更高層協議棧的實時控制

  • 醫療系統:安全關鍵型監測與用戶界面的分離

  • 汽車領域:控制域與車載信息娛樂域之間的隔離

  • 其他混合關鍵性領域:航空電子、國防、鐵路和能源系統

什么是 Bao hypervisor?

Bao 是一款輕量級、開源的靜態分區 hypervisor,旨在實現強隔離和可預測的執行。它支持 Arm(AArch64/AArch32)、RISC-V 及其他嵌入式架構,并采用 Apache 2.0 許可證發布。

Bao 采用靜態分區架構,并遵循從零開始的極簡設計:
  • 其核心分區模型中不包含運行時調度器

  • 不進行運行時內存分配 

  • 不包含完整的設備仿真層

取而代之的是,Bao 依賴于 Stage-2 MMU/MPU 等硬件機制來實現隔離。設備在配置時被專屬分配給單個虛擬機,中斷直接路由至其對應的虛擬機,從而避免了大部分虛擬化開銷。

某些用例需要對以太網或存儲設備等硬件資源進行受控共享。針對此類場景,Bao 支持基于 VirtIO 的通信:由一個虛擬機獨占物理設備,并通過共享內存的前端/后端接口向其他虛擬機提供共享訪問權限。

針對更動態配置的可選調度支持目前正在開發中,預計將于 2026 年第三季度左右推出。

Bao 由社區驅動的 Bao 項目負責開發和維護。 OSYX 是 Bao 項目背后的面向行業的實體,為混合關鍵性設計提供商業支持、平臺調試、系統集成和長期維護服務。

演示概述:Verdin iMX8M Plus 上運行 Torizon OS + FreeRTOS

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):具有專用資源的實時任務

通過共享內存區域和中斷機制,實現兩者之間的受控通信。

Torizon Architecture
資源劃分

以下配置定義了由 Bao 強制執行的靜態分配:

資源虛擬機  1(Torizon OS)虛擬機 2(FreeRTOS)
CPU 核心0、1、23
RAM 基址0x40200000(物理)0x0(虛擬)
RAM 大小1 GB128 MB
設備除 UART3 以外的所有設備UART3 (0x30880000)
IPC 共享內存基址0xf00000000xf0000000
共享內存大小64 KB64 KB(同一區域)
IPC中斷6152
網絡是(通過以太網 DHCP)
控制臺SSHUART3(115200波特)

這種資源劃分可確保:

  • 為 FreeRTOS 提供專用的 CPU 時間

  • 虛擬機之間不存在設備爭用

  • 明確界定的通信邊界

Bao 虛擬機管理程序的啟動序列是如何工作的?

系統啟動過程如下:

  1. 開發板通電

  2. 固件初始化硬件

  3. U-Boot 啟動

  4. U-Boot:

    1. 從SD卡將bao.bin加載到RAM中

    2. 跳轉至 Bao 的入口點

  5. Bao:

    1. 為每個虛擬機生成第二階段頁表

    2. 為每個虛擬機分配內存區域、設備和中斷

    3. 共享內存區域和進程間通信(IPC)通道

    4. 將控制權移交給虛擬機

    5. 初始化 CPU、內存管理子系統和控制臺

    6. 并行進行虛擬機初始化:

此時:

  • FreeRTOS在CPU 3上啟動并開始執行任務

  • Torizon OS 在 CPU 0–2 上啟動,并初始化 Linux、Docker 和 SSH

  • 兩個系統并行運行,且不存在調度交互

Bao Boot Flow
Linux 和 FreeRTOS 虛擬機之間如何通信?

虛擬機之間的通信通過以下方式實現:

  • 一個 64 KB 的共享內存區域

  • 門鈴中斷機制

在 Linux 側,這表現為:
/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 ns230 ns
Bao 平臺上的 FreeRTOS503.3 ns520 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 的官方產品。

常見問題
什么是靜態分區 Hypervisor?
Linux 和實時工作負載能否在同一 SoC 上同時運行?
Bao 與 Xen 或 KVM 有何不同?
Bao 與傳統的 AMP Linux + RTOS 配置有何不同?
Bao 如何在虛擬機之間共享設備?
此演示是否已具備生產就緒性?
鏈接
  • 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