前言
本文将介绍 Zephyr RTOS 的基础信息,讲解初步接触学习Zephyr 需要了解掌握的知识与学习路线,让大家先快速构建起对这个操作系统的认知,文中还会与传统常见的RTOS ,如FreeRTOS进行对比,帮助大家更好地理解这个RTOS的特性。
Zephyr是什么?
Zephyr最初是由Wind River公司开发的一个微内核,在2016年的时候成为Linux基金会维护的一个项目,发展至今,已经成为了一个功能齐全的嵌入式OS。平台现在支持ARM、RISC-V、X86、Xtensa等等处理器平台,拥有原生的BLE协议栈、完整的Net协议栈,包括TCP/IP与应用层协议,为嵌入式应用的开发提供了有力的支持。
Zephyr它不仅仅维护了一个RTOS内核,还维护一些编译链、libc、 IDE插件、HEL层驱动等,几乎每一个模块都有相关的文档。正是因为拥有详细的文档,Zephyr才能源源不断的吸引人来进行尝试与开发,以至于系统不断的被完善,进入开源项目的一个良性循环。
Zephyr怎么学?
有两个途径可以找到比较高品质的Zephyr学习资料,大家可以自行搜索查看。
途径一:Zephyr官方文档中心
Zephyr官方文档中心在应用开发过程中用的最多的可能是kernel、OS service以及Hardware support这三个子目录。
路径二:聆思文档中心
聆思文档中心对一些Zephyr的一些常用的一些功能进行讲解,另外还包含一些聆思CSK芯片相关的软硬件设计参考及工具的相关文档,及AI能力的使用讲解和实践。
Zephyr的内核特性
Zephyr怎么构建系统
Zephyr的构建系统主要有三个部分cmake、Kconfig、devicetree
cmake: 在前期驱动kconfig和devicetree需生成必要的头文件,后期用来生成像ninja或makefile等编译脚本
kconfig: 平台的区分以及代码的裁剪,应用开发中主要体现在驱动的开关,如下图显示,在驱动的实现里面定义了wifi的kconfig宏,用户在使用的时候可以在prj.config文件去打开这个宏,这个驱动就会被打开。
devicetree:配置硬件参数信息,比如像前面WIFI的模块,可以配置SPI引脚以及速率,还可以配置跟他相关的同步引脚。
Zephyr的设备驱动模型
Zephyr几乎为所有的外设驱动都提供了统一的API接口,芯片原厂基于API接口提供自己的实现,用户在使用外设的时候可以直接使用Zephyr提供的外设接口来进行应用开发。
Zephyr的设备驱动是在同一个地方统一初始化的,比如像这个SPI的驱动,它的宏函数就等效于这一段代码,代码的含义就是注册了一个函数。这个函数会在main函数前运行,运行等级为application级别。驱动的等级会比application高,等级越高就会越先执行。设备驱动一定会在main函数前初始化完毕。
Zephyr与FreeRTOS线程与调度对比
Zephyr 在线程调度方面的功能更加强大、灵活,可以更好地满足不同场景下的需求。
而 FreeRTOS 则更加简单、易于使用,适合对资源需求较为简单的嵌入式应用场景
Zephyr | FreeRTOS | |
线程创建 | 支持在编译期创建 | 只支持在运行时创建 |
调度 | 协作式与抢占式共存, 可选且优先级可配的时 间片轮询 | 协作式或抢占式内核, 同等优先级时进 行时间片轮询 |
Zephyr 与 FreeRTOS 线程通信对比
Zephyr内存管理
Zephyr在内存管理上具备一些比起其他RTOS更加先进机制,如下
Memory Heaps:提供了基于堆的动态内存分配和释放机制
Memory Slabs:提供了预分配一定数量内存块的机制,并能够快速分配和释放内存块,避免了堆内存管理的 开销以及内存碎片的产生
Memory Blocks Allocator:提供了固定大小内存块的动态分配和释放机制,适用于需要频繁分配、释放同一大小内存块 的场景
Zephyr原生的子系统与其他服务
Zephyr拥有非常多原生且功能强大的服务与子系统,比如原声的NET协议栈、蓝牙协议栈、统一的文件系统接口、coredump机制等,这些在Zephyr官方的文档中心可以查看。
Zephyr的组件生态
越来越多的第三方组件库已经加入或者被移植进了ZephyrProject中,第三方组件管理与接入流程也日趋成熟这为开发者节省了大量常用组件的移植与适配工作.
总结
Zephyr的优缺点
优点
- 代码开源,现代化的协作流程 (有利于 bug 发现与追踪)
- 构建系统强大(集成第三方库方便,内置很多 cmake helper 函数,比如重定 向内存段、打包二进制文件),组件管理先进(灵活配置、支持代码裁剪)
- 内置组件丰富(软件功能多,调试方便快速),第三方开源库支持多
缺点
- 学习曲线较陡峭
由于篇幅有限,没有发散做更深层的讲解,欢迎各位同学联系我们进行技术相关的探讨,也可以在评论区进行提问。
标签:入门,FreeRTOS,RTOS,Zephyr,文档,内存,驱动 From: https://blog.51cto.com/u_15947017/6120580