最近,有接触到Zephyr操作系统,在这之前我也没怎么了解过,简单了解了一下,发现其增长的势头还挺猛的。
下面我们一起来简单认识认识Zephyr。
Zephyr RTOS是Linux基金会下的一个开源项目,以其高效、灵活、安全的特点,在实时操作系统领域崭露头角,成为物联网设备开发的首选之一。基于Apache 2.0许可。
官网:https://www.zephyrproject.org/
代码仓:https://github.com/zephyrproject-rtos/zephyr
Zephyr从下到上大致分为如下几层:
硬件层:含了实际的硬件设备,如CPU、内存、外设等。这些硬件设备是操作系统运行的基础和支撑。
硬件抽象层(HAL):提供了对底层硬件的抽象和封装,使得操作系统内核和应用程序能够以一种统一的方式访问和控制硬件资源。这有助于提高代码的可移植性和可重用性。
内核层:Zephyr内核是操作系统的核心部分,负责任务调度、内存管理、中断处理等基本功能。Zephyr提供了两种内核:微内核(microkernel)和超微内核(nanokernel),用户可以根据具体需求选择使用哪种内核或同时使用两者。
服务层:提供了一系列系统级的服务,如文件系统、网络协议栈、蓝牙协议栈等。这些服务为应用层提供了必要的支持和接口,使得应用程序能够更加方便地访问和使用底层硬件资源。
应用层:包含用户开发的各种应用程序。这些应用程序运行在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 RTOS的重要特性之一。它提供了内存保护、安全启动和加密算法等安全功能,确保设备在面对潜在威胁时能够保持安全。
Zephyr内置高效的TCP/IP网络栈,支持IPv4/IPv6,以及多种无线协议,如蓝牙(BLE)、Wi-Fi等,满足现代物联网设备的各种连接需求。这种广泛的连接能力使得Zephyr成为构建物联网应用的核心操作系统之一。
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无缝配合,为开发者提供良好的开发环境。
Zephyr RTOS是一款面向物联网的小型、可裁剪的实时操作系统,支持多种硬件平台(如ARM、x86、RISC-V等)和多种开发环境(Windows、Linux、MacOS)。其模块化设计允许开发者根据需求选择启用或禁用特定的功能,从而实现轻量级的内核以适应资源受限的硬件(最小资源需求:8KB Flash,5KB RAM)。
这种高度可配置性使得Zephyr在智能家居、工业自动化、穿戴设备等领域得到广泛应用。
• 高效灵活:模块化设计使得Zephyr能够根据需求进行裁剪和配置。
• 安全性高:提供多种安全功能和开源许可保障代码安全。
• 连接能力强:支持多种无线协议和网络栈满足物联网设备的连接需求。
• 社区活跃:拥有活跃的全球社区提供持续的技术更新和支持。
• 相对较新:与FreeRTOS及RT-Thread等RTOS相比,Zephyr的历史较短且市场认知度有待提高。
• 商业许可问题:虽然Zephyr本身开源免费,但基于Zephyr的商业项目可能需要考虑其他组件或服务的许可费用。
RT-Thread与Zephyr类似,也是一款面向物联网的开源RTOS。然而,RT-Thread在生态系统和社区支持方面可能略逊于Zephyr。此外,RT-Thread在某些特定领域(如物联网操作系统标准制定)的参与度不如Zephyr高。
FreeRTOS是一款轻量级的RTOS,广泛应用于各种嵌入式系统中。与Zephyr相比,FreeRTOS在资源占用方面可能更加优化,但在安全性和模块化设计方面可能稍显不足。FreeRTOS的社区支持也非常活跃,但其在物联网领域的专门优化和特性可能不如Zephyr丰富。
对于Zephyr,大家怎么看?欢迎留言讨论。顺便做个投票:
猜你喜欢:
常用的 Git 提交规范!
分享一种灵活性很高的协议格式(附代码例子)
易懂 | 手把手教你编写你的第一个上位机