2、搭建Yocto开发环境:宿主机要求与源码下载

说实话,搭建Yocto环境这件事,看着简单,但坑真不少。我见过太多新手一上来就卡在环境配置上,折腾半天连个bitbake都跑不起来。今天咱们就把这事彻底捋清楚。

2.1 宿主机要求:Ubuntu还是Debian?

Yocto官方推荐的是Ubuntu LTS版本。我个人习惯用Ubuntu 20.04或22.04,这两个版本我都在项目中验证过,兼容性最好。

为什么推荐Ubuntu?说白了,社区支持最全。你遇到问题,Google一搜,八成能找到答案。Debian也行,但有些包名不一样,新手容易懵。

硬件要求:

  • CPU:4核以上(我建议8核,编译时间能省一半)
  • 内存:至少8GB(16GB更稳,我遇到过内存不够导致编译崩溃的情况)
  • 硬盘:至少100GB空闲空间(SSD最好,机械硬盘编译一次能让你等到怀疑人生)
  • 系统:Ubuntu 20.04 LTS 或 22.04 LTS(64位)

注意:千万别用虚拟机跑Yocto,除非你给虚拟机分配了足够资源。我曾经在4GB内存的虚拟机上编译,等了6个小时,最后OOM崩溃了...嗯,从那以后我都是物理机或者高性能云服务器。

2.2 安装必要软件包

Yocto对系统依赖挺多的。你想想看,它要交叉编译整个Linux系统,缺一个工具链都不行。

先更新包管理器:

sudo apt update
sudo apt upgrade -y

然后安装核心依赖:

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版本需要的包略有差异。我建议你装完后跑一下Yocto自带的检查脚本:

# 进入poky目录后执行
source oe-init-build-env
# 系统会自动检查缺失的依赖

我的经验:如果你用的是Ubuntu 22.04,记得额外安装python3-venv,否则后面跑一些Python脚本会报错。这个坑我踩过,当时排查了半天才发现是虚拟环境的问题。

2.3 配置Git与Repo

Git是Yocto的命根子。所有源码管理都靠它。配置其实很简单,但有些细节不注意,后面会出幺蛾子。

先设置你的身份信息:

git config --global user.name "你的名字"
git config --global user.email "你的邮箱@example.com"

然后配置一些实用参数:

git config --global color.ui auto
git config --global core.editor vim  # 或者你喜欢的编辑器
git config --global http.postBuffer 524288000  # 解决大文件推送问题

Repo工具是Google开发的,用来管理多个Git仓库。Yocto的源码结构很复杂,用Repo能一次性拉取所有子项目。

安装Repo:

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

记得把~/.local/bin加到.bashrc里,不然每次开终端都要重新export。

注意:国内网络环境下载Repo可能会很慢。我建议你提前准备好代理,或者用国内镜像源。否则光下载Repo就能卡半天。

2.4 下载Yocto源码(Poky)

Poky是Yocto的参考发行版,也是我们最常用的起点。下载方式有两种,我分别说说。

方式一:直接用Git克隆

这种方式适合只想用Poky,不涉及其他层的情况:

git clone git://git.yoctoproject.org/poky
cd poky
git checkout -b my-branch <tag-name>  # 切换到特定版本

方式二:用Repo拉取完整源码

这种方式适合需要同时管理多个层(meta层)的项目。我项目中用的就是这种方式:

mkdir yocto-project
cd yocto-project
repo init -u git://git.yoctoproject.org/poky -b <branch-name>
repo sync

这里<branch-name>可以填kirkstonedunfell等稳定分支。我个人推荐新手用kirkstone,它是LTS版本,支持周期长,社区活跃。

版本选择建议:

版本代号 Yocto版本 推荐场景
kirkstone 4.0.x 新手首选,LTS支持到2026年
dunfell 3.1.x 老项目维护,LTS已结束
mickledore 4.2.x 尝鲜新特性,非LTS

下载完成后,验证一下是否成功:

cd poky
source oe-init-build-env
# 如果看到类似 "You had no conf/local.conf file. This configuration file has therefore been..." 的提示,说明环境搭建成功

避坑指南:我曾经在下载源码时遇到网络超时,原因是公司防火墙限制了Git端口。解决办法是改用HTTPS协议:git clone https://git.yoctoproject.org/poky。如果还不行,试试国内镜像源,比如清华大学的镜像。

好了,到这里你的Yocto开发环境就搭好了。下一步就是创建你的第一个镜像,咱们下一章见。