2. 开发环境搭建:宿主机要求与基础配置

做嵌入式Linux开发,第一件事就是把开发环境收拾利索。我见过不少新手,一上来就急着编译,结果卡在各种依赖缺失、版本不对的问题上,折腾半天还不知道哪错了。说白了,环境搭好了,后面的事才顺。

这一节,我们就来搞定宿主机。我会把Ubuntu和Debian的配置方法都讲清楚,包括装哪些包、怎么配Git、怎么设代理和镜像源。跟着走一遍,你的机器就能开工了。

2.1 宿主机硬件与系统要求

先说说硬件。Yocto编译起来挺吃资源的,尤其是第一次构建,要下载大量源码包,还要交叉编译整个系统。我个人建议的配置是这样的:

项目 最低要求 推荐配置
CPU 4核 8核及以上
内存 8GB 16GB或更高
磁盘空间 100GB空闲 256GB SSD
操作系统 Ubuntu 20.04 / Debian 11 Ubuntu 22.04 LTS
注意: 磁盘空间一定要留够。我第一次用Yocto时,只分了80GB,结果编译到一半磁盘满了,整个构建失败,白白浪费了三个小时。建议至少准备150GB以上。

操作系统方面,Yocto官方长期支持Ubuntu LTS版本和Debian稳定版。我个人更推荐Ubuntu 22.04 LTS,因为社区活跃,遇到问题容易搜到解决方案。

2.2 安装必要软件包

系统装好后,第一件事就是更新软件源,然后安装Yocto所需的依赖包。不同系统版本,包名略有差异,但核心组件是一样的。

2.2.1 Ubuntu 22.04 / 20.04

sudo apt update
sudo apt upgrade -y

sudo apt 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 pylint3 xterm python3-subunit \
    mesa-common-dev zstd liblz4-tool file locales libacl1

2.2.2 Debian 11 / 12

Debian上基本一样,只是包管理器是apt,但要注意Debian默认没有启用non-free源,有些固件包可能需要额外配置。

sudo apt update
sudo apt upgrade -y

sudo apt 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 pylint3 xterm python3-subunit \
    mesa-common-dev zstd liblz4-tool file locales
小技巧: 装完后可以用 dpkg -l | grep <包名> 检查是否安装成功。我习惯把这条命令记在笔记里,每次换机器都跑一遍,省得漏包。

2.3 配置Git和Repo

Yocto的源码管理依赖Git和Repo工具。Repo是Google开发的,用来管理多Git仓库的项目,Yocto的各个层(layers)就是通过Repo来组织的。

2.3.1 安装Git

Git一般系统自带,但版本可能偏老。建议安装最新稳定版:

sudo apt install -y git
git --version

然后配置用户信息,这是必须的,否则提交时会报错:

git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"

我个人还会配几个常用别名,提高效率:

git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.st status
git config --global alias.lg "log --oneline --graph --all"

2.3.2 安装Repo工具

Repo是一个Python脚本,安装很简单:

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

然后把 ~/.local/bin 加到PATH里:

echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

验证一下:

repo --version
注意: 如果curl下载失败,可能是网络问题。我曾经在某个内网环境里,curl被屏蔽了,改用wget才搞定。你也可以试试 wget -O ~/.local/bin/repo https://storage.googleapis.com/git-repo-downloads/repo。

2.4 设置代理和镜像源

Yocto构建过程中,会从GitHub、kernel.org等站点下载大量源码包。在国内,网络访问经常不稳定,甚至完全连不上。所以,配置代理或镜像源是必须的。

2.4.1 配置Git代理

如果你有HTTP代理,可以这样配:

git config --global http.proxy http://proxy.example.com:8080
git config --global https.proxy http://proxy.example.com:8080

如果只是临时用,也可以只对Yocto项目目录设置:

cd ~/yocto
git config http.proxy http://proxy.example.com:8080

2.4.2 配置APT镜像源

把系统的软件源换成国内镜像,能大幅提升apt install的速度。以Ubuntu 22.04为例,修改 /etc/apt/sources.list:

sudo sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
sudo sed -i 's/security.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
sudo apt update

中科大、清华、阿里云的镜像都很快,选一个离你近的就行。

2.4.3 配置Yocto下载镜像

Yocto的 PREMIRRORS 机制可以让你指定一个本地或内网的镜像服务器,避免每次都去外网下载。这个我们会在后面的章节详细讲,但先提一句:

# 在 local.conf 中添加
PREMIRRORS:prepend = "\
    git://.*/.* http://your-mirror.com/sources/ \n \
    ftp://.*/.* http://your-mirror.com/sources/ \n \
    http://.*/.* http://your-mirror.com/sources/ \n \
    https://.*/.* http://your-mirror.com/sources/ \n"
核心思路: 代理和镜像源不是可选项,而是必选项。尤其是在国内做Yocto开发,不配镜像源,你可能会在下载阶段卡一整天。我刚开始时没配,结果一个core-image-minimal编译了6个小时,其中4小时在等下载。

2.5 验证环境

所有配置完成后,我们来验证一下环境是否就绪。跑几个简单的检查命令:

  1. 检查系统版本:lsb_release -a
  2. 检查Git:git --version 和 git config --list
  3. 检查Repo:repo --version
  4. 检查Python:python3 --version 和 pip3 --version
  5. 检查依赖包:用 dpkg -l 确认关键包已安装

我一般还会跑一个简单的Yocto环境检查脚本,确保所有工具链都可用。你可以创建一个 check_env.sh:

#!/bin/bash
echo "=== 环境检查 ==="
echo "OS: $(lsb_release -ds)"
echo "Kernel: $(uname -r)"
echo "Git: $(git --version 2>&1)"
echo "Repo: $(repo --version 2>&1 | head -1)"
echo "Python: $(python3 --version 2>&1)"
echo "GCC: $(gcc --version 2>&1 | head -1)"
echo "Make: $(make --version 2>&1 | head -1)"
echo "=================="

跑一下:

chmod +x check_env.sh
./check_env.sh

如果所有命令都正常输出,没有报错,那环境就搭好了。

2.6 本章知识结构图

下面这张图总结了开发环境搭建的完整流程和关键节点:

开发环境搭建流程 宿主机准备 安装系统 & 必要软件包 配置 Git & Repo 设置代理 & 镜像源 验证环境 关键:每一步都验证,避免后续编译时出现莫名其妙的错误

环境搭建这一步,看起来琐碎,但真的很重要。我见过太多人因为少装了一个包,或者Git没配好,编译到一半报错,然后花大量时间排查。你想想看,如果一开始就把这些基础打牢,后面是不是省心多了?