第二章 环境搭建:下载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版,结果编译时一堆告警,折腾了半天。

小提示: 下载后先看看 README 和 INSTALL 文件。里面有很多有用的信息,比如依赖哪些库、怎么配置。

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 本章知识体系

下面这张图,是我画的环境搭建整体流程。你可以对照着检查自己有没有漏掉哪一步。

环境搭建核心流程 下载Busybox源码 安装交叉编译工具链 配置环境变量 验证:arm-linux-gnueabihf-gcc --version 常见问题 • 路径有空格导致找不到编译器 • 忘记 source ~/.bashrc 导致环境变量不生效

2.5 避坑指南

我把自己踩过的坑列出来,你遇到了可以直接对照:

  • 坑1: 下载的源码版本太老,和新版内核不匹配。我曾经用1.20版编译,结果头文件冲突,浪费了一天。建议用最新稳定版。
  • 坑2: 工具链的浮点类型选错。如果你的CPU支持硬浮点,却用了软浮点的工具链,程序能编译通过,但跑起来会卡顿。用 readelf -A 可以查看。
  • 坑3: 环境变量只对当前终端生效。记得写到 ~/.bashrc 里,或者每次打开终端都执行一遍 export。
我的习惯: 我会在项目根目录下放一个 env.sh 脚本,里面写好所有环境变量。每次编译前执行 source env.sh,干净又卫生。

好了,环境搭建就到这里。你跟着做一遍,应该不会有什么大问题。如果遇到报错,先检查路径、再检查权限、最后检查版本。这三板斧能解决90%的问题。

可可精品资料库