首页 > 系统相关 >寻志同道合之人,共同完成这本-Yocto项目实战教程:高效定制嵌入式Linux系统

寻志同道合之人,共同完成这本-Yocto项目实战教程:高效定制嵌入式Linux系统

时间:2024-12-27 13:56:36浏览次数:5  
标签:Yocto 4.2 菜谱 嵌入式 构建 内核 Linux 镜像 SDK

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

变量立即扩展 (:=) 62

变量延时扩展. 62

变量名扩展. 62

4.1.3.5      变量追加、前置和移除. 62

带空格的追加和前置(+= 和 =+) 62

不带空格的追加和前置(.= 和 =.) 62

覆盖式的追加和前置(:append和:append) 63

覆盖式的移除(:remove) 63

4.1.3.6      变量标志. 63

变量标志的定义与使用. 63

BitBake任务控制变量标志说明. 63

移除标志与变量. 63

4.1.3.7      条件语法 (Overrides) 64

OVERRIDES变量. 64

条件追加与前置. 64

单个任务设置变量. 64

4.1.3.8      共享功能. 64

BBPATH定位类文件. 64

inherit指令. 64

INHERIT配置指令. 64

include指令. 64

require指令. 65

4.2       菜谱. 65

4.2.1      菜谱及追加菜谱示例. 65

4.2.1.1      helloworld元数据结构. 65

4.2.1.2      helloworld菜谱. 65

4.2.1.3      helloworld追加菜谱. 66

4.2.1.4      helloworld软件包构建. 66

4.2.2      菜谱命名与版本控制. 66

4.2.2.1      存放路径与命名规则. 66

4.2.2.2      版本(version)定义. 66

PV变量. 67

PR变量. 67

4.2.3      菜谱语法. 67

4.2.3.1      菜谱元数据结构. 67

必需变量. 67

元数据顺序. 67

4.2.3.2      函数. 68

Shell函数. 68

BitBake风格的Python函数. 68

匿名Python函数. 68

标准Python函数. 68

4.2.3.3      任务. 69

注册任务. 69

默认任务. 69

删除任务. 69

禁止任务. 69

4.2.3.4      依赖关系. 70

菜谱级别依赖关系. 70

构建时依赖. 70

运行时依赖. 70

任务级别依赖关系. 70

构建时任务依赖. 70

运行时任务依赖. 70

4.2.4      创建菜谱. 71

4.2.4.1      recipetool工具. 71

4.2.4.2      recipetool create命令. 71

4.2.4.3      创建菜谱. 72

4.2.4.4      创建菜谱并输出调试信息. 73

4.2.5      菜谱工作流. 75

4.2.5.1      菜谱工作流程图. 75

4.2.5.2      获取源代码. 75

从本地系统获取. 75

从远程仓库获取. 76

限制并行连接数量. 76

4.2.5.3      解压源代码. 76

4.2.5.4      给源代码打补丁. 76

4.2.5.5      添加许可证信息. 76

4.2.5.6      添加依赖关系. 76

4.2.5.7      添加配置. 76

Autotools 77

CMake 77

do_configure任务. 77

4.2.5.8      编译源代码. 77

4.2.5.9      安装任务. 77

Autotools 和 CMake 77

使用 make install 77

手动安装. 78

安装路径变量. 78

4.2.5.10     启用系统服务. 78

SysVinit 78

systemd 78

4.2.5.11     打包. 79

FILES变量. 79

PACKAGES变量. 79

文件分配. 79

运行质量检查. 79

标记包架构. 79

4.2.6      参考文献. 80

4.3       层. 81

4.3.1      层的概念. 81

4.3.1.1      层的定义. 81

4.3.1.2      层的特点. 81

4.3.2      层的结构与功能. 81

4.3.2.1      通用结构. 81

4.3.2.2      层配置文件(layer.conf) 82

路径设置. 82

层标识. 83

层优先级. 83

层依赖关系. 83

兼容性. 83

4.3.2.3      recipes-*目录. 83

4.3.2.4      meta-skeleton层示例. 83

4.3.3      层的分类. 84

4.3.3.1      发行版层(Distro Layer). 85

4.3.3.2      BSP层(BSP Layer). 86

4.3.3.3      软件层(Software Layer). 87

4.3.4      bitbake-layers层管理工具. 88

4.3.4.1      create-layers创建层. 88

4.3.4.2      show-layers显示有效层. 89

