保姆級(jí)教程 | i.MX 93開發(fā)板適配Zephyr RTOS全解析
飛凌嵌入式
2026-04-28 11:25:00
i.MX 93開發(fā)板
Zephyr RTOS
Zephyr RTOS在i.MX 9352 M33核上的PWM驅(qū)動(dòng)驗(yàn)證實(shí)踐
Zephyr是Linux基金會(huì)旗下開源實(shí)時(shí)操作系統(tǒng)(RTOS),由Intel、NXP、Google、Qualcomm等頭部廠商持續(xù)支持,現(xiàn)已迭代至v4.x。它支持700余款開發(fā)板與主流處理器架構(gòu)。
Zephyr 不是傳統(tǒng) RTOS 的替代品,而是將云計(jì)算時(shí)代的開發(fā)理念引入資源受限的嵌入式世界——解決碎片化、安全性和開發(fā)效率問(wèn)題的下一代基礎(chǔ)軟件,它的設(shè)計(jì)理念是:模塊化、可裁剪、開箱即用。
i.MX 9352作為NXP推出的輕量級(jí)邊緣AI處理器,集成2個(gè)Cortex-A55核和1個(gè)Cortex-M33實(shí)時(shí)核,其架構(gòu)設(shè)計(jì)充分體現(xiàn)了對(duì)實(shí)時(shí)性與復(fù)雜任務(wù)處理能力的兼顧。為了幫助開發(fā)者充分利用i.MX 9352 M33核的實(shí)時(shí)能力,結(jié)合VSCode+MCUX擴(kuò)展的完整開發(fā)體驗(yàn),本文將介紹如何在Zephyr中完成M33核PWM驅(qū)動(dòng)的驗(yàn)證,幫助讀者快速上手 Zephyr 在工業(yè)級(jí) SoC 上的移植與測(cè)試實(shí)踐。
演示平臺(tái):飛凌嵌入式OK-MX9352-C開發(fā)板
飛凌嵌入式OK-MX9352-C工業(yè)級(jí)開發(fā)板
1 為什么選擇Zephyr?
1.1 相比傳統(tǒng)RTOS,Zephyr的核心優(yōu)勢(shì)
| 特性 | Zephyr | 傳統(tǒng) RTOS |
|---|---|---|
| 硬件描述 | 設(shè)備樹(DTS),與代碼解耦 | 頭文件 / 宏定義硬編碼 |
| 多核支持 | 原生支持 AMP/SMP | 需自行實(shí)現(xiàn) |
| 驅(qū)動(dòng)框架 | 統(tǒng)一 API,可移植 | 廠商私有 HAL |
| 測(cè)試框架 | 內(nèi)置 ztest和twister | 通常依賴外部框架 |
| 社區(qū)活躍度 | 700+ 板卡,每月數(shù)百次提交 | 多數(shù)依賴廠商維護(hù) |
| 工具鏈 | west 元工具,VSCode 一鍵集成 | 各廠商獨(dú)立工具 |
從"寫代碼配置硬件"到"聲明硬件關(guān)系"
傳統(tǒng)痛點(diǎn):每換一個(gè)MCU引腳或外設(shè),就要重寫驅(qū)動(dòng)、調(diào)寄存器、改編譯選項(xiàng)。Zephyr以Devicetree硬件藍(lán)圖(.dts)描述整個(gè)硬件布局,更換硬件只需修改藍(lán)圖,核心業(yè)務(wù)代碼幾乎不動(dòng);搭配Kconfig圖形化配置工具,可像 Linux 內(nèi)核一樣靈活裁剪系統(tǒng)功能。
從"功能實(shí)現(xiàn)"到"安全與功耗原生設(shè)計(jì)"
傳統(tǒng)痛點(diǎn):傳統(tǒng)RTOS的安全、低功耗能力多為后期追加功能,漏洞多、優(yōu)化難度大。Zephyr從底層設(shè)計(jì)就以安全為核心,覆蓋安全啟動(dòng)鏈、MPU內(nèi)存保護(hù)、加密服務(wù)等全鏈路安全能力;基于事件驅(qū)動(dòng)的電源管理框架,可實(shí)現(xiàn)微安級(jí)精準(zhǔn)功耗控制。
從"單一固件"到"可移植的軟件資產(chǎn)"
傳統(tǒng)痛點(diǎn):A公司芯片寫的驅(qū)動(dòng),在B公司芯片上幾乎要重寫。Zephyr 統(tǒng)一設(shè)備模型,驅(qū)動(dòng)一次開發(fā)可跨廠商芯片復(fù)用;藍(lán)牙、Wi-Fi、Matter等協(xié)議棧即插即用,與硬件底層隔離,讓核心代碼成為可復(fù)用、可迭代的軟件資產(chǎn)。
1.2 Zephyr vs FreeRTOS
Zephyr和FreeRTOS都屬于實(shí)時(shí)操作系統(tǒng),且都面向物聯(lián)網(wǎng)場(chǎng)景深化布局,但二者在軟件架構(gòu)、內(nèi)核設(shè)計(jì)上有明顯差異。
核心設(shè)計(jì)哲學(xué)
| FreeRTOS | Zephyr | |
|---|---|---|
| 核心理念 | 微內(nèi)核調(diào)度器,提供核心實(shí)時(shí)調(diào)度功能 | 完整集成式操作系統(tǒng)平臺(tái) |
| 系統(tǒng)定位 | "調(diào)度器核心" + 第三方庫(kù)集成模式 | "開箱即用"的完整RTOS解決方案 |
| 設(shè)計(jì)目標(biāo) | 極致輕量、高可移植性 | 功能完整、高度可配置、標(biāo)準(zhǔn)化 |
| 構(gòu)建理念 | 提供構(gòu)建塊,用戶自行組合 | 提供完整框架,用戶按需裁剪 |
| 適用規(guī)模 | 小到中等規(guī)模項(xiàng)目 | 中小到大型復(fù)雜系統(tǒng) |
系統(tǒng)架構(gòu)
| FreeRTOS | Zephyr | |
|---|---|---|
| 調(diào)度策略 | 定優(yōu)先級(jí)搶占式調(diào)度 | 搶占式 + 協(xié)作式 + 時(shí)間片輪轉(zhuǎn),動(dòng)態(tài)優(yōu)先級(jí) |
| 內(nèi)存管理 | 動(dòng)態(tài)分配為主(pvPortMalloc),多種heap方案 | 默認(rèn)靜態(tài)分配,支持slab/buddy系統(tǒng),強(qiáng)調(diào)確定性與防碎片 |
| 硬件抽象 | 通過(guò) port 層手動(dòng)移植(需寫匯編上下文切換) | 基于設(shè)備樹(Device Tree)自動(dòng)配置外設(shè) |
| 多核支持 | 需SMP分支或第三方移植 | 原生支持SMP(對(duì)稱多處理)和AMP |
| 內(nèi)存保護(hù) | 有限MPU支持(FreeRTOS-MPU) | 完整MPU/MMU支持,用戶/內(nèi)核態(tài)分離 |
| 中斷處理 | 中斷服務(wù)例程(ISR) | 中斷服務(wù)例程+中斷下半部(軟中斷) |
| 同步機(jī)制 | 隊(duì)列、信號(hào)量、互斥量、事件組 | 信號(hào)量、互斥量、條件變量、事件標(biāo)志、消息隊(duì)列、郵箱、管道 |
協(xié)議棧與功能
| FreeRTOS | Zephyr | |
|---|---|---|
| 網(wǎng)絡(luò)協(xié)議 | 需FreeRTOS+TCP(額外組件) | 內(nèi)置IPv4/IPv6、CoAP、MQTT、LwM2M、HTTP |
| 無(wú)線協(xié)議 | 需單獨(dú)集成 | 原生支持BLE 5.4、Thread、Wi-Fi、LoRa、IEEE 802.15.4、Zigbee |
| 安全協(xié)議 | 需集成mbed TLS或AWS IoT SDK | 原生mbedTLS集成,硬件加密加速 |
| 文件系統(tǒng) | 需FatFS或LittleFS集成 | 原生USB設(shè)備/主機(jī)棧 |
| CAN總線 | 無(wú)標(biāo)準(zhǔn)框架,需自行實(shí)現(xiàn) | 原生CAN Socket API(類Linux SocketCAN) |
| USB協(xié)議棧 | 依賴廠商SDK或第三方 | 原生USB設(shè)備/主機(jī)棧 |
| OTA更新 | 依賴AWS IoT Jobs或自研方案 | 內(nèi)置MCUboot + A/B分區(qū)OTA |
資源占用(Cortex-M4最小核無(wú)外設(shè))
| FreeRTOS | Zephyr | |
|---|---|---|
| 最小 Flash | 5–10 KB Flash | 32–64 KB Flash |
| 最小 RAM | 2–4 KB RAM | 8–16 KB RAM |
| 上下文切換時(shí)間 | ~0.8 μs | ~1.2 μs |
開發(fā)環(huán)境與調(diào)試
| FreeRTOS | Zephyr | |
|---|---|---|
| 系統(tǒng)構(gòu)建 | Makefile / IDE工程(如Keil、IAR) | vscode,CMake + West(命令行工具)高度標(biāo)準(zhǔn)化 |
| 配置方式 | FreeRTOSConfig.h 頭文件宏定義 | Kconfig + Device Tree(圖形化menuconfig支持) |
| 調(diào)試技術(shù) | 依靠基礎(chǔ)日志和IDE調(diào)試器 | 內(nèi)置 LOG 子系統(tǒng)、GDB支持、QEMU模擬器 |
| 學(xué)習(xí)曲線 | 低(API簡(jiǎn)潔,文檔豐富) | 較高(west元工具,Devicetree、Kconfig、CMake 復(fù)雜度) |
根據(jù)上述對(duì)比,發(fā)現(xiàn)Zephyr也有以下短板:
- 學(xué)習(xí)曲線陡峭
- 資源占用更大
- 構(gòu)建系統(tǒng)復(fù)雜
- 上下文切換性能不如 FreeRTOS
從對(duì)比能看出,Zephyr的短板主要集中在入門階段和極致資源受限場(chǎng)景,一旦團(tuán)隊(duì)熟悉開發(fā)流程、硬件資源滿足要求,這些劣勢(shì)會(huì)快速弱化;而它的可移植性、安全能力、生態(tài)優(yōu)勢(shì),會(huì)隨著項(xiàng)目復(fù)雜度提升愈發(fā)明顯。
1.3 Zephyr 應(yīng)用場(chǎng)景
醫(yī)療與可穿戴設(shè)備
Zephyr的確定性實(shí)時(shí)響應(yīng)和低功耗特性,可支撐連續(xù)血糖監(jiān)測(cè)、心臟監(jiān)護(hù)等醫(yī)療級(jí)應(yīng)用,滿足量產(chǎn)醫(yī)療設(shè)備的技術(shù)要求。
工業(yè)自動(dòng)化
支持10BASE-T1S等工業(yè)以太網(wǎng)協(xié)議,適配工廠自動(dòng)化、過(guò)程控制場(chǎng)景,OSADL已為Zephyr建立工業(yè)領(lǐng)域量化性能基準(zhǔn)。
智能家居與消費(fèi)電子
從Matter協(xié)議支持到藍(lán)牙5.4完整協(xié)議棧,Zephyr正成為智能家居生態(tài)核心支撐。Arduino VENTUNO Q平臺(tái)已采用 Zephyr確保時(shí)間關(guān)鍵型任務(wù)的確定性執(zhí)行。
汽車電子
隨著汽車電子架構(gòu)向集中式演進(jìn),Zephyr的模塊化設(shè)計(jì)和內(nèi)存保護(hù)機(jī)制滿足了汽車功能安全要求,是車載域控制器的理想選擇。
2 開發(fā)環(huán)境搭建(VSCode+MCUX)
2.1 工具準(zhǔn)備
推薦使用NXP MCUXpresso for VS Code擴(kuò)展,插件已內(nèi)置核心能力:
- CMakePresets.json一鍵構(gòu)建
- SEGGER J-Link / LinkServer調(diào)試支持
- 設(shè)備樹可視化可直接預(yù)覽 .overlay 文件
安裝步驟:
- 安裝VS Code編輯器
- 在擴(kuò)展市場(chǎng)搜索并安裝MCUXpresso for VS Code
- 按插件引導(dǎo)安裝west、Zephyr SDK、arm-none-eabi-gcc工具鏈
2.2 工程結(jié)構(gòu)
使用CMakePresets.json管理構(gòu)建配置,每個(gè)應(yīng)用統(tǒng)一如下結(jié)構(gòu):
my_app/
├── CMakeLists.txt
├── CMakePresets.json ← 指定 BOARD、構(gòu)建目錄
├── prj.conf ← Kconfig 全局配置
├── boards/
│ ├── imx93_evk_mimx9352_m33.overlay ← 板級(jí) DTS 擴(kuò)展
│ └── imx93_evk_mimx9352_m33.conf ← 板級(jí) Kconfig 覆蓋
└── src/
└── main.c
CMakePresets.json示例:
{
"configurePresets": [
{
"name": "debug",
"cacheVariables": {
"BOARD": "imx93_evk/mimx9352/m33",
"CMAKE_BUILD_TYPE": "debug"
}
}
]
}
在 VSCode 中,點(diǎn)擊底部狀態(tài)欄的 Build 按鈕即可完成編譯,無(wú)需手動(dòng)敲命令。
3 設(shè)備樹Overlay:Zephyr的硬件描述核心
Zephyr通過(guò)Devicetree描述硬件,板級(jí)差異通過(guò) .overlay文件疊加,無(wú)需修改官方主DTSI文件,這也是 Zephyr 高可移植性的核心設(shè)計(jì)。
RTC 外設(shè)的 Overlay 描述
RTC(實(shí)時(shí)時(shí)鐘)是工業(yè)與消費(fèi)電子產(chǎn)品中必不可少的外設(shè)。在Zephyr中,外部RTC芯片通過(guò)I2C總線掛載,并在 .overlay文件中完整描述其連接關(guān)系,應(yīng)用層只需調(diào)用統(tǒng)一的RTC API,無(wú)需關(guān)心底層硬件差異。
以 i.MX93 EVK 接入 EPSON RX8010 為例,overlay 需要做兩件事:?jiǎn)⒂?I2C 控制器并添加 RTC 子節(jié)點(diǎn),同時(shí)通過(guò) aliases 讓上層應(yīng)用找到該設(shè)備:
/* boards/imx93_evk_mimx9352_m33.overlay */
&lpi2c3 {
status = "okay";
clock-frequency =; /* 400 kHz */
pinctrl-0 = <&i2c3_default>;
pinctrl-names = "default";
rx8010: rx8010@32 {
compatible = "epson,rx8010"; /* 匹配驅(qū)動(dòng) binding */
reg =; /* I2C 設(shè)備地址 */
status = "okay";
};
};
/ {
aliases {
rtc = &rx8010; /* 應(yīng)用通過(guò) "rtc" 別名訪問(wèn) */
};
};
應(yīng)用代碼中只需:
const struct device *rtc = DEVICE_DT_GET(DT_ALIAS(rtc));
struct rtc_time tm = { .tm_year = 125, .tm_mon = 3, .tm_mday = 20 };
rtc_set_time(rtc, &tm);
rtc_get_time(rtc, &tm);
可移植性體現(xiàn):若將RX8010更換為其他Zephyr支持的 RTC芯片(如DS3231、PCF8563),只需修改overlay 中的 compatible和reg,應(yīng)用代碼零改動(dòng)。
4 驅(qū)動(dòng)驗(yàn)證實(shí)踐
本節(jié)展示在i.MX 93開發(fā)板的M33核上已完成驗(yàn)證的PWM驅(qū)動(dòng)樣例。
樣例:pwm_api—使用TPM2 控制器輸出PWM信號(hào)
我們通過(guò)Import Example from Repository導(dǎo)入pwm_api項(xiàng)目后
overlay 只需聲明別名:
/* boards/imx93_evk_mimx9352_m33.overlay */
/ {
aliases {
pwm-test = &tpm2;
};
};
Kconfig 配置:
CONFIG_PWM=y
測(cè)試通過(guò) pwm_set_cycles() / pwm_set()設(shè)置占空比,可用示波器驗(yàn)證輸出波形。i.MX93的TP(Timer/PWM Module)直接映射到Zephyr nxp,kinetis-tpm驅(qū)動(dòng),無(wú)需任何自定義代碼。
5 Zephyr 開發(fā)中的常用調(diào)試技巧
5.1 Kconfig配置檢查
Vscode中project文件中 debug/zephyr/.config 為項(xiàng)目最終合并后的config內(nèi)容。
5.2 設(shè)備樹最終輸出檢查
Vscode中project文件中 debug/zephyr/zephyr.dts 為項(xiàng)目最終合并后的dts內(nèi)容。這是排查overlay合并是否生效的最直接方式。
5.3 日志級(jí)別
CONFIG_I2C_LOG_LEVEL_DBG=y # 開啟 I2C 驅(qū)動(dòng)調(diào)試日志
5.4 ztest 測(cè)試框架
所有驅(qū)動(dòng)樣例均使用ztest框架,運(yùn)行后通過(guò)串口輸出結(jié)果。以PWM測(cè)試為例,燒錄后串口輸出如下:
*** Booting Zephyr OS build v4.1.0 *** Running TESTSUITE pwm_basic =================================================================== START - test_pwm_nsec [PWM]: 0, [period]: 2000000, [pulse]: 1000000 [PWM]: 0, [period]: 2000000, [pulse]: 2000000 [PWM]: 0, [period]: 2000000, [pulse]: 0 PASS - test_pwm_nsec in 3005 ms START - test_pwm_cycle [PWM]: 0, [period]: 64000, [pulse]: 32000 [PWM]: 0, [period]: 64000, [pulse]: 64000 [PWM]: 0, [period]: 64000, [pulse]: 0 PASS - test_pwm_cycle in 3003 ms =================================================================== TESTSUITE pwm_basic succeeded
輸出說(shuō)明:
- test_pwm_nsec:以納秒為單位依次設(shè)置 50% 占空比(1.65V)、100%占空比(3.3V)、0%占空比(0V),每步保持1秒
- test_pwm_cycle:以cycle為單位重復(fù)上述三種占空比驗(yàn)證,period=64000cycle,pulse依次為32000/ 64000/0
- 每條[PWM]行對(duì)應(yīng)一次 pwm_set()/pwm_set_cycles()調(diào)用,可用示波器或萬(wàn)用表在TPM2輸出引腳上驗(yàn)證實(shí)際電壓
總結(jié)
通過(guò)本次i.MX93 M33核的Zephyr移植實(shí)踐,我們驗(yàn)證了:Zephyr原生的應(yīng)用pwm_api在i.MX 93 M33核的支持過(guò)程。
Zephyr 的核心價(jià)值在于:
- 一套驅(qū)動(dòng)API,覆蓋所有平臺(tái)——更換SoC只改overlay,不改應(yīng)用代碼
- 設(shè)備樹驅(qū)動(dòng)開發(fā)——硬件配置與軟件邏輯清晰分離
- 完整的測(cè)試基礎(chǔ)設(shè)施——ztest+testcase.yaml支持 CI/CD集成
- 安全與低功耗原生設(shè)計(jì)——不是后期補(bǔ)丁,是系統(tǒng)基礎(chǔ)設(shè)施
- 活躍的上游社區(qū) —— 全球超1600名貢獻(xiàn)者,每周數(shù)百次代碼合并
飛凌嵌入式OK-MX9352-C開發(fā)板基于NXP i.MX93設(shè)計(jì)開發(fā),是一款高性能工業(yè)級(jí)硬件平臺(tái),與Zephyr RTOS適配性優(yōu)異、穩(wěn)定性出眾,借助Zephyr的工程化能力,開發(fā)者可在飛凌嵌入式OK-MX9352-C開發(fā)板上快速完成外設(shè)驅(qū)動(dòng)開發(fā)、系統(tǒng)移植與功能驗(yàn)證,大幅縮短工業(yè)產(chǎn)品的研發(fā)與量產(chǎn)周期。
對(duì)于嵌入式RTOS選型、工業(yè)級(jí)產(chǎn)品開發(fā)的團(tuán)隊(duì)而言,飛凌嵌入式OK-MX9352-C開發(fā)板+Zephyr RTOS是兼顧開發(fā)效率、系統(tǒng)安全與硬件可靠性的優(yōu)選方案。
咨詢立即獲得專屬報(bào)價(jià)
華北區(qū)負(fù)責(zé)人
華東區(qū)負(fù)責(zé)人
華南區(qū)負(fù)責(zé)人
中西區(qū)負(fù)責(zé)人
相關(guān)產(chǎn)品 >
-
FETMX6ULL-C核心板
FETMX6ULL-C核心板采用NXP?i.MX6ULL處理器開發(fā)設(shè)計(jì),是一款高性能Linux核心板,采用低功耗的ARM Cortex-A7架構(gòu),運(yùn)行速度高達(dá)800MHz。iMX6ULL核心板29*40mm? ,iMX6ULL這款處理器功能接口資源豐富,供貨周期長(zhǎng)。
了解詳情
-
FET-MX9352-C核心板
FET-MX9352-C核心板基于NXP i.MX9352處理器開發(fā)設(shè)計(jì), i.MX9352集成2個(gè)Cortex-A55核和1個(gè)Cortex-M33實(shí)時(shí)核,主頻達(dá)1.5GHz, 原生支持8路UART、2路Ethernet(含1路TSN)、2路USB 2.0、2路CAN-FD總線等常用接口。飛凌iMX93x系列在經(jīng)市場(chǎng)驗(yàn)證的 i.MX 6和i.MX 8基礎(chǔ)上進(jìn)行了升級(jí),集成NPU 可加速邊緣機(jī)器學(xué)習(xí)應(yīng)用,i.MX9352核心板體積小巧,便于嵌入到您的產(chǎn)品中。
了解詳情
-
OK-MX9352-C開發(fā)板
iMX9352是一款低功耗、低成本、高性能、通用性強(qiáng)的嵌入式開發(fā)板產(chǎn)品,iMX9352采用A核+M核多核異構(gòu)架構(gòu),兼具多任務(wù)處理與實(shí)時(shí)控制,0.5 TOPS Ethos U-65 microNPU,滿足邊緣AI需求,2路千兆網(wǎng)口,其中1路支持TSN,2通道MIPI-CSI攝像頭接口,引出處理器所有可引出功能,并確保信號(hào)和電源完整性,iMX9352高性能,低成本的解決方案
了解詳情
-
OK-MX9596-C開發(fā)板
iMX95系列處理器的強(qiáng)大功能,盡在iMX95開發(fā)板。這款i.MX9596開發(fā)板以高效能、高集成度為核心,集成了豐富的功能接口,讓您的產(chǎn)品評(píng)估和開發(fā)過(guò)程更加便捷。無(wú)論是進(jìn)行原型設(shè)計(jì)、功能驗(yàn)證還是性能測(cè)試,iMX95開發(fā)板都能滿足您的需求。其強(qiáng)大的計(jì)算能力和靈活的擴(kuò)展性,為您的產(chǎn)品帶來(lái)無(wú)限可能。立即體驗(yàn)iMX95開發(fā)板,釋放您的創(chuàng)新潛能! 了解詳情
-
FET-MX9596-C核心板
飛凌嵌入式推出基于NXP i.MX95的FET-MX95xx-C核心板,集成高性能核與實(shí)時(shí)、安全核,具備2TOPS算力NPU,支持4K編解碼和圖形加速,適用于邊緣計(jì)算、汽車、工業(yè)物聯(lián)網(wǎng)等領(lǐng)域。i.MX95核心板原生支持多種接口,開發(fā)板采用分體式設(shè)計(jì),方便用戶二次開發(fā)。飛凌作為NXP金牌伙伴,提供高性能、工業(yè)級(jí)嵌入式解決方案,助您產(chǎn)品快速上市,領(lǐng)先行業(yè)。選擇i.MX95核心板,選擇飛凌。
了解詳情

