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
⚠️ 重要提醒: 千万别用NTFS或FAT32文件系统来放Yocto源码。我曾经有个同事,把代码放在NTFS分区上,编译到一半就报各种奇怪的权限错误,排查了一整天才发现是文件系统的问题。

我个人习惯用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解析配方时会直接报错。

💡 小技巧: 如果你不确定当前系统缺什么,可以运行Yocto自带的依赖检查脚本。进入poky目录后执行 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
⚠️ 注意: 有些公司内网环境可能无法直接访问Google的服务器。我曾经在客户现场部署时,就遇到这个问题。解决办法是用国内的镜像源,比如中科大的Repo镜像: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

这个脚本会做几件事:

  • 设置一系列环境变量(比如TEMPLATECONFBBPATH等)
  • 创建build/conf目录
  • 生成local.confbblayers.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-minimalcore-image-base等。

3.5 常见问题与避坑指南

环境搭建这块,我踩过的坑不少,分享几个典型的:

  • 磁盘空间不足:Yocto编译过程中,tmp目录会膨胀到几十GB。我建议至少留150GB空闲空间。曾经有个项目,编译到一半磁盘满了,整个构建目录废掉,只能重来。
  • Python版本冲突:Yocto Kirkstone要求Python 3.8以上。如果你系统默认Python是3.6,需要手动安装新版本。可以用update-alternatives切换默认Python版本。
  • 网络代理问题:在公司内网,记得配置http_proxyhttps_proxy环境变量。不然repo sync会卡在下载阶段。
  • 文件路径含中文:Yocto对中文路径支持不好。我建议工作目录路径里不要有中文或空格,否则编译时可能报编码错误。
📌 我的习惯: 每次搭建新环境,我都会先跑一个最小镜像的编译测试:bitbake core-image-minimal。如果能顺利编译通过,说明环境没问题。这一步大概需要30-60分钟,但能避免后续开发时才发现环境问题。

好了,环境搭建就到这里。下一节咱们会深入local.conf的配置,看看怎么针对安全加固需求调整构建参数。记住,环境搭好了,后面的事就顺了。