Zephyr 学习笔记(一)

概述

Zephyr OS 是一个占用空间小的内核,用于资源受限的嵌入式系统:从简单的嵌入式环境传感器、LED 可穿戴设备到复杂的嵌入式控制器、智能手表和物联网无线应用。

Zephyr 内核支持多种架构,包括:

  • ARCv2 (EM and HS) and ARCv3(HS6X)
  • ARMv6-M、ARMv7-M、ARMv8-M
  • ARMv7-A and ARMv8-A (Cortex-A, 32- and 64-bit)
  • ARMv7-R, ARMv8-R (Cortex-R, 32- and 64-bit)
  • Intel x86 (32- and 64-bit)
  • MIPS (MIPS32 Release 1 specification)
  • NIOS II Gen 2
  • RISC-V (32- and 64-bit)
  • SPARC V8
  • Tensilica Xtensa
  • 等等...

许可

Zephyr 使用 Apache 2.0 许可证,是对商业应用友好的许可。

特点

Zephyr 提供了大量且不断更新的功能,包括:

内核服务组件

  • 内核支持多种调度策略:协作线程、基于优先级的线程、非抢占式线程和抢占式线程,以及可选的时间片轮转。包括 POSIX pthreads 兼容 API 支持。
  • 中断服务,用于中断处理程序的编译时注册
  • 内存分配服务,用于动态分配和释放固定大小或可变大小的内存块
  • 完善的 IPC 机制
  • 增强消息队列和字节流
  • 电源管理服务,如总体的、应用或策略定义的 "系统电源管理 "和细粒度的、驱动程序定义的 "设备电源管理"

多种调度算法

Zephyr 提供了一套全面的线程调度选项

  • 协作是和抢占式调度
  • 最早截止日期优先(EDF)
  • Meta IRQ 调度实现"中断下半部分"或"tasklet" 行为
  • 时间片:在优先级相同的抢占式线程之间启用
  • 多种排队策略:
    • 简单的链表就绪队列
    • 红黑树就绪队列
    • 传统的多任务就绪队列

设备树支持

使用 devietree 来描述硬件,解耦硬件与驱动程序。

低功耗蓝牙 5.0

支持蓝牙 5.0 和低功耗蓝牙控制器,包括 蓝牙 mesh 和 蓝牙 controller。

  • 具有所有可能的 LE 角色的通用访问配置文件(GAP)
  • 通用属性配置文件(GATT)
  • 配对支持,包括蓝牙的安全连接功能 4.2
  • 干净的 HCI 驱动程序抽象
  • 原始 HCI 接口,可将 Zephyr 作为控制器运行,而非完整的 Host 协议栈
  • 已通过多种常用控制器的验证
  • 高度可配置

Mesh Support:

  • 等等...

Zephyr 还支持内存保护、编译时资源定义(编译期初始化)、优化的设备驱动程序模型、网络协议栈、完善的构建系统等等。。。

由此可见,Zephyr 原生支持蓝牙、网络等众多组件,可谓是五脏俱全了。Zephyr 相较于同类开源系统是具有一定的上手难度的,尤其是引入的设备树、cmake 模块化构建系统思想等原理上的掌握。但实际上,也并没有多高的门槛,搞起来!!!

参考

Zephyr 官方

相关推荐
青椒大仙KI111 小时前
24/9/19 算法笔记 kaggle BankChurn数据分类
笔记·算法·分类
liangbm31 小时前
数学建模笔记——动态规划
笔记·python·算法·数学建模·动态规划·背包问题·优化问题
潮汐退涨月冷风霜2 小时前
机器学习之非监督学习(四)K-means 聚类算法
学习·算法·机器学习
GoppViper2 小时前
golang学习笔记29——golang 中如何将 GitHub 最新提交的版本设置为 v1.0.0
笔记·git·后端·学习·golang·github·源代码管理
羊小猪~~2 小时前
深度学习基础案例5--VGG16人脸识别(体验学习的痛苦与乐趣)
人工智能·python·深度学习·学习·算法·机器学习·cnn
Charles Ray3 小时前
C++学习笔记 —— 内存分配 new
c++·笔记·学习
重生之我在20年代敲代码3 小时前
strncpy函数的使用和模拟实现
c语言·开发语言·c++·经验分享·笔记
我要吐泡泡了哦4 小时前
GAMES104:15 游戏引擎的玩法系统基础-学习笔记
笔记·学习·游戏引擎
骑鱼过海的猫1234 小时前
【tomcat】tomcat学习笔记
笔记·学习·tomcat
贾saisai6 小时前
Xilinx系FPGA学习笔记(九)DDR3学习
笔记·学习·fpga开发