發佈嵌入式軟體不只是「能編譯就好」。真正重要的是安全性、資安防護,以及是否符合規範。
在產品上線後才出現的 bug 會消耗工程時間、降低客戶信任;漏洞則會讓連網裝置暴露在風險中。而在受規範的市場中,如果未通過 MISRA 或 CERT 的檢查,產品可能無法順利上市。越早找出問題,修復成本就越低、風險也越小。
這就是靜態程式碼分析(Static Code Analysis, SCA)能幫上忙的地方:在最早期就找出缺陷與不符合規範的程式碼,讓修復成本降至最低。
在 Zephyr 裡,你可以直接把 SCA 整合進 build 流程,不需要額外繞路或客製化工具鏈。
靜態分析整合在 Zephyr 的 west 流程中
對嵌入式團隊來說,一個常見痛點就是要把分析工具硬塞進原本沒為它設計的 build 流程。Zephyr 解決了這個問題,你可以直接把靜態分析工具掛接在 west 的建置系統裡,不需要複雜的 script,也避免脆弱的 workaround。
要選擇分析工具,只需要設定 ZEPHYR_SCA_VARIANT build 參數。
你可以用 CMake 參數或用環境變數來指定:
west build -b <board_name> <application_path> -- -DZEPHYR_SCA_VARIANT=<tool>
原生支援 IAR C-STAT
如果你的專案需要證明程式碼品質並符合安全/資安相關標準,Zephyr 現在提供 IAR C-STAT 的原生支援,讓這件事比以往更輕鬆。C-STAT 是 IAR 平台的一部分。
C-STAT 是一套完整的 C/C++ 靜態分析工具,可依多種程式碼規範與既有漏洞清單檢查你的程式碼,包括:
- MISRA C / MISRA C++
- CERT C / CERT C++
- CWE 與資安最佳實務
- 可靠性與可維護性檢查
在 Zephyr 啟用 C-STAT 很簡單。只要照原本方式 build,再額外加一個參數指定 IAR C-STAT 為 Zephyr 的 SCA 工具即可:
west build -b stm32f429ii_aca samples/basic/blinky -- -DZEPHYR_SCA_VARIANT=iar_c_stat
彈性調整分析設定
不同團隊的需求從嚴格的安全合規,到偏向輕量的資安檢查都有。C-STAT 提供高彈性設定,可以依照團隊流程調整分析方式:
- CSTAT_RULESET — 選擇規範組合(如:all、cert、misrac2012、misrac++2008、stdchecks、security)
- CSTAT_ANALYZE_THREADS — 分析時使用的 thread 數量
- CSTAT_ANALYZE_OPTS — 額外分析器參數(如:–timeout=900; –deterministic; –fpe)
- CSTAT_DB — SQLite 資料庫路徑
- CSTAT_CLEANUP — 分析前是否清理資料庫
例如要同時啟用 MISRA C:2012 與 CERT 檢查,可使用:
west build -b stm32f429ii_aca samples/basic/blinky -- \
-DZEPHYR_SCA_VARIANT=iar_c_stat \
-DCSTAT_RULESET=misrac2012,cert
為什麼團隊選擇在 Zephyr 中採用 SCA
靜態分析不只是在做合規檢查,而是為了更快打造品質更好的軟體。在 Zephyr build 流程中直接整合 SCA 可以讓團隊:
- 更早抓到缺陷 — 像是 null dereference、buffer overrun、未初始化的資料等等
- 更快符合標準 — MISRA、CERT 檢查直接在 build 中跑
- 讓 Code Review 更專注 — 工具自動標示違規項目,工程師能專注在設計面
- 建立信心 — 提供持續性的程式碼健康度證明,對稽核與客戶都更有說服力
總結
透過 Zephyr 的 SCA 基礎架構與原生 IAR C-STAT 支援,你可以在每一次 build 過程中執行安全、可靠性與合規檢查,不論是在本地、CI/CD pipeline,或是在 container 中運作。這能讓團隊更早發現問題、減少後期風險,並有自信地交付更安全、更乾淨、符合標準的程式碼。
如需更多資訊,可參考 Zephyr 官方的 IAR C-STAT 靜態程式碼分析文件。您也可以查看 IAR 的 Code Quality & Compliance 解決方案以取得更多資源。
本文由IAR提供