2. 开发环境搭建:宿主机要求与Yocto源码下载

搭建一个靠谱的开发环境,是Yocto移植的第一步。这一步要是没弄好,后面编译到一半报错,那才叫头疼。我刚开始接触Yocto时,就在环境上栽过跟头——Ubuntu版本不对,折腾了两天才发现是包管理器源的问题。

今天咱们就把宿主机环境彻底搞定。跟着我的节奏来,保证一次过。

2.1 宿主机硬件与操作系统要求

先说硬件。Yocto编译是个吃资源的活,尤其是编译完整系统镜像时。我建议的配置如下:

硬件项 最低要求 推荐配置
CPU 4核 8核或以上
内存 8GB 16GB或以上
磁盘空间 100GB空闲 250GB SSD
网络 宽带连接 稳定宽带,建议科学上网

操作系统方面,Yocto官方推荐Ubuntu或Debian。我个人习惯用Ubuntu 20.04 LTS或22.04 LTS,这两个版本经过大量验证,兼容性最好。Debian 11/12也可以,但包名可能略有差异。

注意:不要用Ubuntu 24.04或更老版本(如18.04)。前者Yocto兼容性还没完全验证,后者部分依赖包已停止维护。我在项目中吃过这个亏——用18.04编译,结果openssl版本太旧,折腾了一下午才搞定。

2.2 安装必要软件包

Yocto依赖一堆基础工具。说白了,就是编译器和一些系统库。咱们一条命令搞定:

sudo apt update
sudo apt install gcc g++ make cmake git curl wget \
  python3 python3-pip python3-venv \
  chrpath diffstat gawk texinfo \
  libssl-dev libncurses-dev libgmp-dev libmpfr-dev \
  zlib1g-dev file bzip2 unzip xz-utils \
  lz4 zstd pzstd

这里我解释几个关键包:

  • gcc/g++:C/C++编译器,Yocto编译工具链的基础
  • python3:Yocto的构建脚本大量使用Python
  • chrpath:用于修改二进制文件的rpath,Yocto打包时常用
  • diffstat:生成补丁文件的统计信息
  • texinfo:生成文档的工具,有些包编译时需要
  • lz4/zstd:现代压缩算法,Yocto用它加速解压
小技巧:如果你用的是Debian,记得先启用non-free和contrib源。我在Debian 11上装libssl-dev时,发现默认源里没有,折腾了半天才发现是源配置问题。

2.3 配置Git和Repo

Yocto源码托管在Git仓库中,而且项目结构复杂,需要Repo工具来管理多个Git仓库。咱们一步步来。

2.3.1 配置Git

先设置你的Git用户名和邮箱。这个很重要,因为Yocto的提交记录会用到:

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

然后配置一些实用参数:

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

我个人习惯把pull.rebase设为false,这样拉取代码时默认用merge方式,避免rebase带来的历史重写问题。当然,这个看个人喜好。

2.3.2 安装Repo工具

Repo是Google开发的仓库管理工具,专门用于管理多Git仓库项目。Yocto用它来组织meta层和源码。

安装Repo很简单:

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

验证安装:

repo --version

如果看到版本号,说明安装成功。

注意:Repo依赖Python 3。如果你系统默认Python是2.x版本,需要手动指定Python 3。我在一个老项目上遇到过这个问题——Repo脚本报错,查了半天才发现是Python版本不对。

2.4 下载Yocto源码

环境搭好了,咱们开始下载Yocto源码。这里以Yocto 4.0(Kirkstone)为例,这是目前最稳定的LTS版本。

2.4.1 创建工作目录

mkdir -p ~/yocto
cd ~/yocto

2.4.2 初始化Repo

repo init -u https://git.yoctoproject.org/poky -b kirkstone

这条命令会从Yocto官方仓库拉取manifest文件,指定分支为kirkstone。manifest文件描述了所有需要下载的Git仓库及其版本。

2.4.3 同步源码

repo sync

这一步会下载所有源码,包括:

  • poky:Yocto核心层,包含BitBake构建系统和基础meta层
  • meta-openembedded:OpenEmbedded社区维护的扩展层
  • meta-yocto-bsp:Yocto官方板级支持包

下载时间取决于网络速度。我一般会泡杯咖啡等着——第一次同步大概需要10-30分钟。

加速技巧:如果你网络不好,可以尝试使用国内镜像源。比如清华大学的镜像:
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/poky -b kirkstone
我在国内项目上一直用这个镜像,速度稳定多了。

2.4.4 验证下载结果

同步完成后,检查目录结构:

ls -la ~/yocto/poky/

你应该看到类似这样的结构:

bitbake/       # BitBake构建引擎
meta/          # 核心meta层
meta-poky/     # Poky参考发行版配置
meta-yocto-bsp/ # 官方BSP支持
documentation/ # 文档
oe-init-build-env # 环境初始化脚本

2.5 知识结构总览

为了让你对整个环境搭建流程有个直观认识,我画了张图:

Yocto开发环境搭建流程 Yocto开发环境搭建流程 宿主机准备 Ubuntu 20.04/22.04 安装必要软件包 gcc/python3/texinfo等 配置Git 用户名/邮箱/编辑器 安装Repo工具 curl下载 + 配置PATH repo init 指定分支kirkstone repo sync 下载所有meta层 环境搭建完成 poky + meta层 + 工具链就绪 💡 关键点: • 硬件配置决定编译速度,推荐8核+16GB+SSD • 网络不好时使用国内镜像源加速repo sync

2.6 常见问题与避坑指南

环境搭建过程中,有几个坑我踩过,分享给你:

问题1:repo init报错"fatal: unable to access"
原因:网络不通或Git代理配置问题。
解决:检查网络,或者配置Git代理:
git config --global http.proxy http://代理地址:端口
问题2:repo sync卡住不动
原因:网络不稳定或服务器响应慢。
解决:按Ctrl+C中断,然后重新执行repo sync。Repo支持断点续传,不会重复下载已完成的仓库。
问题3:编译时提示缺少某个包
原因:前面安装的包不全。
解决:根据错误提示安装对应包。Yocto的报错信息一般很明确,比如"Please install xxx"。