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 |
你想想看,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让它生效。
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
这个过程会下载所有源码,大概需要十几分钟,取决于你的网速。下载完成后,你会看到meta、meta-poky、meta-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',省事多了。
好了,环境搭建就到这里。下一章咱们开始配置设备树,那才是真正的重头戏。