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版本太老,不推荐
注意:不要用WSL1跑Yocto,文件系统性能太差。WSL2勉强能用,但建议还是原生Ubuntu或者虚拟机。

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
小技巧:如果你用的是Ubuntu 22.04,记得确认Python版本。Yocto Kirkstone及以上版本要求Python 3.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">
注意:Repo依赖Python 3。如果系统默认Python是2.x,需要手动指定: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 本章知识结构图

下面这张图把整个环境搭建的流程串起来了。你可以把它当成一张检查清单,按顺序走一遍就行。

Yocto构建环境搭建流程 Yocto构建环境搭建流程 选择Ubuntu LTS 安装核心依赖包 安装chrpath/socat/zstd 配置Git参数 安装并配置Repo 运行验证脚本 避坑提示 • 不要用WSL1 • 确认Python ≥ 3.8 • 国内用镜像源 关键命令 • apt-get install • git config • repo init/sync

2.8 常见问题与避坑

环境搭建这块,我踩过的坑比走过的路还多。挑几个典型的说说:

  • Python版本冲突:系统自带的Python是2.7,Yocto需要3.x。解决方案是用update-alternatives切换默认Python版本。
  • 磁盘空间不足:Yocto构建一次至少需要50GB空间。我曾经在只有20GB的虚拟机上跑,编译到一半直接报错。建议至少留100GB。
  • 网络超时:拉取layer时经常断。解决方案是用git config --global http.lowSpeedLimit 0关闭低速限制。
我的习惯:每次搭建新环境,我都会把依赖安装命令写成脚本,保存下来。下次换机器直接跑脚本,省得一个个敲。你也可以试试。