4.3.4.3      add-layer添加层. 89

4.3.4.4      remove-layer移除层. 89

4.3.4.5      layerindex-fetch获取层. 90

4.3.4.6      show-recipes显示菜谱. 90

4.3.4.7      show-appends显示追加菜谱. 91

4.3.5      参考文献. 91

第5章 BitBake构建引擎. 92

5.1       BitBake起源与发展. 92

5.2       BitBake源代码. 92

5.2.1    BitBake源代码获取. 92

5.2.1.1      克隆BitBake 92

5.2.1.2      构建系统中的BitBake 92

5.2.2    BitBake源代码结构及核心模块. 93

5.2.2.1      bb模块. 93

5.2.2.2      资源获取模块. 94

5.2.2.3      数据存储模块. 94

5.3       BitBake命令. 94

5.3.1    BitBake命令语法. 94

5.3.2      执行默认任务. 96

5.3.3      执行指定任务. 96

5.3.3.1      菜谱和任务组合. 96

5.3.3.2      添加-c选项. 97

5.3.4      强制执行任务. 97

5.4       BitBake调试与优化. 97

5.4.1      清除共享状态缓存. 98

5.4.1.1      do_cleansstate任务. 98

5.4.1.2      do_cleanall任务. 98

5.4.2      查看任务列表. 98

5.4.3      查看变量值. 100

5.4.3.1      查看构建环境中变量值. 100

5.4.3.2      查看指定菜谱中变量值. 100

5.4.4      查看依赖关系. 100

5.4.4.1      菜谱之间的依赖关系. 100

5.4.4.2      任务之间的依赖关系. 101

5.4.5      增加调试信息. 102

5.5       BitBake解析元数据. 103

5.5.1      解析元数据. 103

5.5.1.1      解析基础配置元数据. 103

检查环境变量. 103

解析核心配置文件. 103

继承机制. 103

调试信息. 103

5.5.1.2      定位和解析菜谱. 105

5.5.2      管理菜谱. 105

5.5.2.1      提供和使用菜谱. 105

PROVIDES 105

PREFERRED_PROVIDER 105

PREFERRED_VERSION 106

5.5.3      执行任务列表. 106

5.5.3.1      执行shell任务. 106

5.5.3.2      执行Python任务. 106

5.5.3.3      任务校验和. 107

5.5.4      缓存和日志. 107

第6章 Poky发行版. 108

6.1       Poky 108

6.1.1      发行版. 108

6.1.2    Poky重要组件. 108

6.1.3    BitBake构建配置选项. 109

6.1.4      三大组件. 109

6.2       镜像菜谱. 109

6.2.1      镜像菜谱. 109

6.2.1.1      Poky中的镜像菜谱. 109

6.2.1.2      core-image-sato菜谱. 111

6.2.1.3      image类和core-image类. 111

6.2.1.4      包组类和包组菜谱. 113

包组类. 113

包组菜谱. 113

Poky中的包组菜谱. 113

自定义包组菜谱示例. 113

包组使用方法. 114

6.2.1.5      Poky中的包组菜谱. 114

6.2.2      镜像元数据语法. 114

6.2.2.1      扩展软件包. 114

IMAGE_INSTALL 114

6.2.2.2      镜像特性. 114

IMAGE_FEATURE和EXTRA_IMAGE_FEATURES 114

FEATURE_PACKAGES 115

常用的镜像特性. 115

6.2.2.3      根文件系统镜像格式. 116

IMAGE_TYPES 116

IMAGE_FSTYPES 117

6.3       发行版配置文件. 117

6.3.1    DISTRO变量. 117

6.3.2    Poky中的发行版配置文件. 118

6.3.2.1      defaultsetup发行版配置文件. 118

6.3.2.2      poky发行版配置文件. 119

发行版配置信息. 120

软件开发工具(SDK)信息. 120

发行版特性. 120

发行版依赖. 120

倾向的内核版本. 120

包管理系统. 120

初始化系统管理器. 121

6.3.3      发行版特性与变量. 121

6.3.3.1      DISTRO_FEATURE 121

6.3.3.2      Python函数工具. 121

bb.utils.contains() 121

bb.utils.filter() 121

6.3.3.3      PACKAGECONFIG 121

与DISTRO_FEATURE 122

6.3.3.4      REQUIRED_DISTRO_FEATURE 122

6.3.3.5      发行版特性列表. 122

