搭建Yocto开发环境:宿主机要求、安装必要软件包、下载Poky源码、首次构建最小系统
说实话,很多初学者一上来就急着写配方、改驱动,结果环境没搭好,折腾半天连个最小系统都跑不起来。我见过太多人卡在这一步了。今天咱们就把地基打牢,一步步来。
宿主机要求:别让你的电脑拖后腿
Yocto项目对硬件是有要求的。不是随便一台电脑都能跑。我最早用一台4GB内存的笔记本试过,编译到一半直接卡死,那叫一个崩溃。
最低配置建议:
- CPU:4核以上,推荐8核。编译时能全核跑满,省时间。
- 内存:至少8GB,16GB以上更稳。我个人的经验是,16GB内存编译一个核心镜像大概需要40分钟,8GB的话可能要翻倍。
- 硬盘:至少100GB空闲空间。一个完整的构建目录,随随便便就吃掉50GB。建议用SSD,机械硬盘会让你怀疑人生。
- 操作系统:Ubuntu 20.04/22.04 LTS 或 CentOS 7/8。我个人偏爱Ubuntu,包管理方便,社区支持也好。
安装必要软件包:缺啥补啥
Yocto构建依赖一堆工具链。少了任何一个,编译时都会报错。嗯,这里我踩过不少坑。
Ubuntu系统下,执行以下命令:
sudo apt-get update
sudo apt-get 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 libegl1-mesa libsdl1.2-dev \
xterm python3-subunit mesa-common-dev zstd liblz4-tool
这里面有几个关键包,我简单说一下:
- gawk:Yocto的bitbake解析配方时依赖它,比默认的mawk功能更全。
- chrpath:用来修改二进制文件的rpath,构建过程中经常用到。
- zstd:高压缩率工具,现在Yocto默认用它压缩sstate缓存。
如果你用的是CentOS或Fedora,命令会略有不同。但核心思想一样——把开发工具链装全。
python3 --version 和 git --version 确认一下版本。Yocto对Python版本有要求,3.6以上基本没问题。
下载Poky源码:Yocto的起点
Poky是Yocto项目的参考发行版,也是我们学习的基础。说白了,它就是一个包含了bitbake构建系统、元数据层和各种配方的集合。
下载方式很简单:
git clone git://git.yoctoproject.org/poky
cd poky
git checkout -b my-kirkstone origin/kirkstone
我建议你直接切到某个稳定分支,比如 kirkstone(4.0 LTS版本)。为什么?因为主线分支天天在变,今天能编译的配方,明天可能就报错了。我在项目中吃过这个亏,后来学乖了,只用LTS版本。
下载完成后,目录结构大概是这样的:
poky/
├── bitbake/ # 构建引擎
├── meta/ # 核心元数据层
├── meta-poky/ # Poky参考发行版配置
├── meta-yocto-bsp/ # 参考板级支持包
├── oe-init-build-env # 环境初始化脚本
└── README
你想想看,这个结构其实很清晰。bitbake是引擎,meta是零件库,meta-poky是组装说明书。我们后面写的配方,就是往这个零件库里加东西。
首次构建最小系统:跑起来看看
环境搭好了,源码也下了,接下来就是见证奇迹的时刻——构建一个最小系统。
第一步:初始化构建环境
cd poky
source oe-init-build-env build
这个脚本会创建一个 build 目录,并设置好环境变量。执行完后,你会看到命令行提示符变成了 build$,说明环境已经激活了。
第二步:检查配置
进入 build/conf 目录,你会看到两个文件:
local.conf:本地构建配置,比如目标机器、并行编译数等。bblayers.conf:层配置,告诉bitbake去哪里找配方。
对于首次构建,我们只需要改几个关键参数:
# 在 local.conf 中
MACHINE = "qemux86-64" # 目标机器,我们用QEMU模拟
BB_NUMBER_THREADS = "8" # 并行任务数,建议等于CPU核心数
PARALLEL_MAKE = "-j 8" # make并行数
第三步:开始构建
bitbake core-image-minimal
这个命令会构建一个最小系统镜像,包含内核、根文件系统和基本的用户空间工具。第一次构建会下载所有源码包并编译,时间比较长。我那次等了大概40分钟,中间去泡了杯咖啡。
构建过程中,你会看到类似这样的输出:
Loading cache: 100%
Parsing recipes: 100%
Initialising tasks: 100%
NOTE: Executing Tasks
Running task 1234 of 5678
别慌,这是正常的。bitbake会按依赖关系依次执行任务。如果中途报错,先看错误信息,大部分情况是网络问题或缺少依赖包。
第四步:验证结果
构建完成后,镜像文件在 build/tmp/deploy/images/qemux86-64/ 目录下。你可以用QEMU启动它:
runqemu qemux86-64
看到QEMU窗口里出现登录提示符,输入root登录,恭喜你,第一个Yocto系统跑起来了!
local.conf 里加上 PREMIRRORS 变量,指向国内的镜像源。
知识体系一览
为了让你对整个流程有个直观的认识,我画了一张图:
这张图把整个流程串起来了。从宿主机准备到最终验证,每一步都有明确的输入和输出。你照着这个顺序走,基本不会出大问题。
常见问题与解决
| 问题现象 | 可能原因 | 解决方法 |
|---|---|---|
| git clone 超时 | 网络限制,git://协议被墙 | 改用 https:// 协议,或配置代理 |
| bitbake 报错 "No space left" | 硬盘空间不足 | 清理 /tmp 目录,或挂载更大的分区到构建目录 |
| 编译过程中卡死 | 内存不足,或并行任务数设置过高 | 降低 BB_NUMBER_THREADS 和 PARALLEL_MAKE 的值 |
| runqemu 无法启动 | 缺少 QEMU 或图形界面支持 | 安装 qemu-system-x86 和 libsdl2-dev |
嗯,基本上就这些了。环境搭建是Yocto学习的第一道坎,迈过去之后,后面的配方编写、驱动集成就会顺畅很多。我个人建议,第一次构建时别急着改配置,先用默认参数跑一遍,感受一下整个流程。等熟悉了,再慢慢调优。
可可精品资料库