Contents 第1章 Yocto项目. 23 1.1 嵌入式Linux系统. 23 1.1.1 什么是嵌入式系统?. 23 1.1.1.1 嵌入式系统的特点. 23 1.1.1.2 当前流行的嵌入式系统. 23 1.1.2 嵌入式Linux系统简介. 23 1.1.3 嵌入式Linux系统的应用领域. 23 物联网(IoT). 23 汽车电子. 24 工业自动化. 24 医疗设备. 24 1.1.4 嵌入式Linux系统构建工具. 24 Buildroot 24 PTXdist 24 OpenEmbedded 24 Yocto项目. 24 1.1.5 嵌入式Linux系统发行版. 24 Raspberry Pi OS 24 OpenWrt 25 balenaOS 25 Android 25 1.1.6 总结. 25 1.1.7 参考文献. 25 1.2 什么是Yocto项目?. 25 1.2.1 Yocto项目的起源. 25 1.2.2 从Buildroot到Yocto项目. 26 1.2.3 社区与资源. 26 1.2.3.1 在线资源. 26 Yocto项目源代码库. 26 Yocto项目兼容层. 26 OpenEmbedded层索引. 26 1.2.3.2 社区成员. 26 1.2.4 总结. 27 1.2.5 参考文献. 27 1.3 Yocto项目概览. 27 1.3.1 版本管理. 27 1.3.1.1 版本和特性概览. 27 当前发布系列. 27 先前发布系列. 28 1.3.1.2 版本选择策略. 28 1.3.2 子项目概览. 28 1.3.2.1 早期成熟子项目. 28 1.3.2.2 近期新增的子项目. 29 1.3.3 常用术语与变量. 29 1.3.3.1 常用术语. 29 Yocto Project Compatible Layers 30 1.3.3.2 变量术语. 30 1.3.4 总结. 31 1.3.5 参考文献. 31 1.4 特性与挑战. 31 1.4.1 特性与优势. 31 广泛支持与兼容性. 31 灵活性与定制能力. 31 稳定性与社区生态. 32 1.4.2 面临的挑战. 32 陡峭的学习曲线. 32 理解项目定制的复杂性. 32 与传统开发流程的差异. 32 交叉构建环境的复杂性. 32 长时间的初次构建. 32 硬件资源的限制与优化. 32 1.4.3 经验总结. 32 1.4.3.1 角色与学习策略. 32 1.4.3.2 利用官方文档与社区资源. 33 1.4.3.3 谨慎选择项目版本. 33 内核版本选择. 33 库文件版本. 33 1.4.3.4 优先处理关键任务,提高项目效率. 33 无需深入研究类文件. 33 快速处理QA检查. 33 有效利用缓存和增量构建. 33 1.4.4 总结. 33 1.4.5 参考文献. 34 第2章 Linux系统架构. 35 2.1 GNU/Linux 35 2.1.1 什么是GNU/Linux?. 35 2.1.2 Linux系统架构. 35 2.2 Bootloader 36 2.2.1 Bootloader启动流程. 36 2.2.2 常用的Bootloader 37 2.2.3 U-Boot简介. 37 2.3 内核空间. 38 2.3.1 Linux内核. 38 2.3.1.1 内核结构与功能. 38 2.3.1.2 内核版本. 39 2.3.2 控制硬件资源. 40 2.3.2.1 设备驱动. 40 2.3.2.2 中断处理(考虑把它换成 ARCH架构). 40 2.3.2.3 I /O设备管理. 40 2.3.2.4 内存管理. 40 2.3.3 服务用户空间. 41 2.3.3.1 系统调用接口. 41 2.3.3.2 进程管理. 41 2.3.3.3 文件系统管理. 41 2.3.3.4 网络服务. 41 2.4 用户空间. 41 2.4.1 根文件系统. 41 2.4.2 标准C库. 42 2.4.2.1 标准C库的功能. 42 2.4.2.2 常用的标准C库. 42 2.4.3 系统共享库. 43 2.4.4 init进程. 43 2.4.5 窗口管理系统. 44 第3章 Yocto项目基础架构. 45 3.1 快速构建指南. 45 3.1.1 搭建构建主机环境. 45 3.1.2 下载Poky源代码. 45 3.1.3 初始化OpenEmbedded构建环境. 46 3.1.4 构建镜像. 47 3.1.5 QEMU启动镜像. 47 3.1.6 参考文献. 48 3.2 Yocto项目架构. 49 3.2.1 层模型. 49 3.2.2 核心组件. 49 3.2.3 构建主机. 51 3.3 OpenEmbedded构建系统. 51 3.3.1 Bitbake构建引擎. 51 3.3.2 OpenEmbedded-Core 51 3.3.2.1 OE-Core与Yocto项目的关系. 51 3.3.2.2 OE-Core源代码结构. 52 3.3.3 构建系统工作流. 52 3.4 OpenEmbedded构建环境. 53 3.4.1 构建环境配置脚本. 53 3.4.2 构建目录结构. 54 3.4.3 构建输出结构. 54 3.4.3.1 work目录结构. 55 菜谱工作目录结构. 55 WORKDIR子目录说明. 55 work目录示例. 55 3.4.3.2 deploy目录结构. 56 3.4.3.3 deploy目录结构. 56 第4章 元数据架构. 57 4.1 元数据. 57 4.1.1 元数据概念. 57 4.1.2 元数据文件. 57 4.1.2.1 菜谱和追加菜谱文件. 57 4.1.2.2 配置文件. 57 构建系统中配置文件. 57 BitBake核心配置文件(bitbake.conf) 58 层配置文件(layer.conf) 58 机器配置文件(<machine-name.conf>) 58 发行版配置文件(<distro-name.conf>) 58 构建环境中配置文件. 59 层配置文件(bblayers.conf). 59 本地构建环境配置文件(local.conf) 59 4.1.2.3 类文件. 59 4.1.2.4 包含文件. 60 4.1.3 元数据语法. 60 4.1.3.1 注释. 60 4.1.3.2 变量与操作符定义. 60 变量的命名规则. 61 操作符定义. 61 变量格式. 61 4.1.3.3 变量赋值. 61 直接赋值(=) 61 默认赋值 (?=) 61 弱默值赋值 (??=) 62 4.1.3.4 变量和变量名扩展. 62