6.4       机器配置文件. 123

6.4.1    MACHINE变量. 123

6.4.2    Poky中的机器配置文件. 124

6.4.2.1      qemux86-64配置文件. 124

图形界面配置. 125

处理器配置. 125

系统硬件配置. 125

机器特性. 126

软件包依赖. 126

任务依赖. 126

磁盘分区. 126

QEMU配置. 126

6.4.2.2      BeagleBone机器配置文件. 126

特性和配置差异. 127

6.4.3      机器特性与变量. 127

6.4.3.1      MACHINE_FEATURE 127

6.4.3.2      MACHINE_ARCH 128

6.4.3.3      COMBINED_FEATURES 128

6.4.3.4      机器特性列表. 128

6.5       QEMU模拟器. 128

6.5.1    QEMU简介. 129

6.5.2    QEMU配置. 129

6.5.2.1      设置QEMU运行环境. 129

设置OpenEmebbed构建环境. 129

运行SDK环境设置脚本. 129

6.5.2.2      runqemu脚本. 129

runqemu测试运行环境. 129

runqemu语法. 130

runqemu运行示例. 130

默认启动. 130

指定镜像和文件系统类型. 130

启动 Initramfs 镜像并启用音频. 130

6.5.3    QEMU启动镜像. 130

6.5.4      参考文件. 131

第7章 QEMU启动定制镜像. 132

7.1       定制目标镜像. 132

7.1.1      搭建构建环境. 132

7.1.2      创建自定义层. 132

7.1.3      定制镜像菜谱. 133

7.1.3.1      创建基础镜像菜谱. 133

inherit core-image 133

require core-image-minimal 134

7.1.3.2      安装dpkg包管理工具. 134

7.1.3.3      检查构建输出. 134

7.1.4    QEMU测试镜像. 134

7.2       定制应用程序. 135

7.2.1    Linux系统的应用程序. 136

7.2.2      定制Yocto项目的HelloWorld程序. 136

7.2.2.1      定制HelloWorld菜谱. 136

7.2.2.2      构建HelloWorld程序到目标镜像. 137

7.2.3    QEMU测试HelloWorld程序. 137

7.3       定制内核. 138

7.3.1    Yocto项目的内核仓库. 138

7.3.1.1      linux-yocto仓库. 138

Git分支. 138

主干分支(master Branch). 138

Base分支(Kernel.org Branch Point). 139

基准内核分支(Yocto Project Baseline Kernel). 139

BSP分支 (BSP Branch) 139

实时系统内核分支(Real-Time Kernel Branch) 139

精简内核分支(Tiny Kernel Branch) 139

优化与持续更新策略. 139

7.3.1.2      yocto-kernel-cache仓库. 139

7.3.2      内核元数据. 140

7.3.2.1      内核元数据文件. 140

scc描述文件. 140

配置特性描述文件. 140

补丁描述文件. 140

内核特性描述文件. 141

内核类型描述文件. 142

BSP描述文件. 142

BSP描述文件语法. 142

BeagleBone的标准BSP描述文件. 142

7.3.2.2      内核元数据的位置. 143

SRC_URI和FILESEXTRAPATHS 143

菜谱空间. 143

非菜谱空间. 143

7.3.3      内核菜谱. 144

7.3.3.1      内核菜谱概述. 144

内核菜谱别名. 144

linux-yocto类型内核菜谱. 144

7.3.3.2      内核菜谱语法. 144

KBRANCH 144

KMACHINE 145

LINUX_KERNEL_TYPE 145

KENREL_FEATURES 145

KERNEL_DEVICETREE 145

7.3.3.3      菜谱空间内核元数据. 145

内核特性描述文件. 145

配置片段文件. 146

补丁文件. 146

7.3.4      内核配置. 146

7.3.4.1      defconfig配置文件. 146

树内defconfig配置文件. 146

树外defconfig配置文件. 146

7.3.4.2      BitBake配置内核. 146

7.3.5      树外模块. 147

7.3.5.1      树外模块定义. 147

7.3.5.2      构建树外模块. 147

树外模块菜谱. 147

构建树外模块. 148

7.3.5.3      安装树外模块. 149

机器配置依赖变量. 149

安装单个树外模块. 149

安装全部树外模块. 149

安装hello.ko树外模块. 149

7.3.5.4      自动加载内核模块. 149

7.3.6      定制树外模块. 149

