2. Yocto开发环境搭建
说实话,很多初学者一上来就急着编译镜像,结果卡在各种环境问题上。我当年第一次接触Yocto时也踩过不少坑——明明照着文档一步步来,就是编译不过。后来才发现,宿主机环境没配好,后面全是白费功夫。
这一章,咱们就把地基打牢。环境搭好了,后面的事情就顺了。
1.1 宿主机要求
Yocto对宿主机有一定要求。不是随便拿台电脑就能跑的。我个人习惯用Ubuntu 20.04 LTS或22.04 LTS,这两个版本我都在项目中验证过,兼容性最好。
硬件方面,我建议至少满足以下配置:
| 项目 | 最低要求 | 推荐配置 |
|---|---|---|
| CPU | 4核 | 8核及以上 |
| 内存 | 8GB | 16GB以上 |
| 磁盘 | 100GB空闲 | 200GB以上(SSD) |
| 操作系统 | Ubuntu 20.04 | Ubuntu 22.04 LTS |
为什么磁盘要求这么高?因为Yocto编译过程中会下载大量源码包,还会生成中间文件和最终镜像。你想想看,一个完整的Linux系统,光内核源码就几百兆,再加上各种库、工具链,轻松破百G。
1.2 安装必要软件包
Ubuntu系统默认安装的东西不够用。我们需要手动装一些依赖包。这里我直接给出最全的列表,省得你后面缺啥补啥,浪费时间。
打开终端,执行以下命令:
sudo apt update
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 libegl1-mesa \
libsdl1.2-dev pylint3 xterm python3-subunit mesa-common-dev \
zstd liblz4-tool file locales libacl1
嗯,这里要注意一点。不同Ubuntu版本需要的包可能略有差异。比如Ubuntu 22.04需要额外安装python3-venv,而20.04就不需要。我建议你装完后跑一下Yocto自带的检查脚本,它会告诉你缺什么。
sudo locale-gen en_US.UTF-8 设置语言环境。我遇到过因为locale没配好,编译到一半报错的尴尬情况。
1.3 配置Git和Repo
Yocto的源码管理依赖Git和Repo。Git大家应该都熟悉,Repo是Google开发的一个多仓库管理工具,专门用来管理像Yocto这种由几十个Git仓库组成的项目。
先配置Git:
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"
git config --global color.ui auto
这里我多说一句。Git的用户名和邮箱一定要配,不然Repo拉代码时会报错。我刚开始学的时候忘了配,折腾了半天才发现是这个问题。
然后安装Repo:
mkdir -p ~/.local/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/.local/bin/repo
chmod a+x ~/.local/bin/repo
记得把~/.local/bin加到PATH里。在~/.bashrc末尾加上:
export PATH=$PATH:~/.local/bin
然后source ~/.bashrc让它生效。
1.4 下载Yocto源码(Poky)
Poky是Yocto项目的参考发行版,也是我们最常用的构建系统。说白了,它就是Yocto的"官方示例",包含了BitBake构建引擎、OpenEmbedded核心元数据,以及一系列参考配置。
下载Poky源码,我推荐用Repo工具:
mkdir yocto-project
cd yocto-project
repo init -u https://git.yoctoproject.org/poky -b kirkstone
repo sync
这里我选了kirkstone分支,这是Yocto的长期支持版本(LTS),稳定性好,社区支持也到位。如果你做商业项目,我建议就用这个版本。
repo sync会下载所有相关的仓库,包括BitBake、OpenEmbedded Core、Yocto文档等。这个过程取决于你的网速,一般需要10-30分钟。
1.5 首次构建最小系统
源码下载完了,咱们来编译第一个镜像。我选core-image-minimal,这是Yocto提供的最小系统镜像,只包含最基本的Linux组件。用它来验证环境,再合适不过。
先设置构建环境:
cd poky
source oe-init-build-env build
这个脚本会创建一个build目录,并自动切换到该目录。同时,它会设置一系列环境变量,让BitBake知道去哪里找配置文件、元数据和源码。
然后修改conf/local.conf文件。我个人习惯做以下调整:
# 使用4个并行任务,加快编译速度
BB_NUMBER_THREADS = "4"
PARALLEL_MAKE = "-j 4"
# 指定目标机器,这里用qemux86-64
MACHINE = "qemux86-64"
# 下载源码包的缓存目录,避免重复下载
DL_DIR = "/path/to/your/downloads"
# 共享状态缓存,加速后续构建
SSTATE_DIR = "/path/to/your/sstate-cache"
最后,开始构建:
bitbake core-image-minimal
第一次构建会非常慢,因为要下载所有依赖的源码包,还要编译交叉编译工具链。在我的8核16GB内存的机器上,大概需要1.5小时。如果你配置低一些,可能要3-4小时。
screen或tmux来跑编译任务,要么确保网络和电源稳定。另外,编译过程中不要做其他重负载操作,否则会拖慢速度。
构建成功后,你会看到类似这样的输出:
Parsing recipes: 100%
...
Tasks Summary: Attempted 1234 tasks of which 0 didn't need to be rerun and all succeeded.
Summary: There was 1 WARNING.
镜像文件在tmp/deploy/images/qemux86-64/目录下,文件名类似core-image-minimal-qemux86-64.wic。你可以用QEMU模拟器来启动它:
runqemu qemux86-64
看到登录提示符的那一刻,恭喜你——Yocto环境搭建成功了!
本章知识体系
下面这张图帮你理清本章的核心逻辑:
这张图把整个流程串起来了。从宿主机准备开始,到安装依赖、配置工具、下载源码,最后完成首次构建。每一步都是下一步的前提,缺一不可。
好了,环境搭好了,后面的事情就好办了。记住,第一次编译慢是正常的,别着急。后面我们会一步步深入,从板级适配到镜像定制,把Yocto玩透。