4. 第一次构建:配置构建环境、运行bitbake core-image-minimal、理解构建过程输出
好,到了真正动手的时候了。前面几章我们把Yocto的来龙去脉、目录结构、概念都捋了一遍。现在,我们要做第一次构建。
说实话,第一次跑bitbake,很多人会紧张。我当年也是。生怕敲错一个命令,或者等了两三个小时最后报个红错。别担心,这一章我带你一步步走,把每一步在干什么、输出什么、可能踩什么坑,都讲清楚。
4.1 配置构建环境:source oe-init-build-env
进入你的Poky目录,执行下面这条命令:
cd ~/yocto/poky
source oe-init-build-env build
这条命令做了三件事:
- 设置一系列环境变量(比如 TEMPLATECONF、BBPATH)
- 创建 build 目录(如果不存在的话)
- 把当前 shell 的工作目录切换到 build 目录
执行完后,你会看到终端提示符变了,前面多了个 build 字样。这说明环境已经激活了。
4.2 检查构建配置:local.conf 和 bblayers.conf
环境激活后,进入 build/conf 目录,你会看到两个关键文件:
| 文件 | 作用 |
|---|---|
| local.conf | 本地构建配置,比如目标机器、并行任务数、下载目录等 |
| bblayers.conf | 声明哪些 layer 参与构建,以及它们的路径 |
对于第一次构建,我建议你至少检查 local.conf 里的这几项:
# 目标机器(我一般先用 qemux86-64)
MACHINE ?= "qemux86-64"
# 并行编译线程数(建议设为 CPU 核心数)
BB_NUMBER_THREADS ?= "4"
PARALLEL_MAKE ?= "-j 4"
# 下载目录(共享给多个项目用)
DL_DIR ?= "/home/yourname/yocto/downloads"
4.3 运行 bitbake core-image-minimal
配置检查完毕,开始构建:
bitbake core-image-minimal
这条命令会触发整个构建流程。第一次构建时间很长,通常 30 分钟到 2 小时不等,取决于你的网络和机器性能。
构建过程中,终端会不断输出日志。你可能会看到类似这样的信息:
Loading cache: 100%
Parsing recipes: 100%
NOTE: Resolving any missing task queue dependencies
NOTE: Executing Tasks
Currently 1 running tasks (1 of 1234):
0: bash-5.2.15-r0 do_fetch (pid 12345)
这里有个小技巧:按 Ctrl + R 可以刷新当前任务列表,按 q 退出交互视图。我个人习惯让它跑着,去做别的事,偶尔回来看一眼。
4.4 理解构建过程输出
构建过程中,Yocto 会在 build 目录下生成大量中间产物。核心目录结构如下:
4.5 构建成功后的产物
构建完成后,你会在 tmp/deploy/images/qemux86-64/ 下看到这些文件:
core-image-minimal-qemux86-64.wic
core-image-minimal-qemux86-64.tar.bz2
bzImage
core-image-minimal-qemux86-64.qemuboot.conf
*.dtb
其中:
- .wic:完整的磁盘镜像,可以直接烧录到 SD 卡或启动盘
- .tar.bz2:根文件系统的压缩包
- bzImage:Linux 内核镜像
- .dtb:设备树文件
- .qemuboot.conf:QEMU 启动配置文件,方便直接用
runqemu启动
验证构建是否成功:
执行 runqemu qemux86-64,如果能看到 QEMU 窗口弹出,并且系统启动到登录提示符,那就说明第一次构建成功了。默认用户名 root,无密码。
4.6 常见问题与避坑
第一次构建,我遇到过不少问题。挑几个典型的说说:
| 问题 | 原因 | 解决方法 |
|---|---|---|
| do_fetch 失败 | 网络问题或源地址失效 | 检查网络,或设置 PREMIRROR 使用国内镜像源 |
| 磁盘空间不足 | tmp 目录占用过大 | 至少预留 50GB 空间,或设置 INHERIT += "rm_work" 自动清理 |
| 编译错误 | 依赖缺失或版本冲突 | 查看 log.do_compile 日志,安装缺失的 host 工具 |
| bitbake 命令找不到 | 没有 source 环境 | 重新执行 source oe-init-build-env |
4.7 理解构建日志
每个 recipe 的构建日志都在 tmp/work/<arch>/<recipe>/<version>/temp/ 下。关键文件:
- log.do_fetch:下载日志
- log.do_configure:配置日志
- log.do_compile:编译日志
- log.do_install:安装日志
- run.do_*:实际执行的 shell 脚本,可以手动重跑调试
构建失败时,别慌。先看最后几行错误信息,然后去对应的 log 文件里找线索。我一般先看 log.do_compile,因为 80% 的错误都出在编译阶段。