7.3.6.1      创建树外模块菜谱. 150

7.3.6.2      部署和加载树外模模块. 150

7.3.6.3      QEMU启动与验证. 150

7.3.7      参考文献. 151

第8章 树莓派启动定制镜像. 152

8.1       树莓派简介. 152

8.1.1      树莓派4B 152

8.1.2      树莓派与Yocto项目. 153

8.1.3      参考文献. 153

8.2       构建和部署树莓派镜像. 153

8.2.1      构建树莓派镜像. 153

8.2.1.1      获取树莓派层. 153

8.2.1.2      设置构建环境. 154

8.2.1.3      BitBake构建目标镜像. 154

8.2.2      部署镜像到SD卡. 155

8.2.2.1      Raspberry Pi Imager 156

Ubuntu上安装. 156

关键选项介绍. 156

8.2.2.2      部署镜像. 157

8.2.3      启动树莓派. 158

8.3       meta-raspberrypi层. 159

8.3.1    meta-raspberrypi层概述. 159

8.3.2      层配置. 160

8.3.3      硬件配置. 161

8.3.3.1      平台机器配置文件. 161

8.3.3.2      树莓派4B硬件配置. 161

8.3.4      内核配置. 162

8.3.4.1      指定内核菜谱. 163

8.3.4.2      内核菜谱. 163

内核源代码. 164

linux-raspberrypi.inc包含文件. 164

指定依赖关系. 164

8.3.5      图形显示界面配置. 165

8.3.5.1      树莓派专用图形显示菜谱. 165

8.3.5.2      图形显示服务器协议. 165

8.3.6      硬件测试镜像菜谱. 166

8.4       使用wic工具创建分区镜像. 166

8.4.1    Wic工具介绍. 166

8.4.1.1      先决条件. 166

8.4.1.2      帮助命令. 166

wic帮助命令. 166

子命令帮助指令. 167

主题帮助指令. 167

8.4.2    kickstart文件. 168

8.4.2.1      kickstart文件语法. 168

part命令. 168

bootloader命令. 168

8.4.2.2      查找kickstart文件. 169

8.4.3    Wic插件. 169

8.4.3.1      imager插件. 170

8.4.3.2      source插件. 170

8.4.4    Wic工具操作模式. 170

8.4.4.1      Raw模式. 170

8.4.4.2      Cooked模式. 171

8.4.5      树莓派镜像分区. 171

8.4.5.1      查看关键参数. 171

查看IMAGE_FSTYPES变量. 171

查看WKS_FILE变量. 171

查看wic create命令. 171

8.4.5.2      树莓派kickstart文件. 172

8.4.6      镜像部署. 172

8.4.6.1      dd命令. 172

树莓派镜像部署. 173

8.4.6.2      bmaptool工具. 173

构建bmap文件. 173

bmaptool copy命令部署. 173

8.4.6.3      查看镜像分区. 173

8.4.7      参考文献. 174

第9章 实战定制树莓派BSP层. 175

9.1       创建与配置BSP层. 175

9.1.1      定制BSP层的方法. 175

9.1.2      创建meta-raspberrypi-custom层. 175

9.1.2.1      bitbake-layers创建和添加BSP层. 175

9.1.2.2      添加层依赖. 176

9.1.3      定制机器配置文件. 176

9.1.4    LICENSE文件. 176

9.2       定制内核菜谱. 176

9.2.1      内核配置. 176

9.2.1.1      修改内核源代码路径和分支. 176

9.2.1.2      定制defconfig 177

9.2.2      指定内核设备树文件. 177

9.2.3      添加内核补丁. 177

9.2.3.1      制作补丁文件. 177

9.2.3.2      添加补丁文件. 178

9.2.3.3      验证输出. 178

构建镜像. 178

bmaptool工具部署SD卡. 179

9.3       定制硬件启动配置菜谱. 179

9.3.1      指定内核设备树文件. 179

创建rpi-config_git.bbappend追加菜谱. 179

9.3.2      控制LED硬件行为. 179

9.3.2.1      LED配置变量. 180

触发方式. 180

电平控制. 180

9.3.2.2      LED 控制. 180

9.3.2.3      验证配置. 180

9.3.3      参考文献. 181

9.4       定制基础图形镜像. 181

9.4.1      创建基础镜像菜谱. 181

9.4.2      添加 SSH 服务. 181

9.4.3    X11图形显示协议. 181

