保姆級(jí)教程 | i.MX 93開發(fā)板適配Zephyr RTOS全解析

原創(chuàng) 作者 飛凌嵌入式 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í)踐

基于飛凌嵌入式OK-MX9352-C開發(fā)板,快速上手下一代嵌入式實(shí)時(shí)操作系統(tǒng)

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開發(fā)板實(shí)物圖

飛凌嵌入式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 文件

安裝步驟:

  1. 安裝VS Code編輯器
  2. 在擴(kuò)展市場(chǎng)搜索并安裝MCUXpresso for VS Code
  3. 按插件引導(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à)值在于:

  1. 一套驅(qū)動(dòng)API,覆蓋所有平臺(tái)——更換SoC只改overlay,不改應(yīng)用代碼
  2. 設(shè)備樹驅(qū)動(dòng)開發(fā)——硬件配置與軟件邏輯清晰分離
  3. 完整的測(cè)試基礎(chǔ)設(shè)施——ztest+testcase.yaml支持 CI/CD集成
  4. 安全與低功耗原生設(shè)計(jì)——不是后期補(bǔ)丁,是系統(tǒng)基礎(chǔ)設(shè)施
  5. 活躍的上游社區(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é)人

華南區(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)。

    了解詳情
    FETMX6ULL-C核心板
  • 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)品中。

    了解詳情
    FET-MX9352-C核心板
  • 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-MX9352-C開發(fā)板
  • 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)新潛能! 了解詳情
    OK-MX9596-C開發(fā)板
  • 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核心板,選擇飛凌。

    了解詳情
    FET-MX9596-C核心板

推薦閱讀 換一批 換一批