2. 开发环境准备:Linux主机环境搭建、安装必要软件包、配置Git和Repo、设置代理和镜像源
好,咱们正式开始动手了。这一章要解决的是「工欲善其事,必先利其器」的问题。Yocto 项目对宿主机的依赖其实挺重的,说白了,你的 Linux 环境没搭好,后面编译到一半报错,那才叫崩溃。我刚开始接触 Yocto 时,就因为在 Ubuntu 上少装了几个包,折腾了整整一个下午。
所以这一章,我会带你一步步把环境捋顺。咱们的目标是:一台干净的 Linux 主机,装上所有必要的软件包,配好 Git 和 Repo,再搞定代理和镜像源。嗯,这样后面编译起来就顺畅多了。
2.1 选择 Linux 发行版
Yocto 官方推荐的是 Ubuntu 和 Fedora。我个人习惯用 Ubuntu 20.04 LTS 或 22.04 LTS,因为社区支持最好,遇到问题也容易搜到答案。你想想看,如果选一个冷门发行版,出错了连个参考都找不到,多耽误事。
这里有个硬性要求:必须是 64 位系统。32 位系统就别想了,Yocto 根本跑不起来。另外,磁盘空间至少留 100GB,我建议 200GB 以上。为什么?因为一次完整的编译,光是下载的源码和中间产物就能吃掉 50-80GB。我在项目中遇到过磁盘写满导致编译失败的情况,那叫一个尴尬。
推荐配置:
- Ubuntu 20.04 LTS 或 22.04 LTS
- CPU:4 核以上(8 核更佳)
- 内存:8GB 以上(16GB 推荐)
- 磁盘:200GB 以上 SSD
2.2 安装必要软件包
Yocto 编译过程中会用到大量工具链和库。Ubuntu 下,我们通过 apt 来安装。我建议你直接复制下面这组命令,一次性装完。别一个一个装,太慢了。
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 xterm python3-subunit mesa-common-dev zstd liblz4-tool \
file locales libacl1
装完之后,记得设置 locale。Yocto 对 locale 有要求,必须是 UTF-8。我遇到过因为 locale 没设对,导致 bitbake 解析配方文件时报错的情况。
sudo locale-gen en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
小提示:如果你用的是 Ubuntu 22.04,还需要额外安装 python3-is-python 这个包。因为 22.04 默认没有 /usr/bin/python 这个软链接,而 Yocto 有些脚本会直接调用 python。装了这个包,它就会把 python 指向 python3。
2.3 配置 Git 和 Repo
Yocto 的源码管理依赖 Git 和 Repo。Git 大家都很熟了,Repo 是 Google 开发的一个多仓库管理工具,专门用来管理像 Yocto 这种由几十上百个 Git 仓库组成的项目。
2.3.1 配置 Git
先配好你的 Git 用户名和邮箱。这个很重要,因为 Yocto 的提交记录会用到这些信息。
git config --global user.name "你的名字"
git config --global user.email "你的邮箱@example.com"
我个人习惯还会配几个常用选项:
git config --global core.editor vim
git config --global color.ui auto
git config --global pull.rebase false
你想想看,如果不配 color.ui auto,Git 的输出全是黑白,看分支和状态时特别费眼。这些小细节,能省不少事。
2.3.2 安装 Repo
Repo 其实就是一个 Python 脚本。安装方法很简单:
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 里。编辑 ~/.bashrc,在末尾加上:
export PATH="$HOME/.local/bin:$PATH"
然后执行 source ~/.bashrc 让它生效。验证一下:
repo --version
如果能看到版本号,说明安装成功了。
注意:Repo 的官方下载地址有时会被墙。如果你在墙内,建议使用国内的镜像源。比如清华大学的镜像:https://mirrors.tuna.tsinghua.edu.cn/git/git-repo。我曾经在某个项目现场,网络环境受限,折腾了半天才发现是 Repo 下载不下来。后来改用国内镜像,一秒搞定。
2.4 设置代理和镜像源
Yocto 编译过程中需要从网络下载大量源码包。如果你在墙内,或者公司网络有代理,这一步必须提前配好。否则,编译到一半卡在下载环节,那滋味可不好受。
2.4.1 配置代理
如果你需要走 HTTP 代理,可以在 ~/.bashrc 中设置环境变量:
export http_proxy=http://你的代理地址:端口
export https_proxy=http://你的代理地址:端口
export ftp_proxy=http://你的代理地址:端口
export no_proxy=localhost,127.0.0.1,192.168.0.0/16
设置完后,记得 source ~/.bashrc 或者重新登录终端。验证一下:
curl -I https://www.google.com
如果能返回 HTTP 状态码,说明代理生效了。
小技巧:Git 也有自己的代理配置。如果你只配了系统代理,Git 可能不走。建议单独配一下:
git config --global http.proxy http://你的代理地址:端口
git config --global https.proxy http://你的代理地址:端口
这样 Git 的 clone 操作也会走代理,速度会快很多。
2.4.2 配置 Yocto 镜像源
Yocto 的源码包默认从 downloads.yoctoproject.org 下载。这个服务器在国外,速度很慢。我建议你换成国内的镜像源,比如清华大学的镜像。
具体做法是:在 Yocto 项目的 conf/local.conf 文件中,添加以下内容:
# 使用清华大学镜像源
PREMIRRORS_prepend = "\
git://.*/.* http://mirrors.tuna.tsinghua.edu.cn/yocto/sources/ \n \
ftp://.*/.* http://mirrors.tuna.tsinghua.edu.cn/yocto/sources/ \n \
http://.*/.* http://mirrors.tuna.tsinghua.edu.cn/yocto/sources/ \n \
https://.*/.* http://mirrors.tuna.tsinghua.edu.cn/yocto/sources/ \n \
"
这样配置后,Yocto 会优先从清华镜像下载源码包。如果镜像上没有,再回退到官方源。我在项目中用过这个配置,下载速度从几十 KB/s 提升到了几 MB/s,效果立竿见影。
2.4.3 配置 sstate 缓存镜像
除了源码包,Yocto 的 sstate 缓存也可以配置镜像。sstate 缓存是编译的中间产物,如果命中缓存,可以大幅缩短编译时间。配置方法如下:
# 使用 sstate 缓存镜像
SSTATE_MIRRORS = "\
file://.* http://mirrors.tuna.tsinghua.edu.cn/yocto/sstate/PATH \n \
"
不过要注意,sstate 缓存镜像不是所有镜像站都提供。清华镜像目前是支持的,但缓存内容可能不是最新的。如果你需要最新的缓存,还是建议自己搭建一个 sstate 缓存服务器。
2.5 验证环境
所有配置都完成后,我们来验证一下环境是否就绪。写一个简单的测试脚本:
#!/bin/bash
echo "检查 Git 配置..."
git config --list | grep user
echo ""
echo "检查 Repo 版本..."
repo --version
echo ""
echo "检查 Python 版本..."
python3 --version
echo ""
echo "检查必要工具..."
for cmd in gawk wget diffstat unzip texinfo gcc chrpath socat cpio xz-utils; do
if command -v $cmd > /dev/null 2>&1; then
echo " $cmd: 已安装"
else
echo " $cmd: 未安装"
fi
done
如果所有检查项都通过,恭喜你,开发环境已经准备好了。接下来,我们就可以正式开始 Yocto 的实战了。
本章小结:
- 选择 Ubuntu 20.04/22.04 LTS 作为宿主机,64 位系统,磁盘 200GB+
- 安装 gawk、wget、git、python3 等必要软件包
- 配置 Git 用户名、邮箱,安装 Repo 工具
- 设置 HTTP 代理和 Git 代理,配置清华镜像源加速下载
- 验证环境,确保所有工具就绪
嗯,环境准备这部分看起来琐碎,但真的很重要。我见过太多人因为少装了一个包,或者代理没配好,浪费了大把时间。按照上面的步骤来,一步都不要跳过。下一章,我们就要开始拉取 Yocto 源码,搭建第一个构建环境了。