zephyrProject文档-中文版v1.6.0 pdf下载

资源来源网络,如需授权,请更换源码,模块仅供学习,如需商用请购买正版授权,本栏目不提供技术服务,积分不够请签到!如何签到?系统升级,暂停签到,恢复关注公告!
如遇下载链接蓝奏网盘打不开lanzous替换成lanzoux尝试!

Zephyr 是什么?
Zephyr 是什么?它是 Linux 的孪生兄弟,也是一个操作系统。更准确地说,它是一个专用于资源受限的 IoT
领域的操作系统。
Linux 基金会于 2016 年 2 月发布了 Zephyr 项目,希望借助它来统一物联网领域的混乱局面,以推进物联网 领域的快速发展。 3
Zephyr OS 中文档, 发布 v1.6.0
Zephyr 有啥优势
轻量级
由于 IoT 领域需要部署大量的联网设备,因此每个设备的成本必须得到控制。控制成本第一个有效方法是降 低昂贵组件的标准,例如使用 RAM 更低、ROM 更低的芯片。Zephyr 就是专为这样的芯片而生的,它可运 行在只有 8 Kb 内存的 MCU 之上,甚至能在只有 2 Kb 内存的 MCU 上演示 Hello World。
高度可配置
降低成本的另一个方式是按需裁剪硬件。物联网设备一般都是专用设备,因此在面对某个特定市场时只需 要特定的硬件。 Zephyr 借鉴了 Linux 的 Kconfig 配置系统,您可以根据硬件设备对它进行直观的配置、裁剪。

