搭建Yocto开发环境:宿主机要求、安装必要软件包、下载Poky源码、配置Git用户信息、首次构建最小系统
好,咱们正式开始动手了。搭建Yocto开发环境这件事,说难不难,说简单也不简单。我见过不少新手一上来就卡在环境配置上,折腾一整天连个helloworld都没跑起来。其实说白了,只要把几个关键点踩对,后面就顺了。
宿主机要求:别让你的电脑拖后腿
Yocto是个吃资源的家伙。我第一次用一台4GB内存的笔记本跑bitbake,结果编译到一半系统直接卡死,风扇狂转,最后只能强制关机。嗯,从那以后我学乖了。
官方推荐的最低配置是这样的:
| 项目 | 最低要求 | 推荐配置 |
|---|---|---|
| CPU | 双核x86_64 | 4核以上 |
| 内存 | 4GB | 8GB+ |
| 磁盘空间 | 50GB空闲 | 100GB+ SSD |
| 操作系统 | Ubuntu 20.04+ / CentOS 7+ | Ubuntu 22.04 LTS |
我个人习惯用Ubuntu 22.04 LTS,包管理方便,社区支持也好。如果你用其他发行版,记得确认gcc、make这些基础工具链的版本够新。
安装必要软件包:一条命令搞定
Yocto构建过程中需要一堆依赖库。你想想看,它要交叉编译整个Linux系统,从内核到根文件系统,缺一个包都可能报错。我建议直接安装官方推荐的完整列表:
sudo apt-get update
sudo apt-get 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 file locales libacl1
装完之后,最好检查一下关键工具的版本:
gcc --version
python3 --version
git --version
make --version
确保gcc版本不低于8.0,python3不低于3.8。如果版本太低,后面编译内核时可能会出问题。
下载Poky源码:选对分支很重要
Poky是Yocto的参考发行版,也是我们学习的起点。下载源码很简单,但选分支是个学问。
我个人建议初学者用稳定分支,比如kirkstone或dunfell。别一上来就追最新版,最新版往往有未修复的bug。我在一个项目里用过当时的master分支,结果某个配方依赖的库版本冲突,折腾了两天才搞定。
git clone git://git.yoctoproject.org/poky.git
cd poky
git checkout -b kirkstone remotes/origin/kirkstone
下载完成后,看看目录结构:
poky/
├── bitbake/ # 构建引擎
├── meta/ # 核心层
├── meta-poky/ # Poky发行版配置
├── meta-yocto-bsp/ # 板级支持包
├── oe-init-build-env # 环境初始化脚本
└── README
这个结构你以后会非常熟悉。说白了,meta/是核心,bitbake/是引擎,其他都是扩展。
配置Git用户信息:别忽略这一步
很多人觉得Git配置跟Yocto没关系,直接跳过。但Yocto在构建过程中会用到Git来管理源码补丁和版本信息。如果你没配置用户信息,bitbake可能会报warning,甚至在某些情况下直接失败。
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
我曾经在一个团队里遇到过这样的问题:新同事没配Git用户信息,结果用devtool修改配方时,生成的补丁文件作者信息是空的,代码审查时直接被驳回。嗯,这种低级错误咱们就别犯了。
另外,建议配置一下Git的默认编辑器:
git config --global core.editor vim
这个不是必须的,但如果你后面要手动编辑补丁或提交信息,有个顺手的编辑器会舒服很多。
首次构建最小系统:见证奇迹的时刻
环境配好了,源码也下载了,接下来就是第一次构建。这一步会编译出一个最小的Linux系统镜像,包含内核、根文件系统和基本的启动脚本。
首先,初始化构建环境:
cd poky
source oe-init-build-env build
这个脚本会创建一个build目录,并设置好所有环境变量。执行完后,你会看到终端提示符变了,前面多了个build字样。
然后,检查一下conf/local.conf文件。这里有几个关键配置:
# 目标机器,默认是qemux86-64
MACHINE ??= "qemux86-64"
# 并行编译线程数,建议设为CPU核心数+1
BB_NUMBER_THREADS = "8"
PARALLEL_MAKE = "-j 8"
# 下载目录,可以复用,避免重复下载
DL_DIR ?= "${TOPDIR}/../downloads"
一切就绪后,执行构建命令:
bitbake core-image-minimal
这个过程会持续30分钟到2小时不等,取决于你的机器性能。第一次构建需要下载大量源码包,包括Linux内核、glibc、busybox等。后续构建会快很多,因为大部分源码已经缓存了。
构建过程中,你可以用top或htop观察CPU和内存使用情况。如果发现内存快满了,可以适当减少并行线程数。
构建成功后,你会看到类似这样的输出:
NOTE: Tasks Summary: Attempted 1234 tasks of which 0 didn't need to be rerun and all succeeded.
生成的镜像文件在tmp/deploy/images/qemux86-64/目录下。你可以用QEMU启动它:
runqemu qemux86-64
看到Linux启动日志在终端滚动,最后出现登录提示符时,恭喜你,Yocto环境搭建成功了!
downloads/目录,把没下载完的包手动下载放进去,然后重新运行bitbake就行。另外,记得用稳定的网络环境,别用VPN,有些镜像站点会屏蔽VPN的IP。
知识体系总览
下面这张图总结了本章的核心逻辑,你可以对照着检查自己是否每个环节都理解了:
环境搭建这一步,说白了就是打好地基。地基稳了,后面盖楼才踏实。我见过太多人急着学配方编写、内核配置,结果环境没配好,每次构建都报错,最后心态崩了。所以,花点时间把这一步走扎实,绝对值得。
好了,现在你的Yocto环境已经跑起来了。接下来就可以开始探索配方、层、内核配置这些更有趣的内容了。