9.4.3.1      添加Xorg显示服务器. 182

IMAGE_FEATURES启用x11-base特性. 182

IMAGE_INSTALL安装软件包. 182

9.4.3.2      验证Xorg服务器. 182

9.4.4      启用Systemd系统初始化管理器. 183

9.4.4.1      替换SysVinit 183

修改DISTRO_FEATURES 183

设置初始化管理器. 183

移除SysVinit的初始化脚本. 184

9.4.4.2      重构镜像并验证. 184

重新构建和部署镜像. 184

验证Systemd的启用. 184

9.5       定制分区镜像. 185

9.5.1      定制kickstart文件. 185

9.5.1.1      创建sdimage-raspberrypi-custom.wks文件. 185

9.5.1.2      添加配置. 185

9.5.2      重构并验证镜像. 185

9.5.2.1      重构并部署到SD卡. 185

9.5.2.2      验证分区. 185

9.5.3    meta-raspberrypi-custom层的最终结构. 186

第10章 软件开发工具包. 188

10.1      软件开发工具包(SDK) 188

10.1.1     SDK简介. 188

10.1.1.1     可扩展SDK和标准SDK 188

10.1.1.2     功能与组件. 188

10.1.1.3     优势与适用场景. 189

10.1.2     获取和使用SDK安装包. 189

10.1.2.1     获取SDK安装包的方法. 189

10.1.2.2     Yocto项目中构建SDK安装包. 189

SDK安装包的基础设置. 189

MACHINE和SDKMACHINE 189

SDK_TITLE 189

TOOLCHAIN_HOST_TASK 和TOOLCHAIN_HOST_TASK_ESDK 190

TOOLCHAIN_TARGET_TASK 190

BitBake构建SDK安装包命令. 190

SDK安装包的结构. 190

10.1.2.3     安装标准SDK与可扩展SDK 190

安装SDK 190

标准SDK与可扩展SDK的区别. 191

10.1.3     SDK通用组件. 191

10.1.3.1     标准SDK结构. 191

10.1.3.2     sysroots目录. 192

10.1.3.3     环境设置脚本. 192

10.2      可扩展SDK 193

10.2.1     可扩展SDK结构. 193

10.2.2     定制可扩展SDK安装包. 194

10.2.2.1     配置可扩展SDK 194

配置变量的传递规则. 194

过滤绝对路径变量. 194

排除变量. 195

包含变量. 195

禁用继承类. 195

设置默认SDK安装路径. 195

设置环境设置脚本. 195

配置SDK的文件和目录. 195

10.2.2.2     更新与扩展SDK 195

更新已安装的SDK 195

扩展SDK 196

10.2.2.3     最小化SDK安装包. 196

10.2.3     devtool命令行工具. 196

10.2.3.1     devtool子命令. 197

10.2.3.2     菜谱初始化操作. 198

devtool add添加菜谱. 198

提取上游源代码至工作区并创建菜谱. 198

提取上游源代码放入本地目录并创建菜谱. 198

使用本地源代码创建菜谱. 198

devtool modify修改源代码. 198

上游提取源代码至工作区. 198

上游提取源代码至本地目录. 198

使用已有本地源代码树. 198

devtool upgrade升级菜谱. 198

升级到指定版本. 198

升级并提取源代码到指定目录. 198

升级到指定修订版. 199

10.2.3.3     信息查询. 199

devtool status查询工作区状态. 199

devtool search查询可用菜谱. 199

devtool latest-version查询上游最新版本. 199

10.2.3.4     工作区菜谱管理. 199

devtool build构建菜谱. 199

devtool edit-recipe编辑菜谱. 199

devtool rename重命名菜谱. 199

devtool reset移除菜谱. 199

devtool finish完成并提交菜谱. 199

10.2.3.5     部署与测试. 200

devtool build-image构建镜像菜谱. 200

devtool runqemu启动QEMU虚拟机. 200

devtool deploy-target部署构建输出. 200

devtool undeploy-target撤销部署. 200

10.2.3.6     高级功能与SDK维护. 200

devtool export导出工作区. 200

devtool build-sdk 构建派生SDK 200

devtool sdk-update更新SDK 200

10.3      标准SDK构建应用程序. 200

10.3.1     定制应用程序. 200

10.3.1.1     LED控制逻辑. 201

10.3.1.2     LED代码设计. 201

10.3.2     构建应用程序. 201

10.3.2.1     构建环境设置. 201

