2、Yocto开发环境搭建:宿主机要求、安装必要软件包、配置Git与Repo、下载Poky源码
好,咱们正式开始动手了。这一章,我带你把Yocto的开发环境搭起来。别小看这一步,我见过太多人卡在环境上,折腾一整天连个bitbake都跑不起来。说白了,环境搭好了,后面的事就顺了。
2.1 宿主机要求:别拿老爷机硬扛
Yocto编译起来,那是真的吃资源。我个人习惯,至少准备一台4核CPU、8GB内存的机器,硬盘建议留出100GB以上的空闲空间。为什么?你想想看,一个完整的BSP编译下来,光是下载的源码包和中间产物,轻轻松松吃掉30-50GB。
操作系统方面,我推荐Ubuntu 20.04 LTS或22.04 LTS。这两个版本我都在项目里用过,兼容性最好。CentOS 7也行,但有些软件包要自己折腾。嗯,这里要注意:千万别用Windows子系统WSL1,文件系统性能太差,编译速度能慢到让你怀疑人生。WSL2勉强可以,但我还是建议直接上原生Linux。
我曾经在Ubuntu 18.04上折腾了三天,发现某个Python库版本太老,导致bitbake解析配方时报错。后来升级到20.04,问题迎刃而解。所以,请务必使用官方推荐的长期支持版本。
2.2 安装必要软件包:一条命令搞定
Yocto依赖的软件包不少,但好在官方已经帮我们整理好了。对于Ubuntu系统,执行下面这条命令就行:
sudo apt-get update
sudo apt-get install 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
这里我多说一句:locales这个包容易被忽略。如果没有安装,编译时可能会遇到locale相关的警告。我个人习惯装完后跑一下:
sudo locale-gen en_US.UTF-8
另外,如果你用的是Ubuntu 22.04,记得确认python3的版本。Yocto的Kirkstone版本要求Python 3.8以上,22.04自带的3.10完全没问题。
如果你在公司内网环境,记得先配置好apt的代理或镜像源。否则下载依赖包时,那个速度...嗯,你懂的。
2.3 配置Git与Repo:版本管理的基石
Yocto项目用Git管理源码,用Repo工具管理多个Git仓库。说白了,Repo就是Git的“管家”,帮你一次性拉取几十个相关的仓库。
2.3.1 配置Git
先设置你的用户名和邮箱,这个不设的话,后面提交代码会报错:
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
我个人习惯再配两个实用的选项:
git config --global color.ui auto
git config --global core.editor vim
color.ui auto让Git输出带颜色,方便看状态。core.editor vim设置默认编辑器,你习惯用nano也行。
2.3.2 安装Repo
Repo其实就是一个Python脚本。安装方法很简单:
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
我曾经在某个项目里,直接用apt安装的repo,版本太旧,导致拉取代码时一直报“fatal: manifest 'default' not available”。后来换成从Google官方下载的最新版,问题解决。所以,建议手动下载最新版repo。
2.4 下载Poky源码:Yocto的核心
Poky是Yocto的参考发行版,也是我们做BSP移植的起点。下载它,我们用Repo工具。
首先,创建一个工作目录:
mkdir ~/yocto
cd ~/yocto
然后,初始化Repo并拉取代码。以Yocto 4.0(Kirkstone)为例:
repo init -u https://git.yoctoproject.org/poky -b kirkstone
repo sync
这里解释一下:-u指定manifest仓库的URL,-b指定分支。repo sync就是真正开始下载所有仓库的代码。这个过程取决于你的网速,一般需要10-30分钟。
下载完成后,你会看到~/yocto目录下多了这些子目录:
poky:核心的构建系统和元数据meta-openembedded:额外的软件包配方meta-yocto-bsp:Yocto官方的BSP支持- 等等
如果你在公司内网,或者GitHub访问慢,可以用国内的镜像源。比如把
https://git.yoctoproject.org/poky换成https://mirrors.ustc.edu.cn/yocto/poky。速度能快不少。
2.5 验证环境:跑个Hello World
代码下载完了,咱们验证一下环境是否正常。进入poky目录,设置环境变量:
cd ~/yocto/poky
source oe-init-build-env
这个脚本会自动创建一个build目录,并切换到该目录。然后,我们尝试编译一个最简单的镜像:
bitbake core-image-minimal
第一次编译会下载很多源码包,时间比较长。如果最后看到Tasks Summary: Attempted ##### tasks ...并且没有报错,恭喜你,环境搭好了!
- 宿主机:Ubuntu 20.04/22.04,4核CPU,8GB+内存,100GB+硬盘
- 软件包:已安装所有依赖
- Git:已配置用户名和邮箱
- Repo:已安装最新版
- Poky:已通过repo sync下载完成
- 编译:bitbake core-image-minimal成功
嗯,到这里,你的Yocto开发环境就彻底搭好了。下一章,我们开始真正接触BSP的结构,看看一个板级支持包到底长什么样。