第1章:开发环境搭建——宿主机要求与Poky源码下载
大家好,我是你们的讲师。今天咱们正式开始Yocto之旅。
第一件事,不是写代码,而是搭环境。很多人觉得这步无所谓,随便找个机器就开始搞。嗯,我当年也这么干过,结果编译到一半磁盘满了,或者CPU直接飙到100%卡死,那叫一个痛苦。所以,咱们先把基础打牢。
1.1 宿主机硬件要求:别让机器拖后腿
Yocto构建系统说白了就是个“大胃王”。它要下载大量源码包,解压、编译、打包,整个过程对硬件要求不低。我个人习惯,先看看机器配置够不够,免得浪费时间。
| 硬件项 | 最低要求 | 推荐配置 | 我的经验 |
|---|---|---|---|
| 磁盘空间 | 50GB 空闲 | 200GB+ SSD | 我遇到过磁盘写满,构建到一半报错,只能删掉重来。建议至少留100GB。 |
| 内存 | 4GB | 16GB 或更高 | 4GB内存跑Yocto?你会等到怀疑人生。8GB勉强能跑,16GB才舒服。 |
| CPU | 双核 | 4核8线程以上 | 核心越多,并行编译越快。我试过用8核机器,比双核快了将近3倍。 |
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
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
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的核心概念——层(Layer)和配方(Recipe)。这些东西搞懂了,你才算真正入门。
公众号:蓝海资料掘金营,微信deep3321