![](https://csdnimg.cn/release/download_crawler_static/88197903/bg1.jpg)
Zephyr OS 中中中文文文文文文档档档
发发发布布布 v1.6.0
https://github.com/tidyjiang8/zephyr-doc
12月月月 26, 2016
![](https://csdnimg.cn/release/download_crawler_static/88197903/bg2.jpg)
![](https://csdnimg.cn/release/download_crawler_static/88197903/bg3.jpg)
Contents
1 翻翻翻译译译前前前言言言 3
1.1 Zephyr 是什么 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 Zephyr 有啥优势 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2.1 轻量级 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2.2 高度可配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2.3 多架构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2.4 可移植性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2.5 丰富的物联网协议 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2.6 丰富的设备驱动 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.2.7 电源管理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2.8 Shell 支持 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2.9 C++/JavaScript 支持 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2.10 活跃的开发者 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.3 为啥学习 Zephyr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.4 中文文档翻译计划 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.4.1 纠错 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.4.2 广告 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2 Zephyr 简简简介介介 11
2.1 许可 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2 特性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.3 基本术语和概念 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3 入入入门门门指指指南南南 13
3.1 设置开发环境 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.1.1 在 Linux 下搭建开发环境 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.1.1.1 安装主机操作系统 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.1.1.2 更新您的操作系统 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.1.1.3 安装需求和依赖 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.1.1.3.1 安装 Zephyr 软件开发套件(SDK) . . . . . . . . . . . . . . . . . . . 14
3.1.2 在 Mac OS 下搭建开发环境 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.1.2.1 使用三方工具链 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.1.2.2 安装需求和依赖 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.1.2.3 设置工具链 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.1.2.3.1 创建一个大小写敏感的文件系统 . . . . . . . . . . . . . . . . . . . . . 16
3.1.2.3.2 设置工具链选项 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.1.2.3.3 验证工具链的配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.1.2.3.4 编译工具链 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
i
![](https://csdnimg.cn/release/download_crawler_static/88197903/bg4.jpg)
3.1.3 在 Windows 下设置开发环境 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.1.3.1 更新您的操作系统 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.1.3.2 安装需求和依赖 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.1.3.2.1 Pthread 库 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.1.3.2.2 GNU Regex C 库 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.1.3.2.3 安装工具链 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.1.4 匿名检出源代码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.2 编译、运行应用程序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.2.1 编译一个简单的例子 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.2.2 使用自定义/三方交叉编译器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.2.3 在 QEMU 中运行应用程序例程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4 支支支持持持的的的开开开发发发板板板 23
5 Zephyr 内内内核核核原原原语语语(((第第第 2 版版版))) 25
5.1 概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
5.1.1 源码树结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
5.1.2 术语表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
5.1.3 与第 1 版内核的改动 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
5.1.3.1 应用程序设计 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
5.1.3.2 内核 API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
5.1.3.3 线程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
5.1.3.4 定时 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
5.1.3.5 内存分配 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
5.1.3.6 同步 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
5.1.3.7 数据传递 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
5.2 线程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
5.2.1 生命周期 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
5.2.1.1 概念 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
5.2.1.1.1 线程的创建 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
5.2.1.1.2 线程的正常结束 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
5.2.1.1.3 线程的异常终止 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
5.2.1.1.4 线程的挂起 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
5.2.1.1.5 线程的选项 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
5.2.1.2 实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
5.2.1.2.1 创建一个线程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
5.2.1.2.2 结束一个线程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
5.2.1.3 建议的用法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
5.2.1.4 配置选项 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
5.2.1.5 API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
5.2.2 调度 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
5.2.2.1 概念 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
5.2.2.1.1 线程状态 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
5.2.2.1.2 线程优先级 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
5.2.2.1.3 调度算法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
5.2.2.1.4 协作式时间片 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
5.2.2.1.5 抢占式时间片 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
5.2.2.1.6 调度器锁 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5.2.2.1.7 线程睡眠 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5.2.2.1.8 忙等待 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5.2.2.2 建议的用法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5.2.2.3 配置选项 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5.2.2.4 APIs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
5.2.3 自定义数据 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
ii
![](https://csdnimg.cn/release/download_crawler_static/88197903/bg5.jpg)
5.2.3.1 概念 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
5.2.3.2 实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
5.2.3.2.1 使用自定义数据 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
5.2.3.3 建议的用法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
5.2.3.4 配置选项 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
5.2.3.5 API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
5.2.4 系统线程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
5.2.4.1 概念 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5.2.4.2 实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5.2.4.2.1 写一个 main() 函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5.2.4.3 建议的用法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5.2.4.4 配置选项 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
5.2.4.5 API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
5.2.5 工作队列 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
5.2.5.1 概念 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
5.2.5.1.1 工作项的生命周期 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
5.2.5.1.2 延迟的工作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
5.2.5.1.3 系统工作队列 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
5.2.5.2 实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
5.2.5.2.1 定义一个工作队列 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
5.2.5.2.2 提交工作项 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
5.2.5.2.3 提交一个延迟的工作项 . . . . . . . . . . . . . . . . . . . . . . . . . . 42
5.2.5.3 建议的用法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
5.2.5.4 配置选项 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
5.2.5.5 API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
5.3 Timing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
5.3.1 内核时钟 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
5.3.1.1 概念 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
5.3.1.1.1 时钟的局限性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
5.3.1.2 实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
5.3.1.2.1 标准精度的时间测量 . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
5.3.1.2.2 高精度的时间测量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
5.3.1.3 建议的用法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.3.1.4 配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.3.1.5 API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.3.2 定时器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.3.2.1 概念 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
5.3.2.1.1 定时器的局限性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
5.3.2.2 实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
5.3.2.2.1 定义一个定时器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
5.3.2.2.2 使用定时器的期满函数 . . . . . . . . . . . . . . . . . . . . . . . . . . 47
5.3.2.2.3 读取定时器状态值 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5.3.2.2.4 使用定时器状态值同步 . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5.3.2.3 建议的用法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
5.3.2.4 配置选项 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
5.3.2.5 APIs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
5.4 内存分配 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
5.4.1 内存片 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
5.4.1.1 概念 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
5.4.1.1.1 内部操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
5.4.1.2 实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
5.4.1.2.1 定义内存片 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
5.4.1.2.2 分配内存块 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
5.4.1.2.3 释放内存块 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
iii