必须从源码交叉编译busybox并安装到目标路径:先装build-essential、gcc-arm-linux-gnueabihf和libncurses5-dev;再下载1.36.1源码,make defconfig后make menuconfig勾选静态编译、设arm架构及交叉编译前缀;最后export cross_compile=arm-linux-gnueabihf- && make -j$(nproc),用make config_prefix=/work/rootfs install完成部署。

要在嵌入式设备或自定义根文件系统中部署一个精简、静态、可直接运行的Linux工具集,必须从源码交叉编译BusyBox并正确安装到目标路径,跳过apt包管理器提供的通用二进制包。
准备交叉编译环境
在Ubuntu 22.04主机上执行以下命令安装必需组件:
sudo apt update && sudo apt install -y build-essential gcc-arm-linux-gnueabihf libncurses5-dev
这一步缺一不可——【没有libncurses5-dev就无法运行make menuconfig】,后续配置将卡死在文本界面初始化阶段。若使用ARM64目标平台,需改用gcc-aarch64-linux-gnu包。
获取并解压BusyBox源码
下载稳定版1.36.1源码(官方推荐用于生产环境):
wget https://busybox.net/downloads/busybox-1.36.1.tar.bz2 && tar xjf busybox-1.36.1.tar.bz2 && cd busybox-1.36.1
不建议用git克隆最新开发分支,其defconfig在ARM平台存在已知符号冲突,会导致编译失败。
配置目标平台与关键选项
第一步:加载默认ARM适配配置
make defconfig
第二步:启动图形化配置菜单进行微调
make menuconfig
在菜单中重点修改三项:
→ BusyBox Settings → Build Options → 【Build static binary (no shared libs)】 必须勾选,否则生成的busybox在无glibc目标设备上直接报“not found”错误;
→ Target Platform Settings → Target architecture → 选择 ARM (little endian);
→ Cross Compiler prefix → 输入 arm-linux-gnueabihf-(注意末尾短横线不能遗漏)。
保存退出后,当前目录下会生成.config文件,它是整个编译过程的唯一配置依据。
执行交叉编译
方法一:通过环境变量指定工具链(推荐)
export CROSS_COMPILE=arm-linux-gnueabihf-
export ARCH=arm
make -j$(nproc)
方法二:命令行内联指定(临时生效)
make CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm -j$(nproc)
编译成功后,当前目录下将生成一个名为busybox的可执行文件,大小通常在1.2–1.8 MB之间。若输出中出现“undefined reference to `__stack_chk_fail`”,说明未启用静态链接,需回退检查menuconfig配置。
验证二进制架构与功能
运行file busybox确认输出包含“ARM, EABI5 version 1 (SYSV), statically linked”字样;
执行./busybox --help | head -5,观察是否列出ash、ls、cp等applet名称;
用qemu-arm-static快速测试基础功能(需先安装qemu-user-static):
qemu-arm-static ./busybox ls -l
安装到目标根文件系统目录
第一步:创建干净的目标安装路径
mkdir -p /work/rootfs
第二步:执行安装命令,将所有符号链接和busybox本体写入该路径
make CONFIG_PREFIX=/work/rootfs install
第三步:检查结果
ls -l /work/rootfs/bin/ | head -10
你会看到ls、cp、sh等均为指向busybox的符号链接。此时不要手动复制busybox到其他位置——【CONFIG_PREFIX路径必须与目标设备实际挂载路径一致,否则符号链接将失效】。











