最近,有接觸到Zephyr操作系統,在這之前我也沒怎么了解過,簡單了解了一下,發現其增長的勢頭還挺猛的。
下面我們一起來簡單認識認識Zephyr。
Zephyr 簡介
Zephyr RTOS是Linux基金會下的一個開源項目,以其高效、靈活、安全的特點,在實時操作系統領域嶄露頭角,成為物聯網設備開發的首選之一。基于Apache 2.0許可。
官網:https://www.zephyrproject.org/
代碼倉:https://github.com/zephyrproject-rtos/zephyr
1、Zephyr軟件架構:
Zephyr從下到上大致分為如下幾層:
硬件層:含了實際的硬件設備,如CPU、內存、外設等。這些硬件設備是操作系統運行的基礎和支撐。
硬件抽象層(HAL):提供了對底層硬件的抽象和封裝,使得操作系統內核和應用程序能夠以一種統一的方式訪問和控制硬件資源。這有助于提高代碼的可移植性和可重用性。
內核層:Zephyr內核是操作系統的核心部分,負責任務調度、內存管理、中斷處理等基本功能。Zephyr提供了兩種內核:微內核(microkernel)和超微內核(nanokernel),用戶可以根據具體需求選擇使用哪種內核或同時使用兩者。
服務層:提供了一系列系統級的服務,如文件系統、網絡協議棧、藍牙協議棧等。這些服務為應用層提供了必要的支持和接口,使得應用程序能夠更加方便地訪問和使用底層硬件資源。
應用層:包含用戶開發的各種應用程序。這些應用程序運行在Zephyr操作系統之上,利用操作系統提供的各種服務和接口實現具體功能。
2、Zephyr源碼目錄:
arch:包含和硬件體系結構相關的代碼,每種平臺占一個相應的目錄。這些目錄中存放了針對不同架構的移植文件,主要是針對不同的CPU進行適配,包括內核的源文件和頭文件(其中包含私有API)等。例如,對于ARM架構,可能會有arch/arm目錄,其中包含針對ARM CPU的適配代碼。
boards:存放板級代碼及相關的配置文件。開發板屬于SoC的子集,當我們選中一個開發板時,也就會自動確認其SoC的型號。此外,該目錄下還包含了板子的設備樹文件,用于描述板上可用資源。
cmake:包含構建Zephyr所需的額外構建腳本。Zephyr使用CMake作為構建系統,構建過程可分為配置階段和構建階段。
doc:系統文檔目錄,包含Zephyr的相關文檔和工具。
drivers:設備驅動目錄,每個不同的驅動占用一個子目錄。Zephyr為各種硬件設備提供了豐富的驅動程序。
dts:devicetree源文件目錄,用于描述特定板子的設備細節,如外設寄存器數量及寄存器地址。這些文件在構建過程中會被用來生成設備樹信息,供操作系統內核使用。
include:包含所有公共API的頭文件(除了在lib下定義的部分)。這些頭文件為開發者提供了訪問Zephyr內核和各種組件的接口。
kernel:與架構無關的內核代碼目錄,包含Zephyr操作系統的核心功能,如線程調度、內存管理等。
lib:庫代碼目錄,包括最小的標準C庫等。這些庫為Zephyr提供了基本的編程支持。
misc:不屬于任何其他頂級目錄的雜項代碼。
modules:提供特定芯片系列的一些外設配置選項。
samples:演示使用Zephyr特性的示例應用程序目錄。這些示例代碼有助于開發者快速上手Zephyr并理解其各種特性。
scripts:用于構建和測試Zephyr應用程序的各種程序和其他文件。
soc:SoC(System on Chip,片上系統)相關代碼和配置文件目錄。這些目錄中存放了針對不同芯片的外設配置和部分功能初始化代碼。
subsys:Zephyr子系統目錄,包括USB、網絡、文件系統及藍牙等子系統的代碼。這些子系統為Zephyr提供了豐富的功能和接口。
Zephyr 的特性
1、安全性
安全性是Zephyr RTOS的重要特性之一。它提供了內存保護、安全啟動和加密算法等安全功能,確保設備在面對潛在威脅時能夠保持安全。
2、豐富的連接能力
Zephyr內置高效的TCP/IP網絡棧,支持IPv4/IPv6,以及多種無線協議,如藍牙(BLE)、Wi-Fi等,滿足現代物聯網設備的各種連接需求。這種廣泛的連接能力使得Zephyr成為構建物聯網應用的核心操作系統之一。
3、統一的構建系統與設備樹支持
Zephyr提供了統一的構建系統和設備樹支持,簡化了跨平臺開發流程。
設備樹例子:
有Linux設備樹那味了?
zephyr的設備樹管理和Linux設備樹類似,都采用了樹狀結構來描述硬件資源,兩者都支持通過屬性(properties)來定義硬件設備的各種參數和配置信息。
Zephyr設備樹與Linux設備樹主要的區別:
zephyr設備樹主要面向資源受限的嵌入式系統,Zephyr并不直接使用設備樹編譯后的二進制文件(DTB)。相反,它在構建編譯階段通過腳本將設備樹信息轉換為C語言頭文件中的宏定義。這樣,內核和應用程序可以通過調用這些宏定義來訪問設備樹信息,減少了運行時的資源消耗。
Linux設備樹則直接使用設備樹編譯后的DTB文件。在系統啟動時,Linux內核會解析DTB文件,獲取硬件信息并進行板級初始化。這種方式提供了更高的靈活性和實時性。
構建方面Zephyr使用CMake作為構建系統,通過west build命令編譯、鏈接應用程序,并生成可下載到目標設備的固件映像。此外,Zephyr還集成了GDB調試器,與Visual Studio Code、Eclipse等IDE無縫配合,為開發者提供良好的開發環境。
4、高效與靈活性
Zephyr RTOS是一款面向物聯網的小型、可裁剪的實時操作系統,支持多種硬件平臺(如ARM、x86、RISC-V等)和多種開發環境(Windows、Linux、MacOS)。其模塊化設計允許開發者根據需求選擇啟用或禁用特定的功能,從而實現輕量級的內核以適應資源受限的硬件(最小資源需求:8KB Flash,5KB RAM)。
這種高度可配置性使得Zephyr在智能家居、工業自動化、穿戴設備等領域得到廣泛應用。
Zephyr 與RT-Thread、FreeRTOS的對比及其優略勢
Zephyr優勢
• 高效靈活:模塊化設計使得Zephyr能夠根據需求進行裁剪和配置。
• 安全性高:提供多種安全功能和開源許可保障代碼安全。
• 連接能力強:支持多種無線協議和網絡棧滿足物聯網設備的連接需求。
• 社區活躍:擁有活躍的全球社區提供持續的技術更新和支持。
Zephyr劣勢
• 相對較新:與FreeRTOS及RT-Thread等RTOS相比,Zephyr的歷史較短且市場認知度有待提高。
• 商業許可問題:雖然Zephyr本身開源免費,但基于Zephyr的商業項目可能需要考慮其他組件或服務的許可費用。
Zephyr 與 RT-Thread對比
RT-Thread與Zephyr類似,也是一款面向物聯網的開源RTOS。然而,RT-Thread在生態系統和社區支持方面可能略遜于Zephyr。此外,RT-Thread在某些特定領域(如物聯網操作系統標準制定)的參與度不如Zephyr高。
Zephyr 與 FreeRTOS對比
FreeRTOS是一款輕量級的RTOS,廣泛應用于各種嵌入式系統中。與Zephyr相比,FreeRTOS在資源占用方面可能更加優化,但在安全性和模塊化設計方面可能稍顯不足。FreeRTOS的社區支持也非常活躍,但其在物聯網領域的專門優化和特性可能不如Zephyr豐富。