10.3.2.2     编译应用程序. 202

直接使用交叉编译器编译. 202

Makefile工具. 202

10.3.2.3     检查编译结果. 202

10.3.3     部署与测试. 202

10.3.3.1     手动拷贝. 202

10.3.3.2     远程拷贝. 202

10.3.3.3     目标机器上运行. 202

10.4      可扩展SDK构建与部署. 204

10.4.1     创建菜谱. 204

10.4.1.1     添加构建工具. 204

CMake 204

Autotools 205

10.4.1.2     devtool add创建菜谱. 205

使用本地源代码. 205

上游提取源代码. 206

10.4.2     构建与部署. 207

10.4.2.1     安装任务. 207

10.4.2.2     构建菜谱. 207

10.4.2.3     远程部署. 207

10.4.3     测试与集成. 207

10.4.3.1     SSH远程测试. 208

10.4.3.2     重构镜像. 208

10.4.3.3     集成菜谱. 209

第11章 进阶项目实战. 210

11.1      搭建项目开发环境. 210

11.1.1     硬件开发环境. 210

11.1.1.1     i.MX硬件平台. 210

11.1.2     软件开发环境. 212

11.1.2.1     构建主机配置. 212

11.1.2.2     Repo同步源代码. 212

安装Repo工具. 212

Repo指令集. 212

指定Manifest文件. 212

Repo初始化项目环境. 213

Repo同步源代码. 213

11.1.2.3     Docker环境配置. 214

Yocto项目中的Docker 214

安装和配置Docker 214

获取Docker文件. 214

设置环境变量. 215

创建Docker镜像. 215

启动Docker容器. 215

11.2      初始化构建环境. 215

11.2.1     构建环境配置脚本. 215

11.2.1.1     imx-setup-release.sh 215

11.2.1.2     MACHINE 215

11.2.1.3     DISTRO 216

11.2.2     初始化构建环境. 216

11.2.2.1     初始化构建环境命令. 216

11.2.2.2     构建环境的配置文件. 217

conf/bblayers.conf 217

conf/ local.conf 218

11.3      元数据结构. 218

11.3.1     元数据层结构. 218

11.3.1.1     Yocto项目社区层. 219

11.3.1.2     i.MX发布层. 219

11.3.2     镜像菜谱. 220

11.3.2.1     常用镜像菜谱. 220

11.3.2.2     imx-image-multimedia镜像菜谱. 220

镜像特性. 221

软件包添加. 221

11.3.3     内核. 222

11.3.3.1     内核菜谱. 222

查找内核菜谱文件. 222

linux-imx菜谱的位置和版本. 222

11.3.3.2     linux-imx内核菜谱. 222

许可证与依赖项. 222

内核源与版本. 223

内核配置与任务管理. 223

设备树路径兼容. 224

硬件平台兼容. 224

11.3.4     Bootloader 225

11.3.4.1     Bootloader菜谱文件. 225

查找U-Boot菜谱文件. 225

u-boot-imx菜谱的位置和版本. 225

11.3.4.2     u-boot-imx菜谱详解. 225

基础文件引入与配置. 226

添加镜像大小标识. 226

追加部署任务. 226

设置包架构和硬件平台. 227

11.4      定制层与镜像. 227

11.4.1     创建meta-imx-custom层. 227

11.4.2     集成Chromium浏览器. 227

11.4.2.1     meta-browser层结构. 228

11.4.2.2     chromium菜谱. 228

11.4.2.3     集成chromium菜谱. 229

11.4.3     配置Systemd服务. 229

11.4.3.1     查看系统初始化管理器. 229

11.4.3.2     创建Systemd服务文件. 230

11.4.3.3     创建chromium-service.bb菜谱. 230

11.4.3.4     meta-imx-custom层结构. 230

11.5      构建镜像与部署验证. 231

11.5.1     构建目标镜像. 231

11.5.2     搭建部署环境. 232

11.5.2.1     i.MX启动模式. 232

启动模式的基本原理. 232

常用启动模式. 232

11.5.2.2     UUU工具. 233

UUU安装指南. 233

UUU指令示例. 233

UUU脚本文件. 233

版本声明. 234

命令格式. 234

UUU示例脚本. 234

11.5.2.3     搭建主机系统环境. 234

主机系统环境搭建. 234

准备WIC镜像文件. 234

准备Bootloader文件. 234

创建uuu.auto 235

