LWN:Zephyr四年啦!

zephyr开发入门 【代码】zephyr开发入门。 阅读详情

关注了就能看到更多这么棒的文章哦~

Four years of Zephyr

June 29, 2020
This article was contributed by Martí Bolívar and Carles Cufí
原文来自:https://lwn.net/Articles/824029/

Zephyr project ,这是一个开源项目,希望提供一个开源的实时操作系统(RTOS),可以在作为介于Linux这种功能齐全的操作系统和完全没有操作系统的环境之间的这种需求。Zephyr已经公布4年了。本文中,随着2020年6月它发布了v2.3.0 release,我们来介绍一下项目的进展以及社区状况。此外也对项目的未来做了一些预测。

两位作者都是Nordic Semiconductor公司内部的Zyphyr开发者。Cufí 是v2.3.0版本的发布经理。

A Zephyr primer

Zyphyr虽然可以用来支撑大型的系统,这个RTOS的主要目标还是不具备MMU的微处理器环境,一般CPU频率不超过100MHz,带有不超过512KB的片上NOR flash存储和32到256KB的内置RAM。Zyphyr也像Linux kernel一样,可以用Kconfig方式来进行配置,devicetree来描述硬件。

Zephyr有一点跟其他的RTOS很不一样,它不仅是一个kernel而已。这个RTOS配备了你所需要的所有功能。它的目标就是能提供你在开发、发布、维护过程中的所有软件,包括编译器、烧写和调试工具。zephyr的代码库里面包括kernel, 协议栈,驱动程序,文件系统等等。Zyphyr还包括许多第三方的项目,都通过一个名为west的工具集中拉了下来。这些第三方项目包括加解密库,硬件抽象层(HAL),协议栈,和MCUboot bootloader。

Zephyr是一个library operating system。它的编译系统里面把应用程序、kernel、以及其他代码都合并成一个单一静态链接生成的可执行程序,所有代码都在同一个地址空间内(大多数微处理器反正也没有MMU)。每个编译生成的image都是针对一个特定开发板的,通常是从闪存里面直接开始执行。因此所有配置工作基本都是在编译阶段完成的。代码中用到的buffer缓存也都是静态预先分配好的。整个devicetree在编译时都可以访问,因此会挑一部分设备和驱动程序编译进来。这样就可以让image size最小化,能在闪存中塞入尽量多的内容,节省空间非常小的RAM。

有些功能会针对Zephyr不能self-host而量身定做的。这样Zephyr开发者在编译应用程序的时候就会把全部内容都编译进来。Zephyr开发的新手可以很快上手,因为它有基于CMake和Python的跨平台编译和配置系统,可以直接在Linux, macOS, Windows上面进行编译,这都归功于Kconfig和devicetree的处理都从原来的Unix工具转到了Python 3。这个非常重要,因为Windows是微处理器固件开发中最常用的开发环境。

More details

Zephyr kernel支持多种体系架构,也支持多种调度算法。可以支持cooperative或者preemptive therad,也有多种措施可以减少中断延迟以及确保关键线程的执行。还有一个可选模式,名为user mode,可以利用许多微处理器里的MPU(Memory Protection Unit)来对各个线程做隔离,确保线程之前无法互相破坏memory,也能保护kernel。

Zephyr支持6种主要体系架构(x86, Arm, ARC, NIOS II, Xtensa, RISC-V),也可以在模拟器环境中运行。部分体系架构中32和64位的处理器都可以支持。Arm架构中的重点放在了主流的32位Cortex-M处理器上了,不过对于Cortex-R和Cortex-A(包括64位)也有试验性的支持。除了这些真实硬件外,Zephyr也可以在QEMU上运行,或者作为一个ELF可执行程序来执行。它可以支持simulated radio,这样在测试和debug RF(radio ferquency)问题时可以节省时间和开销。总共已经支持了超过200种开发板(包括模拟平台)。

Zephyr包括了日志系统和shell功能。并且都可以配置底层的传输通道。比如传统的串口(log和shell都支持),或者走网络(支持log)。log功能也可以是异步的,也就是可以用一个独立的线程来发送log信息,每次调用log API的时候都会把compact message发到一个队列中去就行了,这样非常快,哪怕在中断上下文也可以使用log API了。

硬件相关的API都是参照一个轻量级的device driver model来开发的,跟kernel紧密集成了起来。现在已经支持了许多种外设和传感器。还支持多种存储解决方案,既有NOR flash优化过的key-value键值对存储方式,也有文件系统支持。

