第1章:开发环境搭建——宿主机要求与Poky源码下载

大家好,我是你们的讲师。今天咱们正式开始Yocto之旅。

第一件事,不是写代码,而是搭环境。很多人觉得这步无所谓,随便找个机器就开始搞。嗯,我当年也这么干过,结果编译到一半磁盘满了,或者CPU直接飙到100%卡死,那叫一个痛苦。所以,咱们先把基础打牢。

1.1 宿主机硬件要求:别让机器拖后腿

Yocto构建系统说白了就是个“大胃王”。它要下载大量源码包,解压、编译、打包,整个过程对硬件要求不低。我个人习惯,先看看机器配置够不够,免得浪费时间。

硬件项 最低要求 推荐配置 我的经验
磁盘空间 50GB 空闲 200GB+ SSD 我遇到过磁盘写满,构建到一半报错,只能删掉重来。建议至少留100GB。
内存 4GB 16GB 或更高 4GB内存跑Yocto?你会等到怀疑人生。8GB勉强能跑,16GB才舒服。
CPU 双核 4核8线程以上 核心越多,并行编译越快。我试过用8核机器,比双核快了将近3倍。
⚠️ 注意: 千万别用虚拟机跑Yocto,除非你给它分配了足够的资源。我曾经在虚拟机里只给了2核4GB内存,结果编译一个基础镜像花了整整一天。物理机才是正道。

1.2 安装必要软件包:缺啥补啥

Yocto依赖一堆Linux工具链。不同发行版,安装命令略有不同。我主要用Ubuntu,就以它为例。其他发行版,你查一下官方文档就行。

先更新一下包管理器:

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 \
pylint3 xterm python3-subunit mesa-common-dev zstd liblz4-tool
💡 小提示: 如果你用的是Ubuntu 20.04或更早版本,可能需要额外安装 python3-distutils。我就在一次构建中遇到了“找不到distutils”的错误,加上这个包就解决了。

为什么装这么多?说白了,Yocto的构建过程会调用各种工具。比如chrpath用来修改二进制文件的rpath,socat用于网络通信。少一个,构建就可能卡住。

1.3 配置Git与Repo:版本控制的基石

Yocto项目托管在Git仓库中。我们得先配好Git,才能顺利下载代码。

配置Git用户名和邮箱:

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

我个人习惯再配几个常用选项:

git config --global color.ui auto
git config --global core.editor vim

然后安装Repo工具。Repo是Google开发的,用来管理多Git仓库的工具。Yocto的源码分散在几十个仓库里,手动一个个clone?那太原始了。

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

记得把~/bin加到PATH里:

echo 'export PATH=$PATH:~/bin' >> ~/.bashrc
source ~/.bashrc
🔑 关键点: Repo工具会读取一个manifest文件,里面列出了所有需要下载的仓库及其版本。Yocto的manifest文件通常叫default.xml,放在Poky仓库里。

1.4 下载Poky源码:迈出第一步

好了,环境配好了,现在开始下载Poky。Poky是Yocto的参考发行版,也是我们学习的起点。

创建一个工作目录:

mkdir ~/yocto
cd ~/yocto

初始化Repo并同步代码:

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

这里-b kirkstone指定了分支。Kirkstone是Yocto的长期支持版本(LTS),稳定可靠。我建议新手就从LTS版本开始,别追新。

⚠️ 注意: repo sync会下载大量数据(大约2-3GB),网速慢的话可能要等很久。我曾经在公司网络下等了半小时才下完。如果中途断了,重新执行repo sync就行,它会断点续传。

同步完成后,你会看到poky目录下有很多子目录:

ls ~/yocto/poky/
bitbake/  meta/  meta-poky/  meta-selftest/  meta-skeleton/  meta-yocto-bsp/  oe-init-build-env  scripts/

这些目录各有用途:

  • bitbake/:Yocto的核心构建引擎,相当于“大脑”。
  • meta/:核心的元数据层,包含各种配方和类。
  • meta-poky/:Poky发行版的配置层。
  • meta-yocto-bsp/:板级支持包,包含一些参考硬件的配置。
  • oe-init-build-env:初始化构建环境的脚本,后面我们会经常用到。
💡 小提示: 下载完成后,我建议你运行一下git log --oneline -5看看当前版本。确认一下是不是你想要的版本。我曾经因为网络问题,下载了一个旧版本,结果后面编译时遇到一堆bug,排查了好久才发现是版本不对。

1.5 验证环境:确保一切就绪

代码下载完了,咱们简单验证一下环境是否正常。

进入Poky目录,初始化构建环境:

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

这个脚本会自动创建一个build目录,并设置好环境变量。你会看到类似这样的输出:

You had no conf/local.conf file. This configuration file has therefore been
created for you with some default values. You may wish to edit it to use a
different MACHINE (target hardware) or enable parallel build options.

You had no conf/bblayers.conf file. This configuration file has therefore been
created for you with some default values.

这说明环境初始化成功了。接下来,你可以尝试构建一个最小的镜像:

bitbake core-image-minimal

不过第一次构建会非常慢,因为要下载和编译所有依赖。我建议你先别急着跑,等后面章节我们详细讲解构建流程时再试。

🎯 总结: 开发环境搭建是Yocto学习的第一步,也是最容易踩坑的一步。硬件要够用,软件包要装全,Git和Repo要配好,Poky源码要下对。每一步都别偷懒,否则后面会加倍还回来。

好了,这一章就到这里。下一章我们聊聊Yocto的核心概念——层(Layer)和配方(Recipe)。这些东西搞懂了,你才算真正入门。


公众号:蓝海资料掘金营,微信deep3321