部署环境目录结构. 235

11.5.3     启动硬件与验证. 235

11.5.3.1     搭建硬件部署环境. 235

11.5.3.2     镜像下载. 236

11.5.3.3     验证系统信息. 237

11.5.3.4     验证Chromium 237

附录. 239

A. Yocto学习资源推荐. 239

B. 嵌入式系统开发常用术语解释与工具介绍. 239

标签:Yocto,4.2,菜谱,嵌入式,构建,内核,Linux,镜像,SDK
From: https://blog.csdn.net/Interview_TC/article/details/144744844

相关文章

  • 《我的嵌入式软件之旅:在创新与优化的道路上自我反省》
            作为一名嵌入式软件工程师,我至今的职业生涯虽仅短短五年,但却充满了对创新和优化的不懈追求。特别是在阅读《设计原本》后,深刻反省了关于创新、优化、问题空间和解空间关系。也陷入了自我矛盾的状态,更甚与当代主流的AI有过激烈的“争论”,结果出人意料——Ai被成......
  • Linux基础篇、学习习题测试_01
    Linux基础篇欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神!                                                    ———laowang题目一1.网络配置使......
  • Linux基础篇、学习习题测试_01答案
    Linux基础篇欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神!                                                                                 ————......
  • WSL(Windows Subsystem for Linux)和 WSL 2(Windows Subsystem for Linux 2)是微软为 Wind
    WSL(WindowsSubsystemforLinux)和WSL2(WindowsSubsystemforLinux2)是微软为Windows提供的Linux子系统。WSL和WSL2都允许用户在Windows上运行Linux发行版,但它们的架构、性能和功能有显著差异。以下是它们的主要区别对比表:特性WSL (WSL1)WSL2架构使......
  • Linux 查看USB是2.0还是3.0
    查看Linux接入的USB设备速率是USB2还是USB3_linux查看usb速率-CSDN博客如何知道您的系统在Linux中是否有USB3.0端口[快速提示]linux如何区分usb是3.0还是2.0-CSDN文库 图中应该是两个2.0,两个3.0......
  • Linux的文件锁-flock,控制程序重复执行
    Linux的文件锁-flock,控制程序重复执行在使用crontab管理定时脚本时,如果设定的脚本执行时间间隔较短,例如5分钟执行一次,正常情况下,脚本执行耗时1分钟,在非正常情况下(如服务器压力较大的情况下,或数据量突然增大),脚本执行时间超过5分钟,这时就会造成多个脚本同时执行,严重时甚至拖垮服务......
  • 【linux合集】单机部署clickhouse--ubuntu环境
    clickhouse单机部署--ubuntu部署导入clickhouse密钥操作(ClickHouse(大数据分析DBMS)的软件包由其开发人员使用公钥进行签名,我们需要在我们的系统上使用它。这是因为只有我们的系统才能验证我们得到的软件包,它们来自源代码,因为它们是由其开发人员发布的。并且没有被中间的任何人修......
  • 一文读懂!RK3576和RK3588有什么区别?-米尔嵌入式
    在中国半导体产业的版图中,瑞芯微作为国内SoC芯片领跑者,凭借其在处理器芯片设计领域的深厚积累和持续创新,推出很多智能应用处理器芯片,在嵌入式系统领域得到大规模的应用。RK3588和RK3576系列作为都是瑞芯微(Rockchip)高性能处理器代表,性能如何?价格如何?作为硬件产品开发的我们,这两款......
  • 飞凌嵌入式与菲尼克斯电气携手创新,为全球工业自动化发展注入智慧力量
    随着工业自动化技术的快速发展,业内对于控制软件的需求也日益增长,由全球知名的工业自动化和电气连接解决方案提供商菲尼克斯电气(PhoenixContact)推出的工业自动化生态系统PLCnext,早已在工业自动化领域中占据举足轻重的地位,并凭借其卓越的性能、高度的可靠性和灵活的扩展性,赢得了......
  • Linux磁盘阈值及内存阈值检测脚本
    #!/bin/bash#设置阈值,例如磁盘使用率超过80%,内存使用率超过90%DISK_THRESHOLD=90MEMORY_THRESHOLD=99#获取磁盘使用百分比(这里以根目录为例)DISK_USAGE=$(df/--output=pcent|grep-o'[0-9]\+')#获取内存使用百分比MEMORY_USAGE=$(free|grepMem|awk'{print......