Zephyr还缺省提供了多种通讯协议栈。它的网络协议栈具有BSP类似的socket API接口,支持多种协议。Zephyr还有一个完全开源的Bluetooth Low Energy (BLE)协议栈,可以支持多种硬件设备。此外还有一个802.15.4协议栈,支持Thread协议。CAN(Controller Area Network)总线和USB device通讯方式也是直接支持的。Zephyr还额外支持通过多种传输层来进行firmware升级。

But why, though?

关于Zephyr最常见的一个问题就是为什么需要这么一个项目,毕竟现在已经有了那么多种RTOS可供选择。

微处理器已经变得越来越强大了,也有了更多的memory、core(CPU核心)、安全功能,也需要支持更多种复杂的协议和通讯功能。Firmware的复杂度在这几年大大增加。因此,普通芯片厂商来提供的自研framework,同上都是直接基于裸代码或者最小化的一个kernel之上,现在就变得越来越难于开发和维护了。Zephyr本身期望能成为一个非常容易扩展的方案,大家一切开诚布公地合作开发,把所有功能都围绕着一个公共的API提供出来。

Zephyr已经有多个社区用户了。Zephyr的member公司肯定会希望用它,还有一些芯片厂商也支持Zephyr。比如说,NXP和Nordic Semiconductor作为member厂商就提供了不少硬件。STMicro也贡献了一些SoC和传感器的代码并且一直在支持相关用户。还有许多其他体系架构和开发板也得到了支持。并且还有一个活跃的开源社区,下一节里我们来讲讲。

Who's behind all of this?

Zephyr是Linux基金会的一个项目,有许多付费会员来支持和管理。不过它的开发工作完全是开源的。任何人想使用或者贡献给Zephyr都可以,不需要成为会员。

项目的会员公司包括许多芯片厂商,设备制造商,开发组织,等等。经费主要用来支持持续集成、网站维护、市场费用等相关的支持工作。会员可以获得投票席位来决定项目的Techincal Steering Committee (TSC),这个管理层完全由会员公司来组成。

所以不少人把这个项目看成一个pay-to-play的工业组织,不过这并不完全公平。至少从代码和其他一些技术贡献上来说,Zephyr是一个完全开源的项目。Patch和review是任何人都可以进行的。core Zephyr repository是按Apache 2.0协议发布的,贡献者可以对它们贡献的部分保留copyright。在v2.3.0版本中,大概有1/4的commit的提交者不是来自会员公司。

项目中的会议,包括TSC的会议基本都是任何人都可以参加的,可惜是用了一个商业软件来进行视频会议。会议记录也都会发给mailing list。

Zephyr开发主要在GitHub上进行。patch都是通过pull request来提交的。那些不属于security的bug都是直接由GitHub issue来管理的。各个子系统的maintainer对于他们自己的领域都有责任。这些maintainer也都是需要TSC批准的,不过任何人都可以成为maintainer,并不局限于会员公司。现在就有一些maintainer不是来自会员中的。

Zeyphyr项目的user和developer这两个mailing list都很活跃,也都可以搜索查到历史记录。交谈主要是通过Slack的。可以看到项目的帮助页面里面有这些信息。

Wrapping up

Zephyr除了在不断扩充和改进它的现有功能之外,也会继续添加新的功能。下个版本中(预计9月份发布)就打算包括如下功能:Bluetooth advertising extensions,对device model的重构,改善支持MMU的系统(例如demand paging),初步支持一个新的TCP stack,改进编译器支持从而可以使用商用编译器或者LLVM。

我们可以看到,Zephyr的优势主要是它填补了裸代码和全功能操作系统之间的空白。尽管它才出现不久,其实已经完成了许多工作。这个项目有着远大的野心,希望能为firmware开发来提供许多即开即用的功能。希望我们已经解决了大家的疑惑,今后能看到更多的LWN读者来参与到Zephyr中来。

全文完

LWN文章遵循CC BY-SA 4.0许可协议。

欢迎分享、转载及基于现有协议再创作~

长按下面二维码关注,关注LWN深度文章以及开源社区的各种新近言论~

zephyr使用jlink GDB调试程序及常用GDB命令 Zephyr是一种微型物联网实时操作系统,为所有资源受限设备,构建了针对低功耗、小型内存微处理器设备而进行优化的物联网嵌入式小型、可扩展的实时操作系统(RTOS),因此它也是我司想要关注利用的一款RTOS。Zephyr官方不仅提供了详细的开发指导,也提供了zephyr调试手段,下面具体介绍zephyr调试流程。 阅读详情

相关推荐

Zephyr 开发必备技能:一文搞懂 west debug

