第二章 环境搭建:下载Busybox源码、安装交叉编译工具链、配置编译环境变量
好,咱们正式开始动手了。这一章要解决的是「工欲善其事,必先利其器」的问题。说白了,就是把你电脑变成一个能编译Busybox的工作台。
我见过不少新手,上来就 git clone 然后 make,结果报一堆错,心态直接崩了。嗯,其实不是你的问题,是环境没搭对。咱们一步步来。
2.1 下载Busybox源码
Busybox的源码托管在git上。我个人习惯用git clone,因为后续想切版本、看历史都很方便。
git clone git://busybox.net/busybox.git
cd busybox
如果你网络不好,也可以直接去官网下载压缩包:
https://busybox.net/downloads/
我建议下载最新的稳定版,比如1.36.x。为什么?因为新版本对新的内核、新的编译器支持更好。我在一个老项目里用过1.20版,结果编译时一堆告警,折腾了半天。
2.2 安装交叉编译工具链
交叉编译,说白了就是「在PC上编译,在ARM板子上跑」。你想想看,你的开发电脑是x86架构,但嵌入式设备通常是ARM、MIPS、RISC-V。所以需要一个能在x86上生成ARM机器码的编译器。
常用的交叉编译工具链有几种:
- Linaro GCC:ARM官方推荐,稳定可靠
- Buildroot生成的工具链:定制化强,但需要自己编译
- Yocto SDK:功能全,但体积大
我个人最常用的是Linaro的arm-linux-gnueabihf版本。为什么选这个?因为我在项目中遇到过,有些工具链对软浮点支持不好,导致程序跑起来奇慢无比。arm-linux-gnueabihf是硬浮点版本,性能好很多。
安装步骤:
# 下载(以gcc-arm-10.3-2021.07为例)
wget https://developer.arm.com/-/media/Files/downloads/gnu-a/10.3-2021.07/gcc-arm-10.3-2021.07-x86_64-arm-linux-gnueabihf.tar.xz
# 解压到 /opt 目录
sudo tar -xvf gcc-arm-10.3-2021.07-x86_64-arm-linux-gnueabihf.tar.xz -C /opt
# 重命名(方便记忆)
sudo mv /opt/gcc-arm-10.3-2021.07-x86_64-arm-linux-gnueabihf /opt/arm-gcc
2.3 配置编译环境变量
环境变量,说白了就是告诉系统「编译器在哪里」。最核心的是 PATH 变量。
export PATH=/opt/arm-gcc/bin:$PATH
export CROSS_COMPILE=arm-linux-gnueabihf-
export ARCH=arm
解释一下:
PATH:让系统能找到 arm-linux-gnueabihf-gcc 这个命令CROSS_COMPILE:告诉Busybox,编译器的前缀是什么ARCH:指定目标架构
我建议把这些写到 ~/.bashrc 里,这样每次打开终端就不用重新设置了:
echo 'export PATH=/opt/arm-gcc/bin:$PATH' >> ~/.bashrc
echo 'export CROSS_COMPILE=arm-linux-gnueabihf-' >> ~/.bashrc
echo 'export ARCH=arm' >> ~/.bashrc
source ~/.bashrc
验证一下是否生效:
arm-linux-gnueabihf-gcc --version
如果能看到版本信息,说明环境搭好了。
2.4 本章知识体系
下面这张图,是我画的环境搭建整体流程。你可以对照着检查自己有没有漏掉哪一步。
2.5 避坑指南
我把自己踩过的坑列出来,你遇到了可以直接对照:
- 坑1: 下载的源码版本太老,和新版内核不匹配。我曾经用1.20版编译,结果头文件冲突,浪费了一天。建议用最新稳定版。
- 坑2: 工具链的浮点类型选错。如果你的CPU支持硬浮点,却用了软浮点的工具链,程序能编译通过,但跑起来会卡顿。用
readelf -A可以查看。 - 坑3: 环境变量只对当前终端生效。记得写到
~/.bashrc里,或者每次打开终端都执行一遍 export。
env.sh 脚本,里面写好所有环境变量。每次编译前执行 source env.sh,干净又卫生。
好了,环境搭建就到这里。你跟着做一遍,应该不会有什么大问题。如果遇到报错,先检查路径、再检查权限、最后检查版本。这三板斧能解决90%的问题。