2. 开发环境搭建:宿主机要求与首次构建

说实话,做嵌入式开发,环境搭不好,后面全是坑。我见过太多人花了一周时间折腾Yocto,结果卡在依赖包上。这一章,咱们就把地基打牢。

2.1 宿主机要求

Yocto对宿主机有一定要求。别想着用Windows或者Mac直接跑,虽然能折腾,但那是给自己找麻烦。我个人习惯用Ubuntu LTS版本,稳定,社区支持好。

项目 最低要求 推荐配置
操作系统 Ubuntu 20.04 / Debian 11 Ubuntu 22.04 LTS
CPU 4核 8核及以上
内存 8GB 16GB+
磁盘空间 100GB空闲 250GB+ SSD
文件系统 ext4 ext4 (不要用NTFS)
⚠️ 磁盘警告: 千万别用NTFS或FAT32挂载的磁盘来放Yocto源码。Yocto构建过程中会创建大量符号链接,NTFS不支持。我曾经有个同事图省事,把代码放在Windows共享盘上,结果构建到一半全部失败,查了两天才找到原因。

2.2 安装必要软件包

Yocto构建需要一堆工具链。别怕,一条命令搞定。我建议先更新一下系统包索引:

sudo apt update
sudo apt upgrade -y

然后安装Yocto必需的基础包:

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

嗯,这里要注意。不同Ubuntu版本需要的包略有差异。如果你用的是Ubuntu 22.04,上面这个列表基本够用。如果是Debian,可能还需要额外装一个python3-distutils。

💡 小技巧: 我习惯把安装命令写成一个shell脚本,每次换机器直接跑。省得一个个敲,还容易漏。

2.3 配置Git和Repo

Yocto用Git管理源码,用Repo管理多个Git仓库。说白了,Repo就是Google写的一个Python脚本,帮你批量操作多个Git仓库。

先配Git,这是基本功:

git config --global user.name "你的名字"
git config --global user.email "你的邮箱"
git config --global color.ui auto

然后装Repo工具。我个人喜欢把它放在~/bin目录下:

mkdir -p ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
echo 'export PATH=$PATH:~/bin' >> ~/.bashrc
source ~/.bashrc

验证一下是否装好了:

repo --version

如果能看到版本号,说明搞定了。

2.4 下载Yocto源码

Yocto的源码通过Repo来拉取。我们先用Poky作为参考发行版。Poky说白了就是Yocto的官方示例,包含了BitBake构建系统和元数据。

创建一个工作目录,我习惯叫yocto-workspace:

mkdir ~/yocto-workspace
cd ~/yocto-workspace

然后初始化Repo并同步源码。这里以Yocto 4.0 (Kirkstone)为例,这个版本比较稳定,适合学习:

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

这个过程取决于你的网速。我第一次拉的时候等了将近半小时。别急,去喝杯咖啡。

📌 关于版本选择: Yocto每两年出一个LTS版本。Kirkstone (4.0) 是2022年的LTS,支持到2024年。如果你做产品,建议选LTS版本。非LTS版本虽然新,但API变化快,维护起来头疼。

2.5 首次构建最小系统

源码拉下来了,咱们先构建一个最小系统。目标就是跑通整个流程,验证环境没问题。

先设置环境变量。Yocto提供了一个脚本,帮你搞定一切:

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

执行完这个命令,你会自动进入build目录。这个脚本做了三件事:

  • 设置BitBake和OpenEmbedded的环境变量
  • 创建build/conf目录,生成默认配置文件
  • 把当前shell切换到构建目录

然后看一下生成的配置文件:

ls conf/
# 你会看到 bblayers.conf 和 local.conf

对于首次构建,local.conf里有个关键参数要改。用你喜欢的编辑器打开它:

nano conf/local.conf

找到MACHINE变量,默认是qemux86-64。如果你想为真实硬件构建,比如树莓派或BeagleBone,就改成对应的机器名。咱们先保持默认,用QEMU模拟器跑:

MACHINE ??= "qemux86-64"

还有一个参数我建议改一下——并行编译数。根据你的CPU核心数来设:

BB_NUMBER_THREADS = "8"
PARALLEL_MAKE = "-j 8"

好了,开始构建。目标选core-image-minimal,这是Yocto提供的最小系统镜像:

bitbake core-image-minimal

第一次构建会下载所有依赖的源码包,编译交叉工具链,然后构建整个系统。这个过程……嗯,第一次会比较慢。在我的8核机器上,大概需要40分钟到1小时。如果你用4核,可能要2小时以上。

⚠️ 网络问题: 构建过程中会从多个开源项目服务器下载源码。如果你在墙内,可能会遇到下载失败。我建议提前配置好代理,或者在local.conf里添加国内的镜像源。具体配置方法,后面章节会详细讲。

构建完成后,你会看到类似这样的输出:

NOTE: Tasks summary: Attempted 2345 tasks of which 0 didn't need to be rerun, all succeeded

生成的镜像在tmp/deploy/images/qemux86-64/目录下。你可以用QEMU启动它:

runqemu qemux86-64

如果看到QEMU窗口里出现了Linux登录提示符,恭喜你,环境搭建成功了!

💡 我的经验: 第一次构建成功后,我建议你备份一下downloads目录。下次换机器或者重新构建时,直接拷贝过去,能省掉大量下载时间。这个目录默认在build/downloads下。

2.6 本章知识结构

下面这张图帮你理清整个开发环境的搭建流程:

Yocto开发环境搭建流程 Yocto开发环境搭建流程 宿主机准备 (Ubuntu/Debian) 安装必要软件包 配置Git和Repo 下载Yocto源码 (repo sync) 首次构建 (bitbake core-image-minimal) 关键要点 • 磁盘至少100GB • 内存推荐16GB+ • 使用ext4文件系统 • 选LTS版本更稳定 • 首次构建较慢 • 备份downloads目录 • 配置并行编译 • 注意网络代理 • 用runqemu验证 • 别用NTFS分区 输出: core-image-minimal

这张图把整个流程串起来了。从宿主机准备开始,一步步走到首次构建成功。你跟着这个流程走,基本不会出大问题。