Zephyr开发中,westdebug是官方推荐的调试工具,它集成了GDB和底层调试服务,提供交互式调试能力。与westflash的静态烧录不同,westdebug支持断点设置、变量查看和栈回溯等核心调试功能。开发者可通过命令行或VSCode图形界面使用westdebug,配合GDB命令进行代码分析。典型调试流程包括:编译带符号的ELF文件、启动调试会话、设置断点、检查寄存器和内存。常见问题涉及连接失败、断点失效等,可通过检查runner配置和重新构建解决。掌握westdebug能显著提升嵌入式开发效率,与

hemoparrot的专栏 1520

windows下zephyr-2.5.0操作系统学习--03-Eclipse-Debug+启动分析

Eclipse-Debug

Berte_Yu的博客 693

Codesys.运动控制修改凸轮点

通过改凸轮曲线的主从轴缩放比例或者偏置。 新建多个凸轮曲线,对CAM曲线进行切换。 程序中动态修改,仅修改中间的关键点(凸轮末点修改or凸轮曲线运行中修改)。 程序中动态修改,修改首未关键点及关键点个数,需要重新触发MC_TableSelect。 使用程序新建凸轮表代码,实现电子凸轮基本运动。 我们讲的凸轮表切换、关键点修改、程序新建电子凸轮,这些方法没有本质区别,总之都是“趁曲线不注意,把凸轮表改了。

傻响雨 6827

Zephyr物联网操作系统初识(二):Zephyr调试

文章目录 光有编译环境还不够,软件开发过程中必不可少的就是调试,谁还不写几个BUG呢?那么如何实现Zephyr的调试呢? 待更新

sinat_32478611的博客 853

《缠中说禅108课》5:市场无须分析,只要看和干

喜欢吹牛皮的,在市场里最常见,例如一种以分析市场、吹牛皮为生的职业,叫什么股评、专家的。此类人不过是市场上的寄生虫,真正的猎手只会观察、操作,用嘴是打不了豺狼的。 市场就是一个狩猎场,首先你要成为一个好猎手,而一个猎手,首先要习惯于无言。如果真有什么真理,那真理也是无言的。可言说的,都不过是人类思想的分泌物,臭气熏天。真不可言说了,就无不可言,言而无言,是乃真言。 一个好的猎手,可以没有嘴巴,但一定会有一双不为外物所动的眼睛,在这眼睛下,一切如幻化般透明。要不被外物所动,则首先要不被自我所迷惑,其实..

BenRen1314的博客 800

HDMI2.1 FRL流控 概览

HDMI 2.1 FRL的流控本质是。

叫好与叫座虽然不是对立面,但想在同一个作品中达到双重效果很难。 2081

Zephyr:资源有限系统商的模块化OS!

关注了就能看到更多这么棒的文章哦~Zephyr: a modular OS for resource-constrained devicesMarch 14, 2023This article was contributed by Koen VervloesemDeepL assisted translationhttps://lwn.net/Articles/925924/为资源受限的设备编写应...

Linux News搬运工 1541

SHAP图全解析:从理论到实践,教你如何读懂和优化模型特征

本文全面解析SHAP图,从博弈论基础到实战应用,指导读者如何解读和利用SHAP值优化机器学习模型。通过详解特征重要性条形图、小提琴图、依赖图及决策图等关键可视化工具,帮助数据科学家精准诊断模型、识别特征交互,并将洞见转化为特征工程与模型调试的实际行动,有效提升模型可解释性与性能。

svm4gardener的博客 187

如何快速成为底层编程专家:lowlevelprogramming-university核心课程完整指南

底层编程是接近计算机硬件的编程领域,涉及汇编、C语言、Linux内核开发等关键技术。lowlevelprogramming-university项目提供了从理论到实践的完整学习路径,帮助新手系统掌握底层开发技能,快速成长为专业的底层程序员。 ## 🚀 底层编程入门:从理论到实践的完整路线 底层编程需要扎实的计算机基础理论与实践技能。本指南基于lowlevelprogramming-unive

gitblog_00100的博客 354

QT+Opencv实现视频流播放

1.流程 首先通过opencv打开视频流,获取到数据帧,然后将数据帧转换为QT可识别的图像,显示到QT界面上。 2.opencv解码线程源码 //DecodeOpencv.h #pragma once #include <QThread> #include <QObject> #include "opencv2/core/core.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/img..

希望能帮助大家,希望大家多多支持,你们的支持是我前进的动力。 6459

SQL面试题——最大连续登陆问题

