2、环境准备:Ubuntu系统安装与配置、必要软件包安装、Git与Repo工具配置、磁盘空间规划

好,咱们正式开始动手了。这一章我带你搞定开发环境的基础——Ubuntu系统。说白了,Yocto的整个编译流程都跑在Linux上,Windows用户别挣扎了,老老实实装个Ubuntu双系统或者虚拟机吧。我个人习惯用Ubuntu 20.04 LTS,稳定、社区支持好,踩过的坑网上基本都有答案。

2.1 Ubuntu系统安装与配置

先说说版本选择。Yocto官方推荐Ubuntu 20.04 LTS或22.04 LTS。我建议你用20.04,为什么?因为我在项目中遇到过,22.04的某些软件包版本太新,反而和Yocto的旧版工具链不兼容,折腾半天。当然,如果你非要尝鲜,记得把系统源换成国内的,比如阿里云、清华源,不然下载速度会让你怀疑人生。

小提示:安装时磁盘分区别偷懒。我建议至少给Ubuntu分200GB空间,后面你会感谢我的。Yocto编译一次,光临时文件就能吃掉50GB以上。

安装完成后,第一件事就是更新系统。打开终端,跑一遍:

sudo apt update
sudo apt upgrade -y

嗯,这里要注意,千万别跳过这一步。我见过有人直接跳过,结果编译到一半报错,查了半天发现是系统库版本太老。更新完系统,顺手装个SSH服务,方便远程操作:

sudo apt install openssh-server -y

2.2 必要软件包安装

Yocto对宿主机的软件包有硬性要求。说白了,它需要一堆编译工具、库和脚本环境。你不需要记住所有包名,但得知道怎么装。官方文档里有个列表,我直接给你整理成命令,复制粘贴就行:

sudo apt 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 -y

这里有个坑,我踩过。如果你用的是Ubuntu 22.04,记得额外装一个python3-venv,不然后面跑某些脚本会报错。命令如下:

sudo apt install python3-venv -y
警告:别用apt-get install python,Ubuntu 20.04之后默认没有python命令,要用python3。我见过有人写脚本时用了python,结果报错找不到命令,折腾半天。

装完这些,你可以验证一下。比如看看gcc版本:

gcc --version

输出里能看到版本号,比如9.4.0,那就对了。

2.3 Git与Repo工具配置

Git是Yocto的命根子。所有代码、层、补丁都通过Git管理。配置Git很简单,但有两件事必须做:设置用户名和邮箱,不然提交时会报错。

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

我个人习惯再加几个配置,让Git用起来更顺手:

git config --global core.editor vim
git config --global color.ui true
git config --global pull.rebase false

接下来是Repo工具。Repo是Google开发的,专门用来管理多Git仓库的项目。Yocto的源码就是由几十个Git仓库组成的,手动一个个clone会疯掉。安装Repo很简单:

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

然后把~/bin加到PATH里。编辑~/.bashrc,在末尾加上:

export PATH=$PATH:~/bin

保存后执行source ~/.bashrc,让配置生效。验证一下:

repo --version

如果看到版本号,比如v2.45,那就搞定了。

小提示:如果你在公司内网,或者访问Google服务慢,可以用国内的Repo镜像。比如清华源:export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'。我当年第一次配环境时,没设镜像,下载Repo花了半小时,后来学乖了。

2.4 磁盘空间规划

磁盘空间是Yocto新手最容易忽略的问题。我刚开始做Yocto时,给虚拟机分了80GB,结果编译到一半磁盘满了,整个环境崩了,气得我差点砸电脑。后来我总结了一套规划:

项目 建议空间 说明
Ubuntu系统 40GB 系统本身、软件包、临时文件
Yocto源码 20GB poky、meta层、BSP等
编译缓存(sstate-cache) 30GB 加速二次编译,建议单独分区
下载源(downloads) 20GB 所有软件包的源码包
构建输出(tmp) 50GB 编译中间文件、镜像文件
预留空间 40GB 防止磁盘写满,留有余地

加起来至少200GB。如果你用SSD,那更好,编译速度能快不少。我建议把sstate-cachedownloads放在单独的目录,甚至单独的分区。这样万一系统崩了,重装后还能复用缓存,不用重新下载所有包。

举个例子,我在/opt下建了个yocto目录,专门放这些东西:

sudo mkdir -p /opt/yocto
sudo chown -R $USER:$USER /opt/yocto
mkdir -p /opt/yocto/sstate-cache
mkdir -p /opt/yocto/downloads

然后在Yocto的local.conf里指定路径:

SSTATE_DIR = "/opt/yocto/sstate-cache"
DL_DIR = "/opt/yocto/downloads"

这样配置后,编译时缓存和下载源都集中管理,清爽多了。

警告:千万别把Yocto的构建目录放在NTFS或FAT32分区上。Yocto依赖Linux的符号链接和权限,这些文件系统不支持。我见过有人把源码放在Windows共享目录里,结果编译到一半报错,查了半天才发现是文件系统的问题。

好了,环境准备就这些。你按这个流程走一遍,基本不会出大问题。下一章我们开始拉取Yocto源码,真正进入实战环节。