工控網(wǎng)首頁
>

應(yīng)用設(shè)計

>

Toradex Verdin iMX8M Plus 上使用 Bao Hypervisor

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í)行。

Bao Hypervisor On Verdin IMX8 Plus
為何要為混合關(guān)鍵性系統(tǒng)采用靜態(tài)分區(qū)?

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

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

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

  • 無動態(tài)內(nèi)存管理

  • 關(guān)鍵路徑中不進行設(shè)備虛擬

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

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

  • 機器人技術(shù):結(jié)合 ROS 2 或更高層協(xié)議棧的實時控制

  • 醫(yī)療系統(tǒng):安全關(guān)鍵型監(jiān)測與用戶界面的分離

  • 汽車領(lǐng)域:控制域與車載信息娛樂域之間的隔離

  • 其他混合關(guān)鍵性領(lǐng)域:航空電子、國防、鐵路和能源系統(tǒng)

什么是 Bao hypervisor?

Bao 是一款輕量級、開源的靜態(tài)分區(qū) hypervisor,旨在實現(xiàn)強隔離和可預(yù)測的執(zhí)行。它支持 Arm(AArch64/AArch32)、RISC-V 及其他嵌入式架構(gòu),并采用 Apache 2.0 許可證發(fā)布。

Bao 采用靜態(tài)分區(qū)架構(gòu),并遵循從零開始的極簡設(shè)計:
  • 其核心分區(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ù)。

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

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)工作。

誰應(yīng)該評估此方案?
此配置適用于以下工程師:
  • 需要在單個 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 演示代碼庫中找到。

系統(tǒng)架構(gòu)
系統(tǒng)分為兩個相互隔離的虛擬機:
  • 虛擬機 1(Torizon OS):Linux、容器、網(wǎng)絡(luò)

  • 虛擬機 2(FreeRTOS):具有專用資源的實時任務(wù)

通過共享內(nèi)存區(qū)域和中斷機制,實現(xiàn)兩者之間的受控通信。

Torizon Architecture
資源劃分

以下配置定義了由 Bao 強制執(zhí)行的靜態(tài)分配:

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

這種資源劃分可確保:

  • 為 FreeRTOS 提供專用的 CPU 時間

  • 虛擬機之間不存在設(shè)備爭用

  • 明確界定的通信邊界

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

系統(tǒng)啟動過程如下:

  1. 開發(fā)板通電

  2. 固件初始化硬件

  3. U-Boot 啟動

  4. U-Boot:

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

    2. 跳轉(zhuǎn)至 Bao 的入口點

  5. Bao:

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

    2. 為每個虛擬機分配內(nèi)存區(qū)域、設(shè)備和中斷

    3. 共享內(nèi)存區(qū)域和進程間通信(IPC)通道

    4. 將控制權(quán)移交給虛擬機

    5. 初始化 CPU、內(nèi)存管理子系統(tǒng)和控制臺

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

此時:

  • FreeRTOS在CPU 3上啟動并開始執(zhí)行任務(wù)

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

  • 兩個系統(tǒng)并行運行,且不存在調(diào)度交互

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

虛擬機之間的通信通過以下方式實現(xiàn):

  • 一個 64 KB 的共享內(nèi)存區(qū)域

  • 門鈴中斷機制

在 Linux 側(cè),這表現(xiàn)為:
/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)受控通信。

構(gòu)建與設(shè)置

該演示程序可在 Bao 演示代碼庫中獲?。?/p>

  • https://github.com/bao-project/bao-demos

  • 平臺:imx8mp-verdin

  • 演示項目:torizonos+freertos

構(gòu)建步驟
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 ns230 ns
Bao 平臺上的 FreeRTOS503.3 ns520 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

后續(xù)步驟

進一步探索:

  • 修改分區(qū)配置(CPU、內(nèi)存、設(shè)備)

  • 集成特定于應(yīng)用程序的工作負載

  • 在實際條件下評估延遲和抖動

若需最簡入門方案:

  • https://github.com/bao-project/bao-helloworld

Bao 支持的其他配置包括:

  • 多個 Linux 虛擬機(包括 Android 虛擬機)

  • Zephyr 虛擬機

  • 裸機分區(qū)

  • 虛擬機之間的 VirtIO 設(shè)備共享

  • 通過緩存著色實現(xiàn)緩存分區(qū)

結(jié)論

本演示展示了如何通過 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)品。

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