最大连续登陆是我们计算比较常用的指标,我们可以将其当成一个经典的SQL模型,后面我们也会陆续总结出其他的模型,你还知道其他的比较经典的SQL 吗?欢迎分享,或者你还知道其他的关于计算连续的指标?最大连续登陆重要的是计算思想,最大连续才是关键,登陆只是一个场景,要学会举一反三。

9011

底层程序员学习路线图:Low-Level Programming University 从硬件到 Linux 内核的自学指南

本指南以仓库中文版路线图 [README_cn.md](https://link.gitcode.com/i/5f38e1686fe1bd3c435748ea71788799) 为核心骨架,系统拆解"如何成为一名底层(low-level)程序员"的完整路径:先讲清底层编程的定义边界,再沿"理论 → 汇编/C 语言 → 硬件与固件 → 自制内核 → Linux 内核与设备驱动 → 未来趋势"逐层展开

gitblog_00361的博客 173

人形机器人大语言模型 pi*0.6(π*0.6):最新从经验中学习的VLA

摘要:本文介绍了一种名为Recap的机器人学习方法,通过示范训练、纠错指导和强化学习三个步骤提升机器人执行复杂任务的能力。研究显示,仅依靠模仿学习的机器人难以解决错误累积问题,而Recap方法通过价值函数可视化和优势条件策略训练,使π*0.6模型在咖啡制作、纸箱组装和衣物折叠等任务中的成功率提升超过90%,吞吐量翻倍。该方法突破了传统依赖人工演示的局限,通过自主经验学习实现机器人性能的持续优化,为未来机器人基础模型的发展提供了新方向。

2506_90492529的博客 1317

Low-Level Programming University:通往底层程序员与 Linux 内核工程师的完整学习路线图

本文以开源仓库 `lowlevelprogramming-university` 的波斯语版路线图文档 [README_fa.md](https://link.gitcode.com/i/65f3e2f3e035dd904f5982dbc8e4bbe3) 为核心骨架,系统梳理"何为底层编程、需要掌握哪些理论与语言、有哪些应用领域、行业未来走向以及如何从零起步"的完整知识体系。读完本文,你将获得一条

gitblog_00420的博客 213

华为OD机考双机位C卷 - AI处理器组合 (Java & Python & JS & GO & C++ & C)

> 2026华为OD机试双机位C卷 - 华为OD上机考试双机位C卷 华为OD机试双机位C卷真题目录点击查看: [【全网首发】2026华为OD机位C卷 机考真题题库含考点说明以及在线OJ(OD上机考试双机位C卷)](https://blog.youkuaiyun.com/banxia_frontend/article/details/155503868)

算法大师! 232

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

RR 引导部署黑群晖 DSM 完整指南:30 分钟让旧电脑变成可用 NAS

储物间里那台 i5 老台式机,机箱落了一层灰,硬盘却还好使。与其让它继续吃灰,不如直接改成家用 NAS——这次我选的黑群晖 DSM 部署方案是 RR 引导。全文记录我实测走通的完整链路:把镜像写进 U 盘、照着图形菜单把选项点完、最后亲眼看到 DSM 安装界面;顺带把 PVE 虚拟化那条路和踩过的坑一并交代清楚。 ## RR 引导能力速览:它替你干掉了哪些活 RR 引导(Redpill Rec

gitblog_00091的博客 388

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

从0到1:5分钟本地跑起The Delegation 3D AI办公室的完整指南

The Delegation 是一款免代码(no-code)的 3D AI 办公室实验场,让 AI 爱好者、教育工作者和创意开发者无需写一行代码,就能在一个"活"的 3D 办公室里探索、设计并交互 Agentic AI(智能体)系统:由 LLM 驱动的角色会在共享的虚拟工作区里自主协作——它们自主导航到工位坐下、干活、互相讨论,而你只需通过节点式编辑器和看板界面来指挥整个 AI 团队。 [![T

gitblog_01091的博客 493

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Low-Level Programming University 底层程序员路线图:从汇编、C 语言到 Linux 内核的完整学习指南

本文以开源项目 Low-Level Programming University 的官方文档为核心,系统梳理一条从零起步、最终成长为底层程序员(low-level programmer)与 Linux 内核工程师的学习路线。该路线图覆盖两条理论基石(计算机体系结构与操作系统)、三门核心语言(汇编、C、Rust)、三大应用方向(硬件与固件、Linux 内核与设备驱动、其他底层应用),并给出按顺序可执

gitblog_00160的博客 795

Low-Level Programming University 全指南:从汇编、C 到 Linux 内核的低层级编程学习路线图

Low-Level Programming University 是一份面向初学者的低层级编程自学路线图,作者基于十余年的一线开发经验,将"如何成为低层级程序员与 Linux 内核工程师"拆解为理论、语言、硬件、内核四大进阶阶段。本文以仓库中的 [捷克语版 README_cz.md](https://link.gitcode.com/i/6b561092c7e773e92f0c67212af38c

gitblog_00559的博客 1029

Low-Level Programming University 底层编程学习路线图:从硬件到 Linux 内核的完整指南

> **导读**:本文基于开源仓库 [lowlevelprogramming-university](https://link.gitcode.com/i/efbfefdaee4b6b6f2a728d89243e8243)("如何成为底层程序员")整理而成,系统梳理了从计算机体系结构、操作系统两大理论基石,到汇编、C、Rust 三大语言,再到硬件与固件、Linux 内核与设备驱动两大应用方向的完整

gitblog_01071的博客 487

Low-Level Programming University 底层程序员自学路线图:从汇编与 C 到 Linux 内核的系统成长指南

本指南围绕开源仓库 lowlevelprogramming-university 的核心路线图文档展开,系统梳理了成为底层程序员(low-level programmer)与 Linux 内核工程师所需的理论基础、编程语言路线、实践项目与进阶路径。读完本文,你将获得一份可直接执行的六步行动清单,了解如何从操作系统原理、8086 汇编、C 语言起步,一步步走向固件开发、设备驱动乃至 Linux 内核

gitblog_00717的博客 703

Zotero PDF2zh 上手教程:装好本地服务、配好 API,右键一键得到双语 PDF

读英文论文最耗时间的环节,是把文本一段段复制到网页翻译器再粘回来。**Zotero PDF2zh** 是一个 Zotero PDF 翻译插件,把 pdf2zh / pdf2zh_next 两套翻译引擎接进文献库:右键任意条目,就能生成保留公式与原始排版的纯中文 PDF,或中英左右对照版本。项目由两部分组成——本地翻译服务(server,基于 Python 3.12)和插件安装包(.xpi),需要分

gitblog_01013的博客 605

dsh-purge 红队评测插件安装完整清单:两条路线任选,三个标志核完即跑通

dsh-purge 是装在本机官方 DeepSeek Harness 上的红队评测插件,给要按模型换提示词、评测宿主默认策略的人用。所有操作只发生在本机 Harness 内,开源版只放行本机回环与 RFC1918 私网目标,不碰外网。 ## 先认清它能干嘛 | 能力 | 解决的问题 | | --- | --- | | 按模型换提示词 | 不同模型挂不同系统提示词,默认「小码酱」,清洗页编辑区直

gitblog_00179的博客 719

3分钟装好 Logisim-Evolution:数字逻辑电路仿真软件的跨平台完整安装指南

Logisim-Evolution 是一款免费开源的数字逻辑电路设计与仿真工具。你可以在画布上摆放逻辑门、触发器、存储器等组件,拨动输入引脚后实时观察 0 和 1 如何在电路里流动。本文按实际操作顺序,讲清它在 Windows、macOS、Linux 上怎么装、装完怎么确认。 ## 📋 开工前检查表:4 项一次过 安装前花一分钟核对着下表,装包不匹配是最大的返工原因。 | 检查项 | 要求

gitblog_00627的博客 435

Logisim-Evolution 数字逻辑电路设计与模拟教程:从零连出第一块与门电路

Logisim-Evolution 是一款开源的数字逻辑电路设计与模拟工具,你在画布上拖入逻辑门、连好导线,程序就会实时仿真每个引脚上的 0 和 1。这篇教程写给刚接触数字电路的学生和想给课程准备教具的老师,带你从安装一直做到跑通一个能跑的电路。 ## 为什么值得了解它:上课连线、回家也能验证 先说一个很具体的场景。数字电路课上,老师让你搭一个 4 位计数器,验证溢出信号。在 Logisim-

gitblog_00382的博客 83

Low-Level Programming University 学习路线图:从汇编、C 与 Rust 到 Linux 内核的底层编程完全指南

> 本指南以 [README_es.md](https://link.gitcode.com/i/0c8c0ad30c7e91e659279c80b84253f0)(西班牙语版)为主体,并结合英文原版 [README.md](https://link.gitcode.com/i/3230609940b5a7f6ae8aaf93ece329a0) 与中文版 [README_cn.md](https:

gitblog_07670的博客 385
上一篇: LWN:打算在Fedora 33中做哪些改动?
下一篇: LWN:利用todo.txt和Taskwarrior来管理你的任务!
LinuxNews搬运工
博客等级 码龄7年 438粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值