2、开发环境搭建:Linux主机准备、安装必要软件包、下载Yocto源码、配置Git和Repo

好,咱们正式开始动手了。这一章我带你把开发环境搭起来。说实话,很多新手在Yocto上栽跟头,一半是因为环境没配好。我当年第一次搞Yocto,光装依赖包就折腾了两天——嗯,那时候还不懂什么叫“最小系统”。

2.1 Linux主机准备

Yocto对宿主机的操作系统有要求。我个人习惯用Ubuntu 20.04 LTS或22.04 LTS,这两个版本社区支持最好,踩坑也最少。你问能不能用CentOS?可以,但我不建议——包管理器的差异会让你多花不少时间。

⚠️ 硬件要求:
  • CPU:4核以上(8核更佳)
  • 内存:至少8GB(16GB是舒适区)
  • 磁盘:至少100GB空闲空间(SSD优先)
  • 网络:稳定的宽带连接(第一次构建要下载大量源码)

为什么磁盘要这么大?因为Yocto构建过程中会下载源码包、生成中间文件、最终产出镜像。我见过有人用40GB的虚拟机,结果构建到一半磁盘满了——那叫一个尴尬。

2.2 安装必要软件包

Yocto依赖一堆工具链。别怕,一条命令搞定。这是Ubuntu/Debian系的安装命令:

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

如果你用的是Ubuntu 22.04,还需要额外装一个:

sudo apt-get install python3-venv
💡 我的经验: 装完这些包后,最好重启一下终端或者重新登录。有些环境变量需要刷新,否则后面编译会报一些莫名其妙的错。

我曾经帮一个同事排查问题,他死活编译不过,最后发现是没装chrpath。这种小工具平时不起眼,但Yocto构建过程中会调用它们。所以,老老实实把列表里的包都装上,别偷懒。

2.3 下载Yocto源码

Yocto的源码托管在Git仓库里。我们用的是Poky——它是Yocto的参考发行版,也是大多数嵌入式项目的起点。

先创建一个工作目录:

mkdir ~/yocto
cd ~/yocto

然后克隆Poky仓库。我个人习惯用特定版本分支,而不是master——因为master可能不稳定。比如我们要用Kirkstone(4.0 LTS):

git clone git://git.yoctoproject.org/poky -b kirkstone

这个过程取决于你的网速。我第一次下载时等了快半小时,心里直打鼓。别急,这是正常的。

下载完成后,你会看到poky目录下有一堆子目录:

  • meta/ — 核心元数据
  • meta-poky/ — Poky发行版配置
  • meta-yocto-bsp/ — 参考板级支持包
  • scripts/ — 各种辅助脚本
  • bitbake/ — BitBake构建引擎
📌 重点: 不要修改poky目录下的任何文件!你的自定义层应该放在外面,通过BBLAYERS引入。这是Yocto项目的基本规范。

2.4 配置Git和Repo

Yocto项目使用Git管理源码,而Repo工具用于管理多个Git仓库。虽然小项目只用Git就够了,但一旦涉及多个层(meta层),Repo就派上用场了。

2.4.1 配置Git

先设置你的Git全局信息:

git config --global user.name "你的名字"
git config --global user.email "你的邮箱@example.com"

然后推荐设置一些有用的别名:

git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.lg "log --oneline --graph --all"

我个人还喜欢设置默认的推送行为:

git config --global push.default simple

这样推送时只会推送当前分支,不会误推其他分支。嗯,这个习惯救过我一次——有一次我差点把实验分支推到生产仓库。

2.4.2 安装和配置Repo

Repo是Google开发的工具,用于管理多Git仓库。安装很简单:

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

验证安装:

repo --version
⚠️ 注意: 如果你在公司内网,可能需要配置代理才能下载Repo。设置方式:
export http_proxy=http://你的代理地址:端口
export https_proxy=http://你的代理地址:端口

Repo的典型用法是配合manifest文件。比如你要构建一个包含多个层的项目,可以这样初始化:

repo init -u git://your-manifest-repo/manifest.git -b branch-name
repo sync

不过对于咱们这个课程,大部分时候直接用Git操作poky就够了。Repo更多用在大型团队协作场景中。

2.5 验证环境

环境搭好了,咱们验证一下。进入poky目录,试试能不能初始化构建环境:

cd ~/yocto/poky
source oe-init-build-env

如果看到类似这样的输出,说明环境没问题:

You had no conf/local.conf file. This configuration file has therefore been
created for you with some default values. You may wish to edit it to use a
different MACHINE (target hardware) or enable parallel build options.

The Yocto Project has extensive documentation about OE including a reference
manual which can be found at:
    http://yoctoproject.org/documentation
💡 小技巧: 每次打开新终端,都要先执行source oe-init-build-env才能使用BitBake命令。我习惯在.bashrc里加一个别名:
alias yocto='cd ~/yocto/poky && source oe-init-build-env build'
这样每次输入yocto就自动进入构建环境了。

2.6 常见问题与避坑

最后,分享几个我踩过的坑:

  • 磁盘空间不足: 构建一次Yocto至少需要50GB。我建议你预留100GB以上。可以用df -h检查剩余空间。
  • 网络超时: 国内用户下载Yocto源码可能会很慢。可以考虑使用国内镜像源,或者配置代理。
  • Python版本不匹配: Yocto Kirkstone要求Python 3.8以上。用python3 --version检查一下。
  • 权限问题: 不要在/root/opt等系统目录下构建Yocto。用普通用户在自己的home目录下操作。

我曾经有一次在/tmp目录下构建,结果系统重启后所有文件都没了——嗯,那次我学会了什么叫“临时目录”。

好了,环境搭好了,下一章咱们就开始第一次构建。你会看到BitBake是怎么工作的,也会第一次感受到Yocto的“慢”——但别急,慢工出细活嘛。