2. 开发环境搭建:安装依赖包、配置Git与Repo、下载Poky与Meta层、首次构建最小系统
好,咱们正式开始动手。这一章,我会带你从零搭建一套完整的Yocto开发环境。说白了,就是让你的电脑具备「编译嵌入式Linux系统」的能力。
我记得第一次搭环境时,光装依赖就折腾了大半天。后来发现,很多坑其实是可以提前避开的。嗯,咱们一步步来。
2.1 安装系统依赖包
Yocto对宿主机的依赖挺多的。我个人习惯用Ubuntu 20.04 LTS或22.04 LTS,这两个版本我实测过,兼容性最好。你如果用的是其他发行版,比如Fedora或Debian,命令会略有不同,但原理一样。
先更新包管理器:
sudo apt update
sudo apt upgrade -y
然后安装核心依赖包。我建议你直接复制下面这行命令,别一个一个装,太慢了:
sudo apt install -y 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
python3-venv 包。我曾在项目中漏掉这个,结果编译到一半报错,排查了半天才发现是虚拟环境工具没装。
安装完成后,检查一下Python版本:
python3 --version
Yocto的Kirkstone版本要求Python 3.8以上。如果你版本太低,建议升级一下系统。
2.2 配置Git与Repo
Git是Yocto的命根子。所有的源码、meta层、补丁,全是通过Git管理的。所以,先把Git配置好。
配置用户名和邮箱:
git config --global user.name "你的名字"
git config --global user.email "你的邮箱@example.com"
我个人习惯再加两个配置:
git config --global core.editor vim
git config --global color.ui true
这样提交代码时,默认用vim编辑,而且输出带颜色,看着舒服。
接下来是Repo工具。Repo是Google开发的一个Git仓库管理工具,专门用来管理多仓库项目。Yocto用它来管理Poky和各个meta层。
安装Repo:
mkdir -p ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
然后把 ~/bin 加到PATH里:
echo 'export PATH=$PATH:~/bin' >> ~/.bashrc
source ~/.bashrc
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo。清华的源,速度杠杠的。
验证Repo是否安装成功:
repo --version
看到版本号输出,就说明搞定了。
2.3 下载Poky与Meta层
Poky是Yocto的参考发行版,也是我们构建系统的起点。它包含了BitBake构建引擎、OpenEmbedded核心元数据,以及一系列基础配方。
先创建一个工作目录,我习惯叫 yocto-project:
mkdir ~/yocto-project
cd ~/yocto-project
然后初始化Repo仓库。这里我选择Kirkstone分支,它是Yocto的长期支持版本(LTS),稳定性最好:
repo init -u https://git.yoctoproject.org/poky -b kirkstone
如果你网络不好,可以用国内镜像:
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/poky -b kirkstone
初始化完成后,同步所有仓库:
repo sync
这个过程会下载Poky以及所有默认的meta层。根据你的网速,可能需要10到30分钟。趁这个时间,你可以泡杯咖啡。
同步完成后,看看目录结构:
ls -la
你会看到 meta、meta-poky、meta-yocto-bsp 等目录。这些就是Yocto的核心meta层。
核心概念: 每个meta层都包含一组配方(recipes)、配置文件和补丁。比如 meta 是OpenEmbedded核心层,meta-poky 是Poky的发行版配置层。我们后面添加的硬件支持层、应用层,都会放在这里。
2.4 首次构建最小系统
好,环境搭好了,代码也拉下来了。现在我们来编译第一个系统——一个最小化的嵌入式Linux镜像。它叫 core-image-minimal,只包含最基本的系统组件,比如内核、根文件系统、BusyBox等。
先设置构建环境。Yocto提供了一个脚本,帮我们初始化环境变量:
source oe-init-build-env build
执行后,你会自动进入 build 目录。这个目录是编译的工作区,所有临时文件和最终产物都会放在这里。
然后,检查一下 conf/local.conf 文件。这是构建的核心配置文件。我建议你至少修改以下几个参数:
| 参数 | 说明 | 我的建议值 |
|---|---|---|
MACHINE |
目标硬件平台 | qemux86-64(先用QEMU模拟器测试) |
DL_DIR |
源码下载缓存目录 | /opt/yocto/downloads(避免重复下载) |
SSTATE_DIR |
共享状态缓存目录 | /opt/yocto/sstate-cache(加速后续编译) |
BB_NUMBER_THREADS |
并行编译线程数 | CPU核心数(比如 8) |
PARALLEL_MAKE |
make并行数 | CPU核心数(比如 8) |
用vim打开配置文件:
vim conf/local.conf
找到对应行,修改成你的配置。我个人习惯把 DL_DIR 和 SSTATE_DIR 放到 /opt/yocto/ 下,这样多个项目可以共享缓存,省时间。
BB_NUMBER_THREADS 设得太大。我曾经在32核服务器上设了32,结果内存爆了,编译直接崩溃。建议先设成CPU核心数的一半,稳定后再调高。
配置完成后,开始编译:
bitbake core-image-minimal
第一次编译会下载大量源码包,包括Linux内核、GCC工具链、glibc库等。整个过程可能需要1到3小时,取决于你的网络和CPU性能。
编译过程中,你会看到类似这样的输出:
Loading cache: 100%
Parsing recipes: 100%
...
NOTE: Tasks summary: Attempted 2345 tasks of which 0 didn't need to be rerun and all succeeded.
看到 all succeeded,恭喜你,第一个最小系统编译成功了!
编译产物在 tmp/deploy/images/qemux86-64/ 目录下。你可以用QEMU启动它:
runqemu qemux86-64
你会看到一个Linux系统启动,并进入登录提示符。默认用户名是 root,没有密码。
tmp/log/cooker.log 文件,里面记录了详细的错误信息。最常见的错误是 fetch failed,重新执行 bitbake core-image-minimal 即可,Yocto会从断点继续编译。
嗯,到这里,你的开发环境就完全搭建好了。下一章,我们会在这个基础上,添加硬件支持层,让系统真正跑在物联网网关的硬件上。