- 博客(17)
- 收藏
- 关注
原创 【Zephyr开发系列-16】线程
每个线程有一个32位自定义数据区域,只有线程自己能访问,默认值为0。需启用。// 设置当前线程的自定义数据// 获取当前线程的自定义数据。
2026-08-20 18:19:27
6
原创 【Zephyr开发系列-15】Devicetree与Kconfig
Devicetree描述硬件及其启动时的配置,例如外设实例、时钟频率、中断资源等;Kconfig配置软件构建选项,用以决定最终固件中启用哪些功能、编译哪些驱动以及采用何种软件特性。Zephyr的构建通常先处理Devicetree,再解析Kconfig。Devicetree到Kconfig的映射,主要通过Kconfiglib支持的自定义Kconfig预处理函数机制实现,相关实现位于scripts/kconfig/kconfigfunctions.py,并据此计算符号的默认值或约束其依赖关系。
2026-08-19 17:07:09
14
原创 【Zephyr开发系列-14】Kconfig语法
Zephyr的配置系统基于Python实现的Kconfiglib,而不是Linux内核源码树中下的原生Kconfig实现。与Linux内核通常使用的conf、mconf、nconf、qconf等工具相比,Kconfiglib在保持对标准Kconfig语法兼容的同时,也引入了面向Zephyr场景的扩展。
2026-08-10 15:07:34
114
原创 【Zephyr开发系列-13】kconfig配置界面
Zephyr内核及其各个子系统可以在构建过程中进行配置,从而满足特定应用程序和平台的需求。配置工作是通过Kconfig来完成的,这与Linux内核所使用的配置系统相同。这样做的目的是为了能够在不修改任何源代码的情况下进行配置。配置选项(常被称为符号)被定义在Kconfig文件中。这些文件还规定了各个符号之间的依赖关系,从而确定哪些配置是有效的。选项成千上万、彼此还有依赖关系,纯手动很容易写错。为此Zephyr提供了两个交互式配置界面menuconfig:基于 curses 的终端文本界面,靠键盘操作。
2026-07-30 12:01:43
10
原创 【Zephyr开发系列-12】设备树使用补充
按隐式规则推出的#foo-gpio-cells和#bar-io-channel-cells。如irq-gpios、handshake-gpios、reset-gpios这些五花八门的属性名,最终都统一对应到GPIO控制器的。的:例如foo-gpios会解析到 #gpio-cells,bar-io-channels会解析到#io-channel-cells,而。等带inst参数的宏。本文对设备树的使用进行了一些补充,设备树相关的这些操作在应用开发中会反复用到,建议结合实际项目多动手练习,熟练掌握。
2026-07-30 11:59:35
11
原创 【Zephyr开发系列-11】设备树的使用
在Linux中,设备树以二进制形式存在,内核会在运行时进行解析,然后完成驱动加载和设备初始化。Zephyr是,而Linux是。之所以这样做,是因为Zephyr面向的是体积和开销较小、资源受限的MCU或SoC。
2026-06-18 14:21:42
498
2
原创 【Zephyr开发系列-10】设备树绑定机制
在Zephyr的Devicetree中,用于定义某一类设备树节点应具备的属性、属性类型以及约束规则。从作用上看,binding是连接与的桥梁。Zephyr的设备树绑定采用自定义格式的YAML文件形式来表示(Zephyr并不使用Linux内核所使用的dt-schema工具)。
2026-06-17 19:39:26
602
原创 【Zephyr开发系列-9】DTS语法与设备树结构
设备树是一种用于描述硬件的分层数据结构。Zephyr主要通过两种方式来使用设备树:1)向设备驱动程序模型描述硬件信息;2)用于指定该硬件的初始配置参数。设备树输入文件分为两种类型:设备树源文件和设备树绑定文件。源文件包含了设备树的结构本身;而绑定文件则描述了设备树中的各种元素及其数据类型。构建系统会利用这些源文件和绑定文件来生成C语言头文件。所有Zephyr相关代码和应用源码都可以包含devicetree.h,例如驱动程序、应用程序、测试程序以及内核代码。
2026-06-16 08:33:58
488
原创 【Zephyr开发系列-8】Zephyr CMake构建解析
Zephyr构建过程分成配置阶段(由 CMake 驱动)和 构建阶段(由 Make 或 Ninja 驱动)。配置完成后,CMake 拥有这次构建的内部模型,并生成原生的构建脚本;Zephyr支持的生成器是 Ninja 和 Make。整个构建是从应用出发,再把 Zephyr 内核、模块、板级配置一起纳入,最后编成一个完整镜像。本节内容以建立概念为主,Zephyr 构建不是一步完成的,而是先做配置,再做真正的编译和链接。其中,配置阶段会先处理devicetree和Kconfig,构建阶段再逐步生成最终镜像。
2026-06-15 11:13:22
133
原创 【Zephyr开发系列-7】Zephyr程序调试解析
调试就是对CPU进行“暂停、检查、追踪、回放”去查找定位bug的过程。在VS Code中点击Debug开始,内部会执行非常多的步骤,有时候其中一个参数或步骤出错都会导致调试失败,这种很是让人抓狂,所以了解整个Debug建立流程很有必要。
2026-06-14 23:33:32
436
原创 【Zephyr开发系列-6】Zephyr程序架构解析
SoC或平台本身就还没支持Zephyr,就需要自己去创建SOC的完整定义,目前绝大部分SOC都能在zephyr中直接使用,没被纳入建议还是不要自己移植。如果自定义SOC,可使用SOC_ROOTsoc / └── vendor / # 芯片厂商目录└── family / # 芯片家族目录└── soc / # 芯片系列目录├── Kconfig . soc # 芯片附加可选配置,选择具体芯片型号├── Kconfig # 芯片基础配置,描述芯片特性。
2026-06-13 11:58:15
290
原创 【Zephyr开发系列-5】二.Zephyr环境与构建(IDE方式)
目前Zephyr可用 IDE相当多,开发者可自行选择。CLion:JetBrains 的跨平台 C/C++ IDE,适合做工程导航、CMake 工程管理和调试,有原生Zephyr West集成。:ST的Eclipse系IDE,主要面向STM32 MCU/MPU,偏STM32专用工作流。IAR。
2026-06-12 11:38:00
731
原创 【Zephyr开发系列-4】一.Zephyr环境与构建(命令行方式)
Zephyr 应用程序可以通过两种方式开发:一种是基于命令行的方法,使用命令行中的 west 和 CMake 等工具;另一种是使用集成开发环境,例如安装了适用于 Zephyr 应用开发的合适扩展的 Microsoft VS Code。在目标平台层面,可以选择将代码下载并运行到实际的目标板上,也可以使用模拟器(如 Renode 或 QEMU)。本章节主要使用命令行方式构建,下一章节使用IDE方式构建,推荐使用IDE方式,实际请根据喜好自行选择。
2026-06-11 15:52:25
270
原创 【Zephyr开发系列-3】Zephyr简介
Zephyr RTOS是一款开源的嵌入式实时操作系统,专为资源受限设备设计。它支持多架构(ARM/RISC-V/x86等),采用模块化设计,通过设备树和Kconfig实现灵活配置,最小内存需求仅8KB。系统提供多线程调度、内存管理、安全机制(加密/内存保护)及丰富协议栈(蓝牙/Wi-Fi/LoRa等),内置CMake构建工具和虚拟文件系统支持。Zephyr适用于从传感器到汽车控制器的各类场景,具有高度可扩展性,其Apache 2.0许可证允许商业免费使用,是物联网开发的理想平台。
2026-06-08 11:27:20
266
原创 【Zephyr开发系列-2】二.实时操作系统RTOS
本文介绍了实时操作系统(RTOS)中的中断与异常机制以及基本通信模式。主要内容包括: 中断与异常 区分同步异常(由指令执行触发)和异步异常(中断,由外部事件触发) 同步异常分为精确异常和非精确异常 异步中断分为可屏蔽和不可屏蔽中断 详细描述了异常处理的标准流程 基本通信模式 信号中心通信和数据中心通信的区别 松耦合通信和紧耦合通信的特点 生产者-消费者模式的工作机制 守护任务模式的两种实现方式。
2026-06-08 01:49:30
194
原创 【Zephyr开发系列-1】一.实时操作系统RTOS
RTOS中的OS代表操作系统,RT代表实时。操作系统可以被视为一种提供服务的软件,这些服务可用于开发需要同时处理多个线程的应用程序。操作系统的核心是调度器,其工作是决定接下来运行哪个线程。协作式:一个线程会一直运行,直到它决定挂起当前操作并将控制权移交给调度器,由调度器决定接下来运行哪个线程。抢占式:线程可以在任何时候被操作系统抢占。抢占可能发生的原因包括:一个高优先级线程已就绪可以运行,或者正在运行的线程需要访问某个当前不可用的资源,因为该资源正被另一个任务使用。硬实时。
2026-06-07 20:05:43
312
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