2. 开发环境搭建与首次构建
好,咱们正式开始动手。这一章的目标很明确——把Yocto的构建环境搭起来。别小看这一步,我见过太多人卡在依赖安装上,折腾一整天最后发现是Python版本不对。咱们稳扎稳打,一次搞定。
2.1 为什么选择Ubuntu?
Yocto官方推荐的是Ubuntu LTS版本。我个人习惯用20.04或22.04,这两个版本社区支持最好,踩过的坑也最多,解决方案一搜一大把。
说白了,Yocto对宿主机的依赖很敏感。你用Debian、Fedora也能跑,但Ubuntu的包管理最省心。你想想看,一个apt-get install就能搞定大部分依赖,何必跟自己过不去?
| Ubuntu版本 | Yocto兼容性 | 我的建议 |
|---|---|---|
| 20.04 LTS | 完美支持 | 最稳定,推荐新手 |
| 22.04 LTS | 完美支持 | Python 3.10原生,省事 |
| 18.04 LTS | 部分支持 | Python版本太老,不推荐 |
2.2 安装核心依赖包
Yocto的依赖清单挺长的,但别慌。我整理了一份经过实战检验的列表,直接复制粘贴就行。
sudo apt-get update
sudo apt-get 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 file locales libacl1
这里有个坑——locales包。我曾经在一台新装的Ubuntu上跑Yocto,编译到一半报错说locale不对。排查了半天,发现是系统没生成en_US.UTF-8。所以顺手跑一下:
sudo locale-gen en_US.UTF-8
python3 --version看一眼,低于3.8就升级。
2.3 安装额外的构建工具
除了基础依赖,Yocto还需要一些特定工具。嗯,这里要重点提一下chrpath和socat——这两个是Yocto构建过程中的关键角色。
- chrpath:用于修改ELF文件的rpath,Yocto用它来确保库文件路径正确。没有它,构建到一半会报
chrpath: command not found。 - socat:用于串口重定向,在QEMU测试时特别有用。我刚开始做嵌入式时觉得这玩意儿没用,直到有一次调试串口输出,才发现它真香。
- zstd:压缩工具,Yocto从Honister版本开始用它做sstate缓存压缩,速度比gzip快不少。
# 确认安装
which chrpath socat zstd
# 如果没找到,手动补装
sudo apt-get install -y chrpath socat zstd
2.4 配置Git
Yocto的源码管理全靠Git。你想想看,几十个layer,每个都是独立的Git仓库。Git配置不好,后面拉代码的时候全是坑。
我个人习惯先配好全局用户信息:
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
然后设置一些Yocto相关的优化参数:
# 关闭自动转换换行符,避免Windows/Linux混用出问题
git config --global core.autocrlf false
# 设置缓存大小,拉大仓库时提速
git config --global http.postBuffer 524288000
# 启用credential缓存,省得每次输密码
git config --global credential.helper cache
关键点:Yocto的layer仓库通常很大,比如poky就有几百MB。如果网络不稳定,建议用git clone --depth=1只拉最新版本,能省不少时间。
2.5 安装与配置Repo工具
Repo是Google开发的Git仓库管理工具,Yocto用它来管理多个layer。说白了,Repo就是一个脚本,帮你批量操作多个Git仓库。
2.5.1 安装Repo
# 下载Repo脚本
mkdir -p ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
# 添加到PATH
echo 'export PATH=$PATH:~/bin' >> ~/.bashrc
source ~/.bashrc
这里有个坑——Repo的官方源在国内可能访问不了。我曾经在客户现场折腾了半天,最后发现是网络问题。解决方案是用国内镜像:
# 使用清华镜像
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
2.5.2 验证Repo安装
repo --version
# 输出类似:
# <repo version="2.32">
# <repo launcher="/home/user/bin/repo">
# <git version="2.25.1">
python3 ~/bin/repo --version。
2.6 验证环境是否就绪
所有东西装完后,我习惯跑一个快速验证脚本。别等到编译时才发现缺东西,那太浪费时间了。
#!/bin/bash
# check_env.sh - 快速验证Yocto构建环境
echo "=== 检查基础工具 ==="
for cmd in gcc g++ make python3 git repo chrpath socat zstd; do
if command -v $cmd &> /dev/null; then
echo "[OK] $cmd"
else
echo "[FAIL] $cmd - 未安装"
fi
done
echo ""
echo "=== 检查Python版本 ==="
python3 --version
echo ""
echo "=== 检查Git配置 ==="
git config --global --list
跑完这个脚本,如果全是[OK],那环境基本就绪了。如果有[FAIL],回头补装对应的包。
2.7 本章知识结构图
下面这张图把整个环境搭建的流程串起来了。你可以把它当成一张检查清单,按顺序走一遍就行。
2.8 常见问题与避坑
环境搭建这块,我踩过的坑比走过的路还多。挑几个典型的说说:
- Python版本冲突:系统自带的Python是2.7,Yocto需要3.x。解决方案是用
update-alternatives切换默认Python版本。 - 磁盘空间不足:Yocto构建一次至少需要50GB空间。我曾经在只有20GB的虚拟机上跑,编译到一半直接报错。建议至少留100GB。
- 网络超时:拉取layer时经常断。解决方案是用
git config --global http.lowSpeedLimit 0关闭低速限制。