Zephyr 入门,看这篇就够了(含FreeRTOS对比)

前言

本文将介绍 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能力的使用讲解和实践。

(聆思是国内一家做AI芯片的公司,因为芯片支持Zephyr RTOS,所以也对重要的文档进行了翻译。)

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提供了管道、消息队列和信号量等多种线程通信机制,而FreeRTOS提供了二值信号量、互斥量和队列等线程通信机制。可以看出,Zephyr提供的线程通信机制更加多样化。

Zephyr内存管理

Zephyr在内存管理上具备一些比起其他RTOS更加先进机制,如下

Memory Heaps:提供了基于堆的动态内存分配和释放机制

Memory Slabs:提供了预分配一定数量内存块的机制,并能够快速分配和释放内存块,避免了堆内存管理的 开销以及内存碎片的产生

Memory Blocks Allocator:提供了固定大小内存块的动态分配和释放机制,适用于需要频繁分配、释放同一大小内存块 的场景

Zephyr原生的子系统与其他服务

Zephyr拥有非常多原生且功能强大的服务与子系统,比如原生的NET协议栈、蓝牙协议栈、统一的文件系统接口、coredump机制等,感兴趣的同学可以去Zephyr的文档中心了解。

Zephyr的组件生态

越来越多的第三方组件库已经加入或者被移植进了ZephyrProject中,第三方组件管理与接入流程也日趋成熟这为开发者节省了大量常用组件的移植与适配工作。

总结

Zephyr的优缺点

优点

  • 代码开源,现代化的协作流程 (有利于 bug 发现与追踪)

  • 构建系统强大(集成第三方库方便,内置很多 cmake helper 函数,比如重定 向内存段、打包二进制文件),组件管理先进(灵活配置、支持代码裁剪)

  • 内置组件丰富(软件功能多,调试方便快速),第三方开源库支持多

缺点

  • 学习曲线较陡峭

更多分析

篇幅有限,很多点在教程视频有更深层的讲解,感兴趣的伙伴可以观看视频,视频中将覆盖以下内容:

  • 如何快速构建对 Zephyr RTOS 的基本认知
  • Zephyr RTOS 有哪些特性
  • Zephyr 和 FreeRTOS 这类传统 RTOS 有什么区别
  • 如何判断是否要使用 Zephyr

学习视频

初识Zephyr?看这个就够了!

其他学习资源

Zephyr系列相关分享 | CSDN
环境搭建 | 聆思文档中心
芯片介绍 | 聆思文档中心
支持简介 | 聆思文档中心
更多视频课程

关于聆思

聆思科技是一家专注提供智能终端系统级(SoC)芯片的高科技企业,目前推出的CSK6系AI芯片已适配Zephyr RTOS。

如果你在学习、开发过程中有疑问或难题,希望与专家和更多的开发者交流,欢迎+V:listenai-csk 

欢迎各位同学联系我们进行技术相关的探讨,也可以在评论区进行提问,大家一起进步吧!

  • 6
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 是的,Zephyr文件系统可以支持多分区挂载。在计算机系统中,分区指的是将磁盘分成若干个逻辑单元,每个单元都可以被操作系统识别并单独挂载。通过使用多分区,可以将一个磁盘分成多个逻辑单元,每个单元都可以使用不同的文件系统或者挂载在不同的目录下。Zephyr文件系统支持在多个分区之间进行挂载,这样就可以在同一个计算机上使用多个文件系统。 ### 回答2: Zephyr是一个开源的嵌入式实时操作系统,因此不是文件系统。在Zephyr中,文件系统是与操作系统不同的概念。 然而,Zephyr可以支持多分区挂载。根据Zephyr的文件系统系统,可以选择支持不同类型的文件系统,例如FAT文件系统或NOR文件系统。这些文件系统可以被挂载到不同的分区上,以便在嵌入式系统中使用。 在Zephyr的开发过程中,可以使用相关API和配置选项来设置和管理文件系统分区。开发人员可以按照需要配置并将多个文件系统挂载到不同的分区上。这使得嵌入式系统可以同时访问和管理多个不同类型的文件系统。 总之,尽管Zephyr本身不是一个文件系统,但它提供了支持多分区挂载的功能,可以使用不同的文件系统来满足嵌入式系统的需求。 ### 回答3: 是的,Zephyr文件系统支持多分区挂载。Zephyr是一个开源的实时操作系统,旨在为嵌入式设备提供高效的文件系统功能。它支持将多个分区挂载到嵌入式设备的文件系统中。 在Zephyr中,可以通过配置文件系统选项来设置多分区挂载。用户可以定义多个分区,并将不同的设备驱动器或存储介质与每个分区相关联。Zephyr提供了管理文件系统分区的API,以便用户可以在运行时挂载、卸载和访问这些分区。 通过多分区挂载,Zephyr可以实现更灵活的存储管理。用户可以将不同类型的数据存储在不同的分区中,以便更有效地组织和管理文件。例如,用户可以将操作系统文件、应用程序数据和日志文件存储在不同的分区中,以便更好地管理和维护。 此外,Zephyr还提供了与多分区挂载相关的安全性和权限控制。用户可以设置每个分区的访问权限,以确保只有特定的用户或进程可以读取和写入特定的分区。 总而言之,Zephyr文件系统支持多分区挂载,并通过提供灵活的存储管理和安全性控制,为嵌入式设备提供了强大的文件系统功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值