第2章:Yocto开发环境搭建
好,咱们正式开始动手。搭建开发环境这件事,说难不难,说简单也不简单。我见过太多人卡在第一步——环境没配好,后面全是坑。这一章,我带你一步步把地基打牢。
2.1 宿主机要求
先说说硬件。Yocto是个吃资源的家伙,别指望拿个老旧笔记本就能跑得动。我个人习惯用一台至少16GB内存的机器,硬盘建议512GB以上,最好是SSD。为什么?因为Yocto编译过程中会下载大量源码包,解压、编译、打包,磁盘IO压力不小。
操作系统方面,我推荐Ubuntu 20.04 LTS或22.04 LTS。这两个版本我都在项目里用过,兼容性最好。当然,CentOS 7/8、Debian 11/12也行,但有些包名不一样,你得自己折腾一下。
最低配置要求:
- CPU:4核以上(推荐8核)
- 内存:8GB以上(推荐16GB)
- 硬盘:100GB以上空闲空间(推荐256GB)
- 操作系统:Ubuntu 20.04/22.04 LTS 64位
嗯,这里要注意:千万别用Windows子系统WSL1,文件系统性能太差。WSL2勉强能用,但我还是建议直接装双系统或虚拟机。我曾经在WSL2上折腾了一整天,最后发现一个文件权限问题浪费了三个小时——不值当。
2.2 安装必要工具包
Yocto依赖一堆工具包。说白了,它需要GCC、make、patch、bison、flex这些编译工具,还有Python、Perl这些脚本语言。不同发行版包名略有差异,我以Ubuntu为例。
打开终端,执行以下命令:
sudo apt-get update
sudo apt-get install gcc g++ make patch bison flex \
diffstat texinfo chrpath wget \
python3 python3-pip python3-venv \
perl cpio unzip rsync file \
libssl-dev libncurses-dev \
gawk sed git-core lz4 zstd
你可能会问:怎么装这么多?其实每个包都有它的用处。比如chrpath用来修改二进制文件的rpath,diffstat用来统计补丁文件的变化量。我刚开始学Yocto时也嫌麻烦,后来发现少装一个包,编译到一半就报错,那才叫崩溃。
小技巧:如果你用的是Ubuntu 22.04,记得确认Python版本是3.10以上。Yocto的Kirkstone版本开始要求Python 3.8+,老版本会报错。
2.3 配置Git与Repo
Git是Yocto的命根子。所有源码都通过Git管理,你得先配好用户名和邮箱:
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
我个人习惯把credential.helper也配好,省得每次push都输密码:
git config --global credential.helper store
接下来是Repo工具。Repo是Google开发的,用来管理多Git仓库的工具。Yocto的源码分散在几十个仓库里,手动一个个clone太累。安装Repo很简单:
mkdir -p ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
export PATH=~/bin:$PATH
记得把export PATH=~/bin:$PATH加到~/.bashrc里,不然每次开新终端都要重新设置。我曾经忘了这一步,结果第二天回来发现终端里找不到repo命令——嗯,这种低级错误犯一次就够了。
2.4 下载Yocto源码
环境配好了,咱们开始下载源码。Yocto的源码托管在git.yoctoproject.org,我们用repo来拉取。先创建一个工作目录:
mkdir ~/yocto
cd ~/yocto
然后初始化repo。以Kirkstone版本为例(这是Yocto 4.0,长期支持版):
repo init -u https://git.yoctoproject.org/poky -b kirkstone
repo sync
这个过程会下载poky、meta-openembedded、meta-raspberrypi等一堆元层。网络好的话,大概10-20分钟。如果卡住了,别急,可以加个-j4参数并行下载:
repo sync -j4
注意:国内网络访问GitHub可能不稳定。如果你遇到下载失败,可以试试用gitee镜像:
repo init -u https://gitee.com/yocto-mirror/poky -b kirkstone
但镜像可能更新不及时,建议还是用官方源配合代理。
下载完成后,你会看到~/yocto目录下多了poky、meta-openembedded等文件夹。这就是Yocto的源码树了。你想想看,几十个仓库,一个命令搞定,是不是很爽?
2.5 首次构建最小系统
源码到手,咱们来构建第一个镜像。Yocto里有个叫core-image-minimal的镜像,它只包含最基本的Linux系统——内核、根文件系统、busybox,没有图形界面,没有额外工具。说白了,就是能启动到shell的最小系统。
先设置环境变量:
cd ~/yocto/poky
source oe-init-build-env build
这个命令会创建一个build目录,并自动切换到里面。同时,它会设置一系列环境变量,比如TEMPLATECONF、BBPATH等。我第一次运行这个命令时,看到屏幕上刷出一堆信息,还以为出错了——其实那是正常的。
接下来,修改conf/local.conf文件。用你喜欢的编辑器打开:
vim conf/local.conf
找到MACHINE变量,改成你目标板的型号。比如我用qemu模拟x86-64:
MACHINE = "qemux86-64"
如果你有真实硬件,比如Raspberry Pi 4,就改成:
MACHINE = "raspberrypi4-64"
然后设置并行编译数。我建议设为CPU核心数+1:
BB_NUMBER_THREADS = "8"
PARALLEL_MAKE = "-j 8"
好了,开始构建:
bitbake core-image-minimal
第一次构建会非常慢,因为要下载所有源码包并编译。我16核的机器第一次构建也花了将近40分钟。你可以去泡杯咖啡,或者看看文档。如果中途报错,别慌——八成是网络问题,重试一下就好。
构建成功后的输出:
构建完成后,镜像文件在tmp/deploy/images/qemux86-64/目录下。你会看到core-image-minimal-qemux86-64.rootfs.ext4、bzImage等文件。用qemu启动试试:
runqemu qemux86-64
如果一切顺利,你会看到一个Linux终端,输入root登录,没有密码。恭喜,你的第一个Yocto系统跑起来了!
2.6 避坑指南
最后,分享几个我踩过的坑:
- 磁盘空间不足:Yocto构建过程中会生成大量临时文件,
tmp目录可能膨胀到50GB以上。确保你的分区有足够空间。 - 网络代理问题:如果你在公司内网,记得配好
http_proxy和https_proxy环境变量。Yocto的下载器会读取这些变量。 - Python版本冲突:系统自带的Python可能是2.7,但Yocto需要Python 3。用
python3 --version确认一下。 - 文件系统大小写敏感:Yocto的构建系统对文件名大小写敏感。如果你在macOS或Windows上使用不区分大小写的文件系统,会出问题。建议用Linux原生环境。
我曾经在构建到90%时因为磁盘空间不足而失败,那种感觉就像跑马拉松最后一公里摔了一跤。所以,提前检查磁盘空间,别偷懒。
好了,环境搭建就到这里。你手头应该有一个能跑起来的Yocto最小系统了。下一章,咱们聊聊设备树的基础知识——那才是咱们课程的核心。
可可精品资料库