2、Yocto开发环境搭建:宿主机要求、安装必要软件包、配置Git与Repo、下载Poky源码

好,咱们正式开始动手了。搭建开发环境这件事,说难不难,说简单吧,我见过太多人在这里卡住。说白了,环境没搭好,后面全是坑。我个人习惯先把宿主机的要求理清楚,再一步步装软件、配工具,最后把Poky源码拉下来。走一遍流程,你心里就有底了。

2.1 宿主机要求

Yocto对宿主机是有脾气的。不是随便拿台电脑就能跑。我刚开始接触Yocto时,用了一台4GB内存的笔记本,结果编译到一半直接卡死。嗯,那滋味不好受。

先看看官方推荐的最低配置:

项目 最低要求 推荐配置
CPU 双核 x86_64 4核及以上
内存 4GB 8GB以上
磁盘空间 50GB空闲 100GB以上(SSD更佳)
操作系统 Ubuntu 20.04 LTS Ubuntu 22.04 LTS 或 Debian 11
注意:千万别用Windows的WSL1来跑Yocto,我踩过这个坑。WSL2勉强能用,但文件系统性能很差。最好直接用原生Linux,或者虚拟机里装Ubuntu。

你想想看,Yocto编译一个完整的系统镜像,要下载几百个源码包,解压、打补丁、编译、打包。每一步都吃资源。我建议至少准备8GB内存和100GB SSD空间。否则编译到半夜,突然OOM(内存溢出),那才叫崩溃。

2.2 安装必要软件包

宿主机准备好了,接下来装软件。Yocto依赖一堆工具链,缺一个都不行。我记得第一次装的时候,漏掉了chrpath,结果编译到一半报错,查了半天才发现。

在Ubuntu/Debian系统上,执行以下命令:

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 xterm python3-subunit mesa-common-dev zstd liblz4-tool

如果你是CentOS或Fedora用户,命令会不一样。但我个人建议,新手直接用Ubuntu 22.04 LTS,社区支持最好,遇到问题也容易搜到答案。

小技巧:装完软件包后,可以用 apt list --installed | grep -E "gawk|chrpath|socat" 快速检查是否都装上了。我曾经漏掉过zstd,导致解压失败,后来养成了检查的习惯。

2.3 配置Git与Repo

Yocto的源码管理用到了Git和Repo。Repo是Google开发的一个工具,用来管理多个Git仓库。说白了,Yocto项目由上百个独立的Git仓库组成,Repo帮你一键拉取所有。

先配置Git的用户信息,这是必须的:

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

然后安装Repo工具。我习惯把它放在~/bin目录下:

mkdir -p ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

记得把~/bin加到PATH里。编辑~/.bashrc,在末尾加上:

export PATH=$PATH:~/bin

然后执行source ~/.bashrc让它生效。

注意:如果你在墙内网络环境,Repo可能下载失败。我曾经遇到过这个问题,解决办法是用国内的镜像源。比如把https://storage.googleapis.com换成https://mirrors.tuna.tsinghua.edu.cn。具体方法后面会讲。

2.4 下载Poky源码

环境搭好了,终于可以拉代码了。Poky是Yocto的参考发行版,也是我们学习的基础。我建议先拉一个稳定的分支,比如kirkstone(4.0版本),这个版本比较成熟,文档也全。

创建一个工作目录,比如yocto

mkdir ~/yocto
cd ~/yocto

然后初始化Repo:

repo init -u https://git.yoctoproject.org/poky -b kirkstone

这条命令会创建一个.repo目录,里面记录了所有子仓库的地址和版本信息。接下来同步代码:

repo sync

这个过程会下载所有源码,大概需要十几分钟,取决于你的网速。下载完成后,你会看到metameta-pokymeta-yocto-bsp等目录。

重要:下载完成后,建议用 ls -la 看看目录结构。如果看到 .repo 目录和 meta 等目录,说明成功了。我见过有人只下载了 .repo 目录,忘了执行 repo sync,结果后面编译时一脸懵。

如果你在墙内,可以用国内镜像源加速:

repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/poky -b kirkstone
repo sync

嗯,这里要注意。镜像源可能更新不及时,有时候会落后官方几天。但对我们学习来说,完全够用。

2.5 验证环境是否正常

源码拉下来后,先别急着编译。我习惯先跑一个简单的环境检查脚本:

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

这个脚本会设置环境变量,并创建一个build目录。如果执行成功,你会看到类似这样的输出:

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.

You had no conf/bblayers.conf file. This configuration file has therefore been
created for you with some default values.

看到这个,说明环境搭建成功了。接下来就可以开始配置设备树、编译镜像了。

个人经验:每次打开新终端,都要先执行 source oe-init-build-env 才能使用BitBake命令。我刚开始总是忘记,后来在 .bashrc 里加了个别名:alias yocto='cd ~/yocto && source oe-init-build-env',省事多了。

好了,环境搭建就到这里。下一章咱们开始配置设备树,那才是真正的重头戏。