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以上。
验证一下工具链是否装全:
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
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 options → Download dir,改成/opt/buildroot_dl。
或者直接改.config文件:
BR2_DL_DIR="/opt/buildroot_dl"
这样做的好处是:多个项目可以共享同一个下载缓存。我团队里五六个项目都指向同一个DL_DIR,第一次构建慢点,后面基本秒下载。
3.3.2 搭建本地源码镜像
如果你在内网开发,或者网络不稳定,我建议你搭一个本地源码镜像。最简单的方式是用nginx或lighttpd搭建一个静态文件服务器。
举个例子,把常用的源码包提前下载好:
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 options → Mirror 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 options → Enable compiler cache,勾选上。
然后设置ccache的大小:
ccache --max-size=10G
ccache的原理很简单:它会把编译过的中间文件缓存起来。下次再编译同样的代码,直接命中缓存,速度能快好几倍。我在项目中试过,第一次全量构建要40分钟,开启ccache后,增量构建只要5分钟。
ccache --clear。否则可能编译出奇怪的问题。
3.4 验证环境是否就绪
最后,咱们跑一个简单的测试,确保所有配置都生效:
cd /path/to/buildroot
make defconfig
make source
make source只会下载源码包,不会真正编译。如果这一步能顺利跑完,说明你的网络、缓存、本地源都配置对了。
如果卡在某个包下载上,检查一下BR2_PRIMARY_SITE的地址是否正确,或者看看防火墙有没有拦截。
嗯,环境准备就到这里。下一章,咱们开始真正动手,配置Buildroot项目并定制第一个内核。