描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787111603825
编辑推荐
开发者越来越多地集成Linux到嵌入式系统中。Linux几乎支持所有硬件架构和很多外设,可扩展性好,能提供完整的源代码,并且不要求特许权使用费。Yocto项目使得定制Linux用于嵌入式系统变得尤其简单。如果你是有实际Linux经验的开发者,那么本书将帮助你物尽其用。
本书提供了对Yocto项目构建系统和引擎的深入探究,并且讲授了从板支持包到合规管理的高级主题。通过阅读本书,你将学习如何
·解决创建定制嵌入式发行版的关键挑战
·用OpenEmbedded构建系统启动和迭代操作系统栈的构建
·掌握构建工作流、架构和BitBake构建引擎
·快速故障排除构建问题
·用内置的蓝图或者从头开始定制新的发行版
·使用BitBake菜谱创建新软件包
·构建内核、设置配置和应用补丁
·支持多样的CPU架构和系统
·为硬件特定的调整创建板支持包
·为往返开发提供应用开发工具包
·在实际硬件目标上进行远程运行和调试应用
·确保开源许可合规
·用Toaster、构建历史、源仓库和自动构建器扩展基于团队的项目
本书提供了对Yocto项目构建系统和引擎的深入探究,并且讲授了从板支持包到合规管理的高级主题。通过阅读本书,你将学习如何
·解决创建定制嵌入式发行版的关键挑战
·用OpenEmbedded构建系统启动和迭代操作系统栈的构建
·掌握构建工作流、架构和BitBake构建引擎
·快速故障排除构建问题
·用内置的蓝图或者从头开始定制新的发行版
·使用BitBake菜谱创建新软件包
·构建内核、设置配置和应用补丁
·支持多样的CPU架构和系统
·为硬件特定的调整创建板支持包
·为往返开发提供应用开发工具包
·在实际硬件目标上进行远程运行和调试应用
·确保开源许可合规
·用Toaster、构建历史、源仓库和自动构建器扩展基于团队的项目
鲁道夫·J. 斯特雷夫(Rudolf J. Streif)有超过20年的软件工程经验,先是开发者,后作为领导大型跨职能工程团队的经理。作为Linux基金会的嵌入式解决方案总监,他负责协调基金会对Linux用于嵌入式系统的工作。他开发了Linux基金会关于Yocto项目的培训课程,并且在企业以及Linux基金会活动中以速成教程的形式讲授过多次。
内容简介
通过本书,你将会学习OpenEmbedded构建系统如何工作、如何编写菜谱来构建你自己的软件组件、如何使用和创建Yocto项目板支持包来支持不同的硬件平台以及如何调试构建失败。你将学习如何为应用开发构建软件开发包以及如何为无缝的往返做开发并将它们和流行的Eclipse集成开发环境(IntegratedDevelopmentEnvironment,IDE)集成起来。
目 录
Contents?目 录
译者序
序
前言
致谢
第1章 用于嵌入式系统的Linux 1
1.1 为什么为嵌入式系统选择Linux 1
1.2 嵌入式Linux形势 3
1.2.1 嵌入式Linux发行版 3
1.2.2 嵌入式Linux开发工具 4
1.3 定制Linux发行版—为什么困难 6
1.4 关于开源许可的几句话 8
1.5 组织、相关实体和标准 9
1.5.1 Linux基金会 9
1.5.2 Apache软件基金会 9
1.5.3 Eclipse基金会 9
1.5.4 Linux标准基 10
1.5.5 消费电子产品工作组 10
1.6 总结 11
1.7 参考文献 11
第2章 Yocto项目 12
2.1 启动个Yocto项目构建 12
2.1.1 先决条件 13
2.1.2 获取Yocto项目工具 14
2.1.3 设置构建主机 15
2.1.4 配置构建环境 16
2.1.5 启动构建 18
2.1.6 验证构建结果 19
2.1.7 Yocto项目构建器具 19
2.2 Yocto项目系列 20
2.3 历史概览 22
2.3.1 OpenEmbedded 22
2.3.2 BitBake 22
2.3.3 Poky Linux 23
2.3.4 Yocto项目 23
2.3.5 OpenEmbedded和Yocto项目的关系 23
2.4 Yocto项目术语 24
2.5 总结 25
2.6 参考文献 26
第3章 OpenEmbedded构建系统 27
3.1 构建开源软件包 27
3.1.1 获取 28
3.1.2 解压 28
3.1.3 打补丁 28
3.1.4 配置 29
3.1.5 构建 29
3.1.6 安装 29
3.1.7 打包 30
3.2 OpenEmbedded工作流 30
3.2.1 元数据文件 31
3.2.2 工作流过程步骤 33
3.3 OpenEmbedded构建系统架构 35
3.3.1 构建系统结构 36
3.3.2 构建环境结构 39
3.3.3 元数据层结构 41
3.4 总结 44
3.5 参考文献 44
第4章 BitBake构建引擎 45
4.1 获取和安装BitBake 45
4.1.1 使用发布快照 46
4.1.2 克隆BitBake开发仓库 46
4.1.3 构建和安装BitBake 46
4.2 运行BitBake 46
4.2.1 BitBake执行环境 47
4.2.2 BitBake命令行 48
4.3 BitBake元数据 54
4.4 元数据语法 55
4.4.1 注释 55
4.4.2 变量 55
4.4.3 包含 59
4.4.4 继承 60
4.4.5 可执行元数据 61
4.4.6 元数据属性 66
4.4.7 元数据名(键)扩展 66
4.5 源下载 66
4.5.1 使用Fetch类 67
4.5.2 获取器实现 68
4.5.3 镜像 72
4.6 HelloWorld—BitBake方式 74
4.7 依赖处理 77
4.7.1 配置 77
4.7.2 声明依赖 78
4.7.3 多个提供器 79
4.8 版本选择 79
4.9 变体 80
4.10 默认元数据 80
4.10.1 变量 81
4.10.2 任务 84
4.11 总结 84
4.12 参考文献 85
第5章 故障排除 86
5.1 记日志 86
5.1.1 日志文件 87
5.1.2 使用记日志语句 90
5.2 任务执行 92
5.2.1 执行特定任务 93
5.2.2 任务脚本文件 94
5.3 分析元数据 94
5.4 开发shell 95
5.5 依赖性关系图 95
5.6 调试层 97
5.7 总结 98
第6章 Linux系统架构 100
6.1 Linux或者GNU/Linux? 100
6.2 Linux系统的剖析 101
6.3 引导加载程序 102
6.3.1 引导加载程序的角色 102
6.3.2 Linux引导加载程序 103
6.4 内核 106
6.4.1 主要Linux内核子系统 107
6.4.2 Linux内核启动 111
6.5 用户空间 112
6.6 总结 113
6.7 参考文献 113
第7章 构建定制Linux发行版 114
7.1 核心镜像—?Linux发行版蓝图 114
7.1.1 通过本地配置来扩展核心镜像 117
7.1.2 用QEMU测试镜像 118
7.1.3 使用构建历史验证和比较镜像 119
7.1.4 用菜谱扩展核心镜像 120
7.1.5 镜像特性 120
7.1.6 包组 122
7.2 从头构建镜像 126
7.3 镜像选项 128
7.3.1 语言和区域 128
7.3.2 包管理 128
7.3.3 镜像大小 129
7.3.4 根文件系统类型 130
7.3.5 用户、组和密码 131
7.3.6 调整根文件系统 132
7.4 发行版配置 134
7.4.1 标准发行版策略 134
7.4.2 Poky发行版策略 135
7.4.3 发行版特性 140
7.4.4 系统管理器 142
7.4.5 默认发行版设置 143
7.5 外部层 144
7.6 Hob 145
7.7 总结 147
第8章 软件包菜谱 148
8.1 菜谱布局和惯例 148
8.1.1 菜谱文件名 149
8.1.2 菜谱布局 149
8.1.3 格式指导方针 156
8.2 写新菜谱 157
8.2.1 建立菜谱 159
8.2.2 获取源代码 159
8.2.3 解压源代码 160
8.2.4 为源代码打补丁 161
8.2.5 增加许可信息 161
8.2.6 配置源代码 162
8.2.7 编译 163
8.2.8 安装构建输出 164
8.2.9 设置系统服务 165
8.2.10 打包构建输出 166
8.2.11 定制安装脚本 168
8.2.12 变体 169
8.3 菜谱例子 170
8.3.1 C文件软件包 170
8.3.2 基于makefile的软件包 171
8.3.3 基于CMake的软件包 173
8.3.4 基于GNU Autotools的软件包 174
8.3.5 外部构建软件包 175
8.4 devtool 175
8.4.1 使用devtool的往返开发 176
8.4.2 用于现有菜谱的工作流 179
8.5 总结 180
8.6 参考文献 180
第9章 内核菜谱 181
9.1 内核配置 182
9.1.1 菜单配置 182
9.1.2 配置片段 184
9.2 内核
译者序
序
前言
致谢
第1章 用于嵌入式系统的Linux 1
1.1 为什么为嵌入式系统选择Linux 1
1.2 嵌入式Linux形势 3
1.2.1 嵌入式Linux发行版 3
1.2.2 嵌入式Linux开发工具 4
1.3 定制Linux发行版—为什么困难 6
1.4 关于开源许可的几句话 8
1.5 组织、相关实体和标准 9
1.5.1 Linux基金会 9
1.5.2 Apache软件基金会 9
1.5.3 Eclipse基金会 9
1.5.4 Linux标准基 10
1.5.5 消费电子产品工作组 10
1.6 总结 11
1.7 参考文献 11
第2章 Yocto项目 12
2.1 启动个Yocto项目构建 12
2.1.1 先决条件 13
2.1.2 获取Yocto项目工具 14
2.1.3 设置构建主机 15
2.1.4 配置构建环境 16
2.1.5 启动构建 18
2.1.6 验证构建结果 19
2.1.7 Yocto项目构建器具 19
2.2 Yocto项目系列 20
2.3 历史概览 22
2.3.1 OpenEmbedded 22
2.3.2 BitBake 22
2.3.3 Poky Linux 23
2.3.4 Yocto项目 23
2.3.5 OpenEmbedded和Yocto项目的关系 23
2.4 Yocto项目术语 24
2.5 总结 25
2.6 参考文献 26
第3章 OpenEmbedded构建系统 27
3.1 构建开源软件包 27
3.1.1 获取 28
3.1.2 解压 28
3.1.3 打补丁 28
3.1.4 配置 29
3.1.5 构建 29
3.1.6 安装 29
3.1.7 打包 30
3.2 OpenEmbedded工作流 30
3.2.1 元数据文件 31
3.2.2 工作流过程步骤 33
3.3 OpenEmbedded构建系统架构 35
3.3.1 构建系统结构 36
3.3.2 构建环境结构 39
3.3.3 元数据层结构 41
3.4 总结 44
3.5 参考文献 44
第4章 BitBake构建引擎 45
4.1 获取和安装BitBake 45
4.1.1 使用发布快照 46
4.1.2 克隆BitBake开发仓库 46
4.1.3 构建和安装BitBake 46
4.2 运行BitBake 46
4.2.1 BitBake执行环境 47
4.2.2 BitBake命令行 48
4.3 BitBake元数据 54
4.4 元数据语法 55
4.4.1 注释 55
4.4.2 变量 55
4.4.3 包含 59
4.4.4 继承 60
4.4.5 可执行元数据 61
4.4.6 元数据属性 66
4.4.7 元数据名(键)扩展 66
4.5 源下载 66
4.5.1 使用Fetch类 67
4.5.2 获取器实现 68
4.5.3 镜像 72
4.6 HelloWorld—BitBake方式 74
4.7 依赖处理 77
4.7.1 配置 77
4.7.2 声明依赖 78
4.7.3 多个提供器 79
4.8 版本选择 79
4.9 变体 80
4.10 默认元数据 80
4.10.1 变量 81
4.10.2 任务 84
4.11 总结 84
4.12 参考文献 85
第5章 故障排除 86
5.1 记日志 86
5.1.1 日志文件 87
5.1.2 使用记日志语句 90
5.2 任务执行 92
5.2.1 执行特定任务 93
5.2.2 任务脚本文件 94
5.3 分析元数据 94
5.4 开发shell 95
5.5 依赖性关系图 95
5.6 调试层 97
5.7 总结 98
第6章 Linux系统架构 100
6.1 Linux或者GNU/Linux? 100
6.2 Linux系统的剖析 101
6.3 引导加载程序 102
6.3.1 引导加载程序的角色 102
6.3.2 Linux引导加载程序 103
6.4 内核 106
6.4.1 主要Linux内核子系统 107
6.4.2 Linux内核启动 111
6.5 用户空间 112
6.6 总结 113
6.7 参考文献 113
第7章 构建定制Linux发行版 114
7.1 核心镜像—?Linux发行版蓝图 114
7.1.1 通过本地配置来扩展核心镜像 117
7.1.2 用QEMU测试镜像 118
7.1.3 使用构建历史验证和比较镜像 119
7.1.4 用菜谱扩展核心镜像 120
7.1.5 镜像特性 120
7.1.6 包组 122
7.2 从头构建镜像 126
7.3 镜像选项 128
7.3.1 语言和区域 128
7.3.2 包管理 128
7.3.3 镜像大小 129
7.3.4 根文件系统类型 130
7.3.5 用户、组和密码 131
7.3.6 调整根文件系统 132
7.4 发行版配置 134
7.4.1 标准发行版策略 134
7.4.2 Poky发行版策略 135
7.4.3 发行版特性 140
7.4.4 系统管理器 142
7.4.5 默认发行版设置 143
7.5 外部层 144
7.6 Hob 145
7.7 总结 147
第8章 软件包菜谱 148
8.1 菜谱布局和惯例 148
8.1.1 菜谱文件名 149
8.1.2 菜谱布局 149
8.1.3 格式指导方针 156
8.2 写新菜谱 157
8.2.1 建立菜谱 159
8.2.2 获取源代码 159
8.2.3 解压源代码 160
8.2.4 为源代码打补丁 161
8.2.5 增加许可信息 161
8.2.6 配置源代码 162
8.2.7 编译 163
8.2.8 安装构建输出 164
8.2.9 设置系统服务 165
8.2.10 打包构建输出 166
8.2.11 定制安装脚本 168
8.2.12 变体 169
8.3 菜谱例子 170
8.3.1 C文件软件包 170
8.3.2 基于makefile的软件包 171
8.3.3 基于CMake的软件包 173
8.3.4 基于GNU Autotools的软件包 174
8.3.5 外部构建软件包 175
8.4 devtool 175
8.4.1 使用devtool的往返开发 176
8.4.2 用于现有菜谱的工作流 179
8.5 总结 180
8.6 参考文献 180
第9章 内核菜谱 181
9.1 内核配置 182
9.1.1 菜单配置 182
9.1.2 配置片段 184
9.2 内核
前 言
前 言?Preface
智能家居、智能汽车、智能手机、智能电视、智能恒温器、智能电灯、智能手表、智能洗衣机、智能烘干机、智能冰箱以及智能篮球。欢迎来到智能万物的勇敢新世界。
在日常生活中,我们触及和交互的几乎所有东西中都有嵌入式计算机,它的剧增,使得嵌入式系统工程和嵌入式软件开发受到了瞩目。嵌入式系统隐藏在其用户的直接视线之外,它们缺少那些带有浮华用户界面的网络应用所具有的吸引力,也缺少那些带有动画和逼真图像的计算机游戏所具有的酷酷的感觉。毫不奇怪的是,计算机科学专业的学生和软件开发者几乎不会把嵌入式软件工程当成他们的职业选择。然而,“智能万物革命”和物联网正在推动人们对那些能够桥接硬件和软件世界的专业人士的需求。那些使用电路原理图语言和编程语言的专家将受到雇主的追捧。
对于爆炸式增多的嵌入式应用来说,Linux已经成为选择。对于这种选择,有很多恰当的理由。我们将在接下来的章节中详细阐述这些理由。经历了作为服务于各种行业的嵌入式软件开发者的旅程,我通过艰辛的方式学习了嵌入式系统的Linux。对几乎任何编程语言来说,都不缺少优秀的开发工具。绝大部分用于Linux的库和应用都会由于它们的工具化而被简单原生地构建。使用内核自有的构建系统,即使从头开始构建Linux内核几乎也是一件轻而易举的事。然而,当需要把所有的东西整合进可启动的系统时,选择就很少了。
通过提供一套全面的、以OpenEmbedded构建系统为中心的集成化工具,Yocto项目弥补了这种鸿沟。在大约几个小时内实现从源代码到可启动的系统——我希望在我开始使用嵌入式Linux的时候会有这样的奢侈。
本书定位
集成多个不同的必要步骤来从头创建完全可用的Linux操作系统栈的构建系统是相当复杂的。本书专注于构建系统本身以及如何有效使用它来构建定制的Linux发行版。本书不是关于嵌入式Linux的教程。虽然第6章解释了Linux系统架构的基础(因为该信息对于理解构建系统如何组合多个不同的组件成为可运行的系统是必要的),但是就嵌入式Linux本身而言,不会深入它的细节。如果你是嵌入式Linux开发新手,那么强烈推荐Christopher Hallinan的好书《Embedded Linux Primer》,该书与本书是同一系列丛书(Prentice Hall开源软件开发系列)。
在本书中,你将会学习OpenEmbedded构建系统如何工作、如何编写菜谱(recipe)来构建你自己的软件组件、如何使用和创建Yocto项目板支持包(Board Support Package,BSP)来支持不同的硬件平台以及如何调试构建失败。你还将学习如何为应用开发构建软件开发包,以及如何为了无缝的往返开发(round-trip development)而把这些开发包和流行的Eclipse集成开发环境(Integrated Development Environment,IDE)集成起来。
本书读者
本书面向那些具有Linux实践知识的软件开发者和程序员。假设你熟悉Linux命令行,可以使用典型的工具(例如Make和C/C++编译器)在Linux系统上构建程序,还可以阅读和理解基本的shell脚本。
构建系统是完全用Python编写的。即使你不是Python专家也可以使用它,并理解它如何工作,但是具备一些核心的Python知识一定是有利的。
本书内容
第1章对采用嵌入式系统的Linux进行简要介绍,为嵌入式Linux的形势和创建定制嵌入式发行版的挑战的概览奠定了基础。
第2章通过用构建系统启动Linux操作系统栈的首次构建来介绍Yocto项目,同时也给出了Yocto项目系列和Yocto项目历史的概览。
第3章解释了构建系统的基础、工作流和架构。
第4章解析了BitBake——处于OpenEmbedded构建系统核心的构建引擎。其中解释了菜谱(recipe)的元数据(metadata)概念、类、配置文件及其语法。BitBake方式的“Hello World”项目说明了构建工作流。通过提供的信息,你会获得用于理解所提供的菜谱和编写自己的菜谱的必要知识。
第5章介绍了可用于对构建问题进行故障排除的工具和机制,并且提供了如何有效使用这些工具的实用建议。
第6章提供了Linux操作系统栈的基础,并解释了不同组件是如何分层的。另外还讨论了内核空间和用户空间的概念以及应用程序如何通过由标准C库提供的系统调用来和Linux内核交互。
第7章细致讲解了如何使用Yocto项目创建定制化的Linux发行版。它以构建系统可用的Linux发行版蓝图以及如何定制它们的简要介绍作为开始。然后演示了如何使用构建系统工具完全从头创建Linux发行版。读完本章以后,你将知道如何构建自己的操作系统镜像。
第8章解释了BitBake菜谱以及如何编写它们来用构建系统构建自己的软件包。这一章提供了你可以尝试的各种真实世界的菜谱例子。
第9章仔细研究了用OpenEmbedded构建系统来构建Linux内核的细节,解释了构建系统工具如何与内核的构建环境交互以设置内核配置和应用补丁。本章以关于构建系统如何处理树外(out-of-tree)内核模块以及合并构建设备树和构建过程的讨论结束。
第10章介绍了构建系统如何支持针对不同硬件的构建——也就是说,为不同CPU架构和系统构建。在介绍了Yocto项目板支持包的概念以后,本章细致讲解了如何使用板支持包构建项目。然后研究了Yocto项目板支持包的内部原理,并用实际的例子来解释如何构建自己的板支持包,你可以将这个例子使用在真实硬件上。本章以为不同硬件配置创建可启动介质镜像结束。
第11章描述了Yocto项目对开发应用的支持,这些应用被用在通过构建系统创建的Linux操作系统栈上。其中提供了关于如何构建那些包含用于往返应用开发的全部必需工具的应用开发工具集(Application Development Toolkit,ADT)的实际操作指南。示例说明了如何通过命令行工具和Eclipse集成开发环境来将应用开发工具集用于应用开发。指南会一步步教你如何远程运行和调试真实硬件目标上的应用。
第12章讨论了对于开源许可合规性的要求以及Yocto项目提供的那些有助于满足要求的工具。
第13章介绍了帮助你把Yocto项目扩展到团队的一些工具。Toaster是基于Web的图形用户界面,它可用于创建能从Web浏览器远程控制的构建系统。构建历史是提供追踪和审计能力的工具。使用源镜像,你可以共享源包来避免重复的下载,并为产品交付控制源版本。后但并非不重要的是,Autobuilder为自动化构建、质量保证和发布过程提供了开箱即用的持续构建和集成框架。掌握了本章的知识后,你可以为Yocto项目有效地设置团队环境。
附录包括流行的开源许可,以及以字母排序的构建系统元数据层和机器的参考。
动手操作经验
本书的撰写目的是提供Yocto项目的实际动手操作经验。如果依照并且尝试了相关示例,那么你会收获良多。它们中的大部分可以依赖运行Linux发行版的基于x86的工作站来轻松完成(详细的需求会在第2章提供)。为了获得更好的经验,要利用流行的开发板,例如BeagleBone、MinnowBoard Max或者Wandboard。BeagleBone是优秀的低成本的实验平台。另外两个板提供更好的性能,也让你获得关于多核系统的经验。
分析代码并且尝试理解本书的代码。遵循步骤,然后通过改变设置、应用你自己的配置等来完成自己的设计。这是好的学习方式,并且我可以告诉你,这也相当有趣。让你自己的个Linux发行版工作在你选择的一个硬件上是很棒的体验。
智能家居、智能汽车、智能手机、智能电视、智能恒温器、智能电灯、智能手表、智能洗衣机、智能烘干机、智能冰箱以及智能篮球。欢迎来到智能万物的勇敢新世界。
在日常生活中,我们触及和交互的几乎所有东西中都有嵌入式计算机,它的剧增,使得嵌入式系统工程和嵌入式软件开发受到了瞩目。嵌入式系统隐藏在其用户的直接视线之外,它们缺少那些带有浮华用户界面的网络应用所具有的吸引力,也缺少那些带有动画和逼真图像的计算机游戏所具有的酷酷的感觉。毫不奇怪的是,计算机科学专业的学生和软件开发者几乎不会把嵌入式软件工程当成他们的职业选择。然而,“智能万物革命”和物联网正在推动人们对那些能够桥接硬件和软件世界的专业人士的需求。那些使用电路原理图语言和编程语言的专家将受到雇主的追捧。
对于爆炸式增多的嵌入式应用来说,Linux已经成为选择。对于这种选择,有很多恰当的理由。我们将在接下来的章节中详细阐述这些理由。经历了作为服务于各种行业的嵌入式软件开发者的旅程,我通过艰辛的方式学习了嵌入式系统的Linux。对几乎任何编程语言来说,都不缺少优秀的开发工具。绝大部分用于Linux的库和应用都会由于它们的工具化而被简单原生地构建。使用内核自有的构建系统,即使从头开始构建Linux内核几乎也是一件轻而易举的事。然而,当需要把所有的东西整合进可启动的系统时,选择就很少了。
通过提供一套全面的、以OpenEmbedded构建系统为中心的集成化工具,Yocto项目弥补了这种鸿沟。在大约几个小时内实现从源代码到可启动的系统——我希望在我开始使用嵌入式Linux的时候会有这样的奢侈。
本书定位
集成多个不同的必要步骤来从头创建完全可用的Linux操作系统栈的构建系统是相当复杂的。本书专注于构建系统本身以及如何有效使用它来构建定制的Linux发行版。本书不是关于嵌入式Linux的教程。虽然第6章解释了Linux系统架构的基础(因为该信息对于理解构建系统如何组合多个不同的组件成为可运行的系统是必要的),但是就嵌入式Linux本身而言,不会深入它的细节。如果你是嵌入式Linux开发新手,那么强烈推荐Christopher Hallinan的好书《Embedded Linux Primer》,该书与本书是同一系列丛书(Prentice Hall开源软件开发系列)。
在本书中,你将会学习OpenEmbedded构建系统如何工作、如何编写菜谱(recipe)来构建你自己的软件组件、如何使用和创建Yocto项目板支持包(Board Support Package,BSP)来支持不同的硬件平台以及如何调试构建失败。你还将学习如何为应用开发构建软件开发包,以及如何为了无缝的往返开发(round-trip development)而把这些开发包和流行的Eclipse集成开发环境(Integrated Development Environment,IDE)集成起来。
本书读者
本书面向那些具有Linux实践知识的软件开发者和程序员。假设你熟悉Linux命令行,可以使用典型的工具(例如Make和C/C++编译器)在Linux系统上构建程序,还可以阅读和理解基本的shell脚本。
构建系统是完全用Python编写的。即使你不是Python专家也可以使用它,并理解它如何工作,但是具备一些核心的Python知识一定是有利的。
本书内容
第1章对采用嵌入式系统的Linux进行简要介绍,为嵌入式Linux的形势和创建定制嵌入式发行版的挑战的概览奠定了基础。
第2章通过用构建系统启动Linux操作系统栈的首次构建来介绍Yocto项目,同时也给出了Yocto项目系列和Yocto项目历史的概览。
第3章解释了构建系统的基础、工作流和架构。
第4章解析了BitBake——处于OpenEmbedded构建系统核心的构建引擎。其中解释了菜谱(recipe)的元数据(metadata)概念、类、配置文件及其语法。BitBake方式的“Hello World”项目说明了构建工作流。通过提供的信息,你会获得用于理解所提供的菜谱和编写自己的菜谱的必要知识。
第5章介绍了可用于对构建问题进行故障排除的工具和机制,并且提供了如何有效使用这些工具的实用建议。
第6章提供了Linux操作系统栈的基础,并解释了不同组件是如何分层的。另外还讨论了内核空间和用户空间的概念以及应用程序如何通过由标准C库提供的系统调用来和Linux内核交互。
第7章细致讲解了如何使用Yocto项目创建定制化的Linux发行版。它以构建系统可用的Linux发行版蓝图以及如何定制它们的简要介绍作为开始。然后演示了如何使用构建系统工具完全从头创建Linux发行版。读完本章以后,你将知道如何构建自己的操作系统镜像。
第8章解释了BitBake菜谱以及如何编写它们来用构建系统构建自己的软件包。这一章提供了你可以尝试的各种真实世界的菜谱例子。
第9章仔细研究了用OpenEmbedded构建系统来构建Linux内核的细节,解释了构建系统工具如何与内核的构建环境交互以设置内核配置和应用补丁。本章以关于构建系统如何处理树外(out-of-tree)内核模块以及合并构建设备树和构建过程的讨论结束。
第10章介绍了构建系统如何支持针对不同硬件的构建——也就是说,为不同CPU架构和系统构建。在介绍了Yocto项目板支持包的概念以后,本章细致讲解了如何使用板支持包构建项目。然后研究了Yocto项目板支持包的内部原理,并用实际的例子来解释如何构建自己的板支持包,你可以将这个例子使用在真实硬件上。本章以为不同硬件配置创建可启动介质镜像结束。
第11章描述了Yocto项目对开发应用的支持,这些应用被用在通过构建系统创建的Linux操作系统栈上。其中提供了关于如何构建那些包含用于往返应用开发的全部必需工具的应用开发工具集(Application Development Toolkit,ADT)的实际操作指南。示例说明了如何通过命令行工具和Eclipse集成开发环境来将应用开发工具集用于应用开发。指南会一步步教你如何远程运行和调试真实硬件目标上的应用。
第12章讨论了对于开源许可合规性的要求以及Yocto项目提供的那些有助于满足要求的工具。
第13章介绍了帮助你把Yocto项目扩展到团队的一些工具。Toaster是基于Web的图形用户界面,它可用于创建能从Web浏览器远程控制的构建系统。构建历史是提供追踪和审计能力的工具。使用源镜像,你可以共享源包来避免重复的下载,并为产品交付控制源版本。后但并非不重要的是,Autobuilder为自动化构建、质量保证和发布过程提供了开箱即用的持续构建和集成框架。掌握了本章的知识后,你可以为Yocto项目有效地设置团队环境。
附录包括流行的开源许可,以及以字母排序的构建系统元数据层和机器的参考。
动手操作经验
本书的撰写目的是提供Yocto项目的实际动手操作经验。如果依照并且尝试了相关示例,那么你会收获良多。它们中的大部分可以依赖运行Linux发行版的基于x86的工作站来轻松完成(详细的需求会在第2章提供)。为了获得更好的经验,要利用流行的开发板,例如BeagleBone、MinnowBoard Max或者Wandboard。BeagleBone是优秀的低成本的实验平台。另外两个板提供更好的性能,也让你获得关于多核系统的经验。
分析代码并且尝试理解本书的代码。遵循步骤,然后通过改变设置、应用你自己的配置等来完成自己的设计。这是好的学习方式,并且我可以告诉你,这也相当有趣。让你自己的个Linux发行版工作在你选择的一个硬件上是很棒的体验。
评论
还没有评论。