目录

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
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
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
5.4.1.3 建议的用法 51
5.4.1.4 配置选项 . 51
5.4.1.5 API . . . . . 51
5.4.2 内存池 . 52
5.4.2.1 概念 . . . . 52
5.4.2.1.1 内部操作 . . 53
5.4.2.2 实现 . . . . 53
5.4.2.2.1 定义内存池 . 53
5.4.2.2.2 分配内存块 . 53
5.4.2.2.3 释放内存块 . 54
5.4.2.2.4 内存池手工去碎片 . . . 54
5.4.2.3 建议的用法 54
5.4.2.4 配置选项 . 54
5.4.2.5 API . . . . . 54
5.4.3 堆内存池 55
5.4.3.1 概念 . . . . 55
5.4.3.1.1 内部操作 . . 55
5.4.3.2 实现 . . . . 56
5.4.3.2.1 定义堆内存池 . . . . . 56
5.4.3.2.2 分配 . . . . . 56
5.4.3.2.3 释放内存 . . 56
5.4.3.3 建议的用法 56
5.4.3.4 配置选项 . 56
5.4.3.5 API . . . . . 57
5.5 同步 . . . . . . . 57
5.5.1 信号量 . 57
5.5.1.1 概念 . . . . 57
5.5.1.2 实现 . . . . 58
5.5.1.2.1 定义信号量 . 58
5.5.1.2.2 释放信号量 . 58
5.5.1.2.3 获取信号量 . 58
5.5.1.3 建议的用法 59
5.5.1.4 配置选项 . 59
5.5.1.5 API . . . . . 59
5.5.2 互斥量 . 59
5.5.2.1 概念 . . . . 59
5.5.2.1.1 可重入锁(Reentrant Locking) . 60
5.5.2.1.2 优先级继承 . 60
5.5.2.2 实现 . . . . 60
5.5.2.2.1 定义互斥量 . 60
5.5.2.2.2 锁定互斥量 . 61
5.5.2.2.3 解锁互斥量 . 61
5.5.2.3 建议的用法 61
5.5.2.4 配置选项 . 61
5.5.2.5 API . . . . . 61
5.5.3 告警 . . . 62
5.5.3.1 概念 . . . . 62
5.5.3.1.1 告警的生命周期 . . . . 62
5.5.3.1.2 与 Unix 风格的信号的比较 . . . 63
5.5.3.2 实现 . . . . 63
5.5.3.2.1 定义告警 . . 63
5.5.3.2.2 发出告警 . . 63
5.5.3.2.3 处理告警 . . 64
5.5.3.2.4 接受告警 . . 64
iv
5.5.3.3 建议的用法 65
5.5.3.4 配置选项 . 65
5.5.3.5 API . . . . . 65
5.6 数据传递 . . . . . 65
5.6.1 Fifo . . . 65
5.6.1.1 概念 . . . . 66
5.6.1.2 实现 . . . . 66
5.6.1.2.1 定义 fifo . . . 66
5.6.1.2.2 向 fifo 中写 . 67
5.6.1.2.3 从 fifo 中读 . 67
5.6.1.3 建议的用法 67
5.6.1.4 配置选项 . 68
5.6.1.5 API . . . . . 68
5.6.2 Lifo . . . 68
5.6.2.1 概念 . . . . 68
5.6.2.2 实现 . . . . 69
5.6.2.2.1 定义 lifo . . . 69
5.6.2.2.2 向 lifo 中写 . 69
5.6.2.2.3 从 lifo 中读 . 70
5.6.2.3 建议的用法 70
5.6.2.4 配置选项 . 70
5.6.2.5 API . . . . . 70
5.6.3 栈 . . . . 70
5.6.3.1 概念 . . . . 71
5.6.3.2 实现 . . . . 71
5.6.3.2.1 定义栈 . . . 71
5.6.3.2.2 压栈 . . . . . 72
5.6.3.2.3 出栈 . . . . . 72
5.6.3.3 建议的用法 72
5.6.3.4 配置选项 . 72
5.6.3.5 API . . . . . 72
5.6.4 消息队列 73
5.6.4.1 概念 . . . . 73
5.6.4.2 实现 . . . . 74
5.6.4.2.1 定义消息队列 . . . . . 74
5.6.4.2.2 向消息队列中写 . . . . 74
5.6.4.2.3 从消息队列中读 . . . . 75
5.6.4.3 建议的用法 75
5.6.4.4 配置选项 . 75
5.6.4.5 API . . . . . 75
5.6.5 邮筒 . . . 76
5.6.5.1 概念 . . . . 76
5.6.5.1.1 消息格式 . . 76
5.6.5.1.2 消息的生命周期 . . . . 77
5.6.5.1.3 线程兼容性 . 77
5.6.5.1.4 消息流控制 . 77
5.6.5.2 实现 . . . . 77
5.6.5.2.1 定义邮筒 . . 77
5.6.5.2.2 消息描述符 . 78
5.6.5.2.3 发送消息 . . 78
5.6.5.2.4 接收消息 . . 81
5.6.5.3 建议的用法 84
5.6.5.4 配置选项 . 84
5.6.5.5 API . . . . . 84
v
5.6.6 管道 . . . 85
5.6.6.1 概念 . . . . 85
5.6.6.2 实现 . . . . 85
5.6.6.2.1 向管道中写 . 86
5.6.6.2.2 从管道中读 . 86
5.6.6.3 建议的用法 87
5.6.6.4 配置选项 . 87
5.6.6.5 API . . . . . 87
5.7 其它服务 . . . . . 88
5.7.1 中断 . . . 88
5.7.1.1 概念 . . . . 88
5.7.1.1.1 阻止中断 . . 89
5.7.1.1.2 移交 ISR 工作 . . . . . 89
5.7.1.2 实现 . . . . 89
5.7.1.2.1 定义一个 ISR 89
5.7.1.3 建议的用法 90
5.7.1.4 配置选项 . 90
5.7.1.5 API . . . . . 90
5.7.2 原子服务 91
5.7.2.1 概念 . . . . 91
5.7.2.2 实现 . . . . 91
5.7.2.2.1 定义原子变量 . . . . . 91
5.7.2.2.2 操作原子变量 . . . . . 91
5.7.2.2.3 操作原子变量数组 . . . 92
5.7.2.3 建议的用法 92
5.7.2.4 配置选项 . 92
5.7.2.5 APIs . . . . 92
5.7.3 浮点服务 93
5.7.3.1 概念 . . . . 94
5.7.3.1.1 无浮点寄存器模式 . . . 94
5.7.3.1.2 非共享浮点寄存器模式 94
5.7.3.1.3 共享浮点寄存器模式 . 94
5.7.3.2 实现 . . . . 95
5.7.3.2.1 执行浮点计算 . . . . . 95
5.7.3.3 建议的用法 95
5.7.3.4 配置选项 . 95
5.7.3.5 API . . . . . 95
5.7.4 环形缓冲 96
5.7.4.1 概念 . . . . 96
5.7.4.1.1 并发性 . . . 96
5.7.4.1.2 内部操作 . . 96
5.7.4.2 实现 . . . . 97
5.7.4.2.1 定义环形缓冲 . . . . . 97
5.7.4.2.2 数据入队 . . 97
5.7.4.2.3 重入数据 . . 98
5.7.4.3 API . . . . . 98
5.7.5 内核事件日志器 . . 98
5.7.5.1 概念 . . . . 99
5.7.5.1.1 事件的格式 . 99
5.7.5.1.2 时间戳 . . . 100
5.7.5.2 实现 . . . . 100
5.7.5.2.1 恢复事件 . . 100
5.7.5.2.2 添加自定义事件类型 . 101
5.7.5.3 配置选项 . 102
vi
5.7.5.4 API . . . . . 102
5.7.6 标准 C 库 102
5.7.7 应用程序的 C++ 支持 . . . . . 103
6 设备驱动和设备模型 105
6.1 介绍 . . . . . . . 105
6.2 标准驱动 . . . . . 105
6.3 同步调用 . . . . . 105
6.4 驱动程序 API . . 106
6.5 驱动的数据结构 . 107
6.6 子系统以及 API 结构 . . . . 107
6.7 单驱动多实例 . . 108
6.8 初始化等级 . . . 109
6.9 系统驱动 . . . . . 110
7 子子子系系系统统统 111
7.1 网络 . . . . . . . 111
7.1.1 源码树结构 . . . . . 112
7.1.1.1 网络缓冲 . 112
7.1.1.1.1 创建缓冲 . . 112
7.1.1.1.2 通用操作 . . 112
7.1.1.1.3 引用计数 . . 113
7.2 蓝牙 . . . . . . . 113
7.2.1 源码树分布 . . . . . 114
7.2.2 深入阅读 114
7.2.2.1 蓝牙 API . . 114
7.2.2.1.1 Generic Access Profile (GAP) . . 115
7.2.2.1.2 连接管理 . . 120
7.2.2.1.3 Public Members . . . . . 126
7.2.2.1.4 Generic Attribute Profile (GATT) . 126
7.2.2.1.5 Public Members . . . . . 138
7.2.2.1.6 Public Members . . . . . 138
7.2.2.1.7 Universal Unique Identifiers (UUIDs) . . . . 138
7.2.2.1.8 Logical Link Control and Adaptation Protocol (L2CAP) . . . . . . . . . . 146
7.2.2.1.9 Serial Port Emulation (RFCOMM) 148
7.2.2.1.10 数据缓冲 . . 149
7.2.2.1.11 Persistent Storage . . . . 150
7.2.2.1.12 HCI Drivers . 151
7.2.2.1.13 HCI RAW channel . . . 152
7.2.2.2 开发蓝牙应用 . . . . . 152
7.2.2.2.1 初始化 . . . 152
7.2.2.2.2 蓝牙应用例程 . . . . . 152
7.2.2.2.3 使用 QEMU 测试 . . . . 152
7.2.2.3 Qualification Testing . 153
7.2.2.3.1 PICS Features 153
7.3 USB 设备栈 . . . 172
7.3.1 USB 设备控制器驱动 . . . . . 173
7.3.1.1 结构体 . . . 173
7.3.1.2 API . . . . . 174
7.3.2 USB 设备核心层 . . 175
7.3.2.1 结构体 . . . 175
7.3.2.2 API . . . . . 176
7.3.3 USB 设备类驱动 . . 176
7.4 传感器驱动 . . . 181
vii
7.4.1 基本操作 181
7.4.1.1 通道 . . . . 181
7.4.1.2 值 . . . . . 182
7.4.1.3 获取值 . . . 182
7.4.2 配置和属性 . . . . . 183
7.4.3 触发器 . 183
7.5 电源管理 . . . . . 184
7.5.1 术语 . . . 184
7.5.1.1 架构和 SoC 相关的电源状态 . . 185
7.5.1.1.1 x86 . . . . . 185
7.5.1.1.2 ARM . . . . 185
7.5.1.1.3 ARC . . . . . 185
7.5.2 概述 . . . 185
7.5.3 策略 . . . 185
7.5.3.1 SYS_PM_LOW_POWER_STATE 186
7.5.3.2 SYS_PM_DEEP_SLEEP . . . . . 186
7.5.3.3 SYS_PM_DEVICE_SUSPEND_ONLY . . 186
7.5.4 电源管理钩子基础设施 . . . . 186
7.5.4.1 挂起钩子函数 . . . . . 186
7.5.4.2 恢复钩子函数 . . . . . 187
7.5.5 设备电源管理基础设施 . . . . 187
7.5.5.1 设备电源管理状态 . . 187
7.5.5.2 设备电源管理操作 . . 188
7.5.5.3 带电源管理的设备模型 . . . . . 188
7.5.5.3.1 默认初始化器函数 . . . 188
7.5.5.4 设备电源管理 API . . 188
7.5.5.4.1 获取设备列表 . . . . . 188
7.5.5.4.2 设备设置电源状态 . . . 189
7.5.5.4.3 设备获取电源状态 . . . 189
7.5.5.5 忙状态指示 189
7.5.5.5.1 指示忙状态的 API . . . 189
7.5.5.5.2 清除忙状态的 API . . . 189
7.5.5.5.3 检查单个设备忙状态的 API . . . 189
7.5.5.5.4 检查所有设备忙状态的 API . . . 190
7.5.6 电源管理配置标志 . 190
7.5.7 写一个电源管理应用程序 . . . 190
7.5.7.1 初始化设置 190
7.5.7.2 设备列表和策略 . . . 190
7.5.7.3 挂起期间的情景 . . . 190
7.5.7.3.1 情景 1 . . . . 191
7.5.7.3.2 情景 2 . . . . 191
7.5.7.3.3 情景 3 . . . . 191
7.5.7.4 策略决定总结 . . . . . 192
7.6 Zephyr OS Shell . 192
7.6.1 概述 . . . 192
7.6.2 使用 shell 命令 . . . 192
7.6.2.1 指定模块的命令 . . . 192
7.6.2.2 帮助命令 . 192
7.6.2.3 选择模块命令 . . . . . 192
7.6.3 Shell 配置 193
7.6.3.1 架构层 . . . 193
7.6.3.2 模块层 . . . 193
7.6.3.3 向模块中添加新功能的配置步骤 193
7.6.4 写一个新的 shell 模块 . . . . . 193
viii
7.6.5 Shell Api 函数 . . . 194
8 API 文文文档档档 195
8.1 内核 API . . . . . 195
8.1.1 线程 . . . 196
8.1.2 工作队列 201
8.1.3 时钟 . . . 204
8.1.4 定时器 . 206
8.1.5 内存片 . 208
8.1.6 内存池 . 210
8.1.7 堆内存池 211
8.1.8 信号量 . 212
8.1.9 互斥量 . 213
8.1.10 告警 . . . 214
8.1.11 FIFO . . 216
8.1.12 LIFO . . 217
8.1.13 栈 . . . . 218
8.1.14 消息队列 219
8.1.15 邮筒 . . . 221
8.1.16 管道 . . . 224
8.1.17 中断服务例程(ISR) . . . . . 226
8.1.18 原子服务 228
8.1.19 浮点服务 232
8.1.20 环形缓冲 232
8.2 设备驱动接口 . . 235
8.2.1 设备模型 235
8.3 输入/输出驱动程序 API . . . 241
8.3.1 ADC 接口 241
8.3.2 GPIO 接口 . . . . . 242
8.3.3 I2C 接口 246
8.3.3.0.1 Public Members . . . . . 250
8.3.4 IPM 接口 250
8.3.5 PWM 接口 . . . . . 252
8.3.6 Pinmux 接口 . . . . 257
8.3.7 SPI 接口 257
8.3.8 UART 接口 . . . . . 259
8.3.8.0.1 Public Members . . . . . 264
8.3.9 传感器接口 . . . . . 264
8.3.9.0.1 Public Members . . . . . 269
8.3.9.0.2 Public Members . . . . . 270
8.4 事件日志 API . . 270
8.4.1 事件日志器 . . . . . 270
8.4.2 内核事件日志器 . . 272
8.5 系统日志 API . . 275
8.5.1 系统日志 275
8.5.2 全局 Kconfig 选项 . 276
8.5.3 例程 . . . 277
8.6 电源管理 API . . 277
8.6.1 电源管理钩子接口 . 277
8.6.2 设备驱动电源管理 API . . . . 278
8.7 文件系统 API . . 281
8.7.1 文件系统函数 . . . 281
8.7.2 文件系统数据结构 . 285
8.8 Zephyr 测试框架 . 286
ix
8.8.1 快速开始 – 集成框架 286
8.8.2 快速开始 – 单元测试 287
8.8.3 API 参考 289
8.8.3.1 运行 . . . . 289
8.8.3.2 断言 . . . . 290
8.8.3.3 Mocking . . 292
9 应应应用用用程程程序序序开开开发发发原原原语语语 295
9.1 听众 . . . . . . . 295
9.2 开始之前 . . . . . 295
9.3 工作流程 . . . . . 295
9.3.1 应用程序概述 . . . 295
9.3.2 创建应用程序目录 . 296
9.3.2.1 创建应用程序和源代码目录 . . . 296
9.3.2.1.1 开始前 . . . 296
9.3.2.1.2 步骤 . . . . . 296
9.3.2.2 创建应用程序的 Makefile . . . . 297
9.3.2.2.1 开始前 . . . 297
9.3.2.2.2 步骤 . . . . . 297
9.3.2.2.3 Makefile 举例 297
9.3.2.3 支持编译第三方库 . . 298
9.3.3 为应用程序配置内核 . . . . . 298
9.3.3.1 定义应用程序的默认内核配置 . 298
9.3.3.1.1 开始前 . . . 299
9.3.3.1.2 步骤 . . . . . 299
9.3.3.2 覆盖应用程序的默认内核配置 . 299
9.3.3.2.1 开始前 . . . 299
9.3.3.2.2 步骤 . . . . . 300
9.3.4 添加应用程序相关的代码 . . . 302
9.3.4.1 添加源代码到应用程序目录 . . . 302
9.3.4.1.1 理解源代码需求 . . . . 302
9.3.4.1.2 理解 Makefile 需求 . . . 302
9.3.4.2 修改和增加内核 . . . 303
9.3.4.2.1 子系统命令规范 . . . . 303
9.3.4.2.2 包含路劲使用指南 . . . 303
9.3.5 编译应用程序 . . . 304
9.3.5.1 编译应用程序 . . . . . 304
9.3.5.1.1 开始前 . . . 304
9.3.5.1.2 步骤 . . . . . 304
9.3.5.2 重新编译应用程序 . . 305
9.3.5.2.1 步骤 . . . . . 305
9.3.5.3 从编译失败中恢复 . . 305
9.3.5.3.1 步骤 . . . . . 305
9.3.6 运行应用程序 . . . 305
9.3.6.1 使用QEMU 运行应用程序 . . . . 306
9.3.6.1.1 需求 . . . . . 306
9.3.6.1.2 步骤 . . . . . 306
9.3.6.2 在目标板上加载、运行应用程序 306
9.3.7 通用规程 306
9.3.7.1 规程 . . . . 306
9.3.7.1.1 设置环境变量 . . . . . 306
10 贡贡贡献献献代代代码码码 309
x
11 移移移植植植指指指导导导 311
11.1 架构移植指导 . . 311
11.1.1 早期的启动过程 . . 312
11.1.2 中断和异常处理 . . 312
11.1.3 线程的上下文切换 . 313
11.1.4 线程的创建和终止 . 315
11.1.5 设备驱动程序 . . . 315
11.1.5.1 中断控制器 315
11.1.5.2 系统时钟 . 316
11.1.5.2.1 无滴答空转 . 316
11.1.5.3 Console Over Serial Line . . . . . 316
11.1.6 工具库 . 316
11.1.7 CPU 空转/电源管理 317
11.1.8 错误管理 317
11.1.9 工具链和链接 . . . 317
12 编编编译译译系系系统统统用用用户户户指指指南南南 319
12.1 Kconfig 文件结构 319
12.1.1 简介 . . . 319
12.1.2 依赖 . . . 319
12.1.3 默认配置 320
12.1.4 合并配置碎片 . . . 320
12.2 配置选项参考指南 . . . . . 320
12.2.1 介绍 . . . 320
12.2.2 所支持的选项 . . . 320
12.3 Makefile . . . . . 321
12.3.1 概述 . . . 321
12.3.2 Makefile 规则 . . . . 321
12.3.3 添加源文件 . . . . . 322
12.3.4 添加目录 322
12.4 开发应用程序和编译系统 . 322
12.4.1 应用程序工程 . . . 323
12.4.2 应用程序定义 . . . 323
12.4.3 调试应用程序 . . . 323
13 Licensing of Zephyr Project components 325

欢迎阅读 Zephyr Project 的文档,当前的版本是 v1.6.0。

©下载资源版权归作者所有;本站所有资源均来源于网络,仅供学习使用,请支持正版!
风格酷 » zephyrProject文档-中文版v1.6.0 pdf下载
NOTICE:【风格酷源码资源分享】限时免费QQ群:434230249 ☉免责声明:本站所有模板均来自用户分享和网络收集,仅供学习与参考,请勿用于商业用途,如果损害了您的权利,请联系网站客服,我们核实后会立即删除。
☉如果源码网盘地址失效!或有其他问题,请点我报错,谢谢合作!
☉人民币与积分汇率为1比10,即1元=10积分.有任何疑问请联系客服
☉如有其他问题,请加网站客服QQ(330921598)进行交流。
☉本站提供的源码、模板、软件工具等其他资源,都不包含技术服务,请大家谅解!
☉源码、模板等资源会随着技术、环境的升级而存在部分问题,还请慎重选择。

发表评论

风格酷源码www.fenggeku.com 提供更优质的资源集合

立即查看 了解详情