3、开发环境准备:安装依赖工具链,配置Git与Repo,搭建本地软件源与缓存加速

说实话,很多人在Buildroot上栽跟头,不是因为构建逻辑多复杂,而是开发环境没准备好。我见过太多人一上来就make,结果卡在某个依赖报错上,折腾半天才发现是工具链版本不对。

这一章,咱们就把地基打牢。环境准备好了,后面才能跑得顺。

3.1 安装基础依赖工具链

Buildroot对宿主机的依赖其实挺挑剔的。不同发行版,包名还不一样。我个人习惯用Ubuntu 20.04 LTS或22.04 LTS,这两个版本踩坑最少。

先列一个我常用的依赖清单:

sudo apt update
sudo apt install -y \
    build-essential \
    gcc \
    g++ \
    make \
    cmake \
    autoconf \
    automake \
    libtool \
    pkg-config \
    bison \
    flex \
    gettext \
    texinfo \
    patch \
    wget \
    curl \
    git \
    rsync \
    unzip \
    bc \
    python3 \
    python3-pip \
    cpio \
    file \
    lz4 \
    zstd \
    libssl-dev \
    libncurses-dev \
    libelf-dev

嗯,这里要注意一点:千万别用系统自带的gcc版本太老。我曾经在Ubuntu 18.04上折腾过,gcc 7.5编译某些新版本的Buildroot内核模块会报错。建议至少gcc 9以上。

避坑指南: 如果你用的是CentOS或RHEL,记得先装EPEL源。我遇到过同事在CentOS 7上直接apt-get(没错,他搞混了),结果装了一堆不兼容的包,最后只能重装系统。

验证一下工具链是否装全:

gcc --version
make --version
python3 --version

输出正常,说明基础环境没问题。

3.2 配置Git与Repo

Git配置其实很简单,但有几个细节我建议你注意一下。

先配全局用户信息:

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

然后,我个人习惯加几个实用的配置:

git config --global core.autocrlf input
git config --global core.filemode false
git config --global pull.rebase true
git config --global init.defaultBranch main

为什么这么配?autocrlf input能避免Windows和Linux换行符冲突。我在项目中遇到过好几次,从Windows上传的脚本在Linux上跑不了,就是因为\r\n搞的鬼。

接下来是Repo工具。Buildroot虽然不强制用Repo,但如果你管理多个外部包或自定义层,Repo能省不少事。

安装Repo:

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=$PATH:~/.local/bin' >> ~/.bashrc
source ~/.bashrc
小技巧: 如果你在公司内网,访问Google的域名可能很慢。我一般用国内镜像源下载Repo,比如清华的镜像:curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/.local/bin/repo

3.3 搭建本地软件源与缓存加速

Buildroot构建时,会从网上拉取大量的源码包。你想想看,每次make clean后重新构建,都要重新下载几百兆甚至几个G的源码,那得多浪费时间。

所以,本地软件源和缓存加速是提升效率的关键。

3.3.1 配置DL_DIR缓存目录

Buildroot默认把下载的源码包放在dl/目录下。我建议你把它改到一个共享位置,比如/opt/buildroot_dl

mkdir -p /opt/buildroot_dl

然后在Buildroot的配置中设置:

make menuconfig

进入 Build optionsDownload dir,改成/opt/buildroot_dl

或者直接改.config文件:

BR2_DL_DIR="/opt/buildroot_dl"

这样做的好处是:多个项目可以共享同一个下载缓存。我团队里五六个项目都指向同一个DL_DIR,第一次构建慢点,后面基本秒下载。

3.3.2 搭建本地源码镜像

如果你在内网开发,或者网络不稳定,我建议你搭一个本地源码镜像。最简单的方式是用nginxlighttpd搭建一个静态文件服务器。

举个例子,把常用的源码包提前下载好:

mkdir -p /var/www/html/buildroot_sources
cd /var/www/html/buildroot_sources
wget -c https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.1.38.tar.xz
wget -c https://busybox.net/downloads/busybox-1.36.0.tar.bz2
# ... 其他常用包

然后配置Buildroot使用本地源:

make menuconfig

进入 Build optionsMirror and download options,设置BR2_PRIMARY_SITE为你的本地服务器地址:

BR2_PRIMARY_SITE="http://192.168.1.100/buildroot_sources"
重点: 设置BR2_PRIMARY_SITE后,Buildroot会优先从本地源下载。如果本地没有,再回退到官方源。这样既保证了速度,又不会漏包。

3.3.3 使用ccache加速编译

除了下载缓存,编译本身也很耗时。我强烈建议开启ccache:

make menuconfig

进入 Build optionsEnable compiler cache,勾选上。

然后设置ccache的大小:

ccache --max-size=10G

ccache的原理很简单:它会把编译过的中间文件缓存起来。下次再编译同样的代码,直接命中缓存,速度能快好几倍。我在项目中试过,第一次全量构建要40分钟,开启ccache后,增量构建只要5分钟。

注意: ccache虽然好用,但如果你改了工具链版本或编译器参数,记得清空缓存:ccache --clear。否则可能编译出奇怪的问题。

3.4 验证环境是否就绪

最后,咱们跑一个简单的测试,确保所有配置都生效:

cd /path/to/buildroot
make defconfig
make source

make source只会下载源码包,不会真正编译。如果这一步能顺利跑完,说明你的网络、缓存、本地源都配置对了。

如果卡在某个包下载上,检查一下BR2_PRIMARY_SITE的地址是否正确,或者看看防火墙有没有拦截。

嗯,环境准备就到这里。下一章,咱们开始真正动手,配置Buildroot项目并定制第一个内核。