3、构建环境搭建:主机系统要求、安装必要软件包、配置Git和Repo、初始化构建环境
好,咱们正式开始动手了。搭建Yocto构建环境,这一步看似基础,但说实话,我见过太多人在这里栽跟头。我自己刚入行那会儿,也曾在环境配置上折腾了两天,最后发现是Ubuntu版本不对。所以这一节,咱们把环境搭建的每个细节都讲透。
3.1 主机系统要求
Yocto项目对主机系统有明确要求。说白了,不是随便拿台电脑就能跑的。
| 项目 | 最低要求 | 推荐配置 |
|---|---|---|
| CPU | 4核 | 8核及以上 |
| 内存 | 8GB | 16GB+ |
| 磁盘空间 | 100GB | 200GB+(SSD) |
| 操作系统 | Ubuntu 20.04 LTS | Ubuntu 22.04 LTS |
| 文件系统 | ext4 | ext4或btrfs |
我个人习惯用Ubuntu 22.04 LTS。为什么?因为它的软件包更新,而且对Python 3.10的支持更好。Yocto的很多工具链都依赖Python,版本不对会出各种幺蛾子。
3.2 安装必要软件包
系统装好了,接下来就是安装Yocto编译所需的依赖包。这一步很关键,缺一个包,编译就可能卡住。
我建议直接运行以下命令,一次性装完所有基础依赖:
sudo apt update
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 \
libegl1-mesa libsdl1.2-dev pylint3 xterm python3-subunit \
mesa-common-dev zstd liblz4-tool
嗯,这里要注意。不同Ubuntu版本需要的包可能略有差异。比如在Ubuntu 20.04上,你可能还需要额外安装python3-distutils。我在项目中遇到过,少了这个包,bitbake解析配方时会直接报错。
scripts/contrib/check-dependencies,它会帮你列出所有缺失的包。
3.3 配置Git和Repo
Yocto的源码管理依赖Git和Repo。Git大家都很熟了,Repo是Google开发的一个多仓库管理工具,Yocto用它来管理多个Git仓库的协同工作。
3.3.1 配置Git
先配好Git的全局信息,不然提交代码时会报错:
git config --global user.name "你的名字"
git config --global user.email "你的邮箱@example.com"
git config --global color.ui auto
我个人习惯还会加两个配置:
git config --global core.editor vim
git config --global pull.rebase true
为什么用rebase?因为Yocto的提交历史很线性,用rebase方式拉取代码,历史记录更干净。你想想看,如果团队里多人协作,一堆merge commit看着多乱。
3.3.2 安装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里:
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
export REPO_URL='https://gerrit-googlesource.proxy.ustclug.org/git-repo/repo'
3.4 初始化构建环境
环境配好了,终于可以初始化Yocto的构建环境了。这一步会拉取所有必要的源码,并生成构建目录。
3.4.1 创建工作目录
先建一个干净的目录,我习惯叫yocto-build:
mkdir ~/yocto-build
cd ~/yocto-build
3.4.2 初始化Repo仓库
以Yocto 4.0(Kirkstone)为例:
repo init -u https://git.yoctoproject.org/poky -b kirkstone
repo sync
这一步会下载poky、meta-openembedded等核心层。网络好的话,大概10-20分钟能下完。如果网络慢,可以加-j4参数并行下载:
repo sync -j4
3.4.3 运行环境初始化脚本
源码拉下来后,运行Yocto自带的初始化脚本:
cd poky
source oe-init-build-env ../build
这个脚本会做几件事:
- 设置一系列环境变量(比如
TEMPLATECONF、BBPATH等) - 创建
build/conf目录 - 生成
local.conf和bblayers.conf两个配置文件 - 把当前shell切换到构建目录
🔑 关键点: 每次打开新终端要编译Yocto时,都必须先执行 source oe-init-build-env。不然bitbake命令会找不到环境。我刚开始学Yocto时,经常忘记这一步,然后对着"command not found"发呆半天。
3.4.4 验证环境是否正常
初始化完成后,可以快速验证一下:
bitbake -e | grep MACHINE
如果输出类似MACHINE="qemux86-64",说明环境配置成功了。
再试试查看可用目标:
bitbake -s | grep core-image
你会看到一系列可构建的镜像目标,比如core-image-minimal、core-image-base等。
3.5 常见问题与避坑指南
环境搭建这块,我踩过的坑不少,分享几个典型的:
- 磁盘空间不足:Yocto编译过程中,
tmp目录会膨胀到几十GB。我建议至少留150GB空闲空间。曾经有个项目,编译到一半磁盘满了,整个构建目录废掉,只能重来。 - Python版本冲突:Yocto Kirkstone要求Python 3.8以上。如果你系统默认Python是3.6,需要手动安装新版本。可以用
update-alternatives切换默认Python版本。 - 网络代理问题:在公司内网,记得配置
http_proxy和https_proxy环境变量。不然repo sync会卡在下载阶段。 - 文件路径含中文:Yocto对中文路径支持不好。我建议工作目录路径里不要有中文或空格,否则编译时可能报编码错误。
bitbake core-image-minimal。如果能顺利编译通过,说明环境没问题。这一步大概需要30-60分钟,但能避免后续开发时才发现环境问题。
好了,环境搭建就到这里。下一节咱们会深入local.conf的配置,看看怎么针对安全加固需求调整构建参数。记住,环境搭好了,后面的事就顺了。