🔍
B站相应的视屏教程:
📌 内核:博文+视频 - 总线驱动模型实战全解析
敬请关注,记得标为原始粉丝。
目标:完成 Yocto 环境搭建,构建 core-image-minimal 镜像,了解 Yocto 应用系统的核心架构和基本构建流程
1. Yocto 构建环境快速上手
1.1 环境准备
Yocto 项目依赖于稳定的 Linux 环境以及一系列构建工具和库,因此我们需要在受支持的系统中配置构建主机。建议使用 Ubuntu 22.04(LTS)并安装必要的依赖包:
- 操作系统:Ubuntu 22.04 (LTS)
- 硬件:90GB 磁盘空间,8GB RAM
- 必备软件:
sudo apt install gawk wget git diffstat unzip texinfo gcc build-essential chrpath socat \
cpio python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping python3-git \
python3-jinja2 python3-subunit zstd liblz4-tool file locales libacl1
1.2 下载 Poky 和初始化
Poky 是 Yocto 官方提供的参考发行版,集成了 BitBake 构建引擎、OE-Core 元数据层及基本配置脚本。
git clone git://git.yoctoproject.org/poky
cd poky
git checkout -b scarthgap origin/scarthgap
source oe-init-build-env
运行 source
脚本后,将自动创建名为 build
的构建目录,其中包含:
local.conf
:用于配置目标平台(如 MACHINE)和基础参数bblayers.conf
:用于定义参与构建的元数据 layer
1.3 构建 core-image-minimal 镜像
core-image-minimal 是 Yocto 提供的最基础镜像,适合用于验证构建流程是否正确。
bitbake core-image-minimal
该构建命令会依次执行以下任务:
Fetch → Unpack → Patch → Configure → Compile → Install → Package → Image
构建完成后,输出文件位于:
tmp/deploy/images/qemux86-64/
1.4 验证镜像
Yocto 提供了 runqemu
工具,可以使用 QEMU 虚拟机快速验证构建出的镜像功能。
runqemu qemux86-64
如能进入 shell 或看到启动界面,说明构建成功且镜像正常运行。
2. Yocto 框架概述
2.1 Layer 模型概念
在 Yocto 项目中,Layer 是组织元数据的基本单位。每个 Layer 是一组功能集合,可以包含菜谱、类、配置文件等。Layer 支持按需组合与重写,提升系统模块化和可维护性。
常见 Layer 类型:
Layer | 作用 |
---|---|
meta | OE-Core,基础元数据层,提供常用软件包和构建逻辑 |
meta-poky | Poky 的默认配置层 |
meta-yocto-bsp | 提供参考硬件平台的 BSP 层 |
meta-custom | 用户自定义的扩展层 |
layer 的启用通过 bblayers.conf
文件管理,支持灵活添加、覆盖、替换已有逻辑。
2.2 BitBake 构建流程
BitBake 是 Yocto 的核心工具之一,类似于 make,它根据 .bb
菜谱定义的规则,自动执行构建任务。
常见构建任务(task):
do_fetch
:下载源码(如 Git、tar.gz)do_unpack
:解压源码do_patch
:应用补丁do_configure
:执行配置脚本,如 autoconfdo_compile
:编译源码do_install
:复制安装文件到临时根文件系统do_package
:将构建结果打包为 ipk/rpm 等do_image
:生成最终 rootfs 镜像文件
BitBake 支持自动分析依赖关系,并可并行构建多个 package,提高构建效率。
3. Yocto 构建目录分析
3.1 build 目录结构
构建目录由 oe-init-build-env
初始化生成,包含所有构建配置、缓存和结果。其主要结构如下:
目录 | 用途 |
---|---|
conf/ | 配置文件目录,包含 local.conf 和 bblayers.conf |
downloads/ | 存储所有下载的源码包和文件 |
sstate-cache/ | 共享状态缓存,加速重复构建过程 |
tmp/ | 所有中间产物和最终输出的主目录 |
3.2 tmp/ 根目录分析
tmp
是 BitBake 的主要输出区域,几乎所有构建数据都集中于此。关键子目录包括:
work/
:每个菜谱的工作目录,包含源码解压、编译、中间结果等deploy/images/
:最终生成的镜像文件、启动配置、压缩包等
理解这些目录对于分析构建错误、查找结果文件具有重要意义。
四、实战总结
关键名词 | 说明 |
---|---|
BitBake | 构建引擎 |
Poky | 参考发行版,基于 OE-Core |
core-image-minimal | 最小功能 rootfs 镜像 |
QEMU | 虚拟式硬件环境验证工具 |
五、问答与练习
问题练习
1. 说明 Poky 和 OE-Core 之间的关系?
2. 解释 BitBake 构建流程中皈 do_compile 和 do_install 的区别
3. 一个自定义层 layer 最基本的目录结构是什么?
4. 如果需要构建 Raspberry Pi 镜像,应修改哪些文件?
5. 如何查看构建成功后 core-image-minimal 里裡包含了哪些软件?
标准答案
1. Poky 是以 OE-Core 为基础,合并了 BitBake + 基本 layer + 参考 BSP 和配置 layer ,形成一个完整参考构建平台。
2. do_compile
负责编译源码,do_install
负责把编译的结果处理安装到目标根文件系统目录下。
3. 最基本含 conf/,recipes-类目录,例如:
meta-mytest/
|-- conf/
| `-- layer.conf
|-- recipes-example/
| `-- helloworld/
| `-- helloworld_1.0.bb
4. 需要修改 conf/local.conf 中的 MACHINE ,例如:
MACHINE ?= "raspberrypi4-64"
并确保 bblayers.conf 加入 meta-raspberrypi 层。
5. 运行:
cat tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.manifest
可以查看包含软件清单。
六、小结
Day 1 我们打通了 Yocto 环境搭建、构建流程、层结构、实战 core-image-minimal 镜像构建。这是全部 Yocto 实战的基础,后续我们将一步步深入 BitBake 、菜谱编写、实际 BSP 应用。
下一篇