编译 BusyBox for ARM 平台
编译 BusyBox for ARM 平台
BusyBox 是一个集成了许多 Linux 常用命令的轻量级工具集,适用于嵌入式系统。以下是详细的 ARM 交叉编译步骤:
- 准备交叉编译工具链
在 x86_64 Linux 主机上安装 ARM 交叉编译器(以 gcc-arm-linux-gnueabihf 为例):
Ubuntu/Debian
bash
sudo apt update
sudo apt install gcc-arm-linux-gnueabihf binutils-arm-linux-gnueabihf
Arch Linux
bash
sudo pacman -S arm-linux-gnueabihf-gcc
验证编译器
bash
arm-linux-gnueabihf-gcc --version
应输出类似:
text
arm-linux-gnueabihf-gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
- 下载 BusyBox 源码
bash
wget https://busybox.net/downloads/busybox-1.36.1.tar.bz2
tar -xf busybox-1.36.1.tar.bz2
cd busybox-1.36.1
- 配置 BusyBox
(1) 进入菜单配置
bash
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
这会打开一个基于 ncurses 的配置界面。
(2) 关键配置选项
Target Platform
text
Settings —>
[*] Build static binary (no shared libs) # 静态编译(可选)
(arm) Target Architecture
(arm) Target Architecture Variant (e.g., cortex-A8)
Toolchain
确保编译器路径正确:
text
Settings —>
(/usr/bin/arm-linux-gnueabihf-) Cross Compiler prefix
精简配置(可选)
如果只需要基本命令,可以加载默认的最小配置:
bash
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- defconfig
- 编译 BusyBox
bash
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j$(nproc)
编译完成后,生成的二进制文件位于:
bash
file busybox
输出应显示为 ARM 可执行文件:
text
busybox: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, stripped
- 安装到目录
bash
mkdir -p install
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- install
生成的文件会保存在 _install/bin/busybox,其他命令是符号链接。
6. 制作根文件系统(可选)
(1) 创建基本目录结构
bash
cd _install
mkdir -p proc sys dev etc/init.d
(2) 添加初始化脚本
bash
cat > etc/init.d/rcS <<EOF
#!/bin/sh
mount -t proc none /proc
mount -t sysfs none /sys
/sbin/mdev -s
EOF
chmod +x etc/init.d/rcS
(3) 打包为 initramfs
bash
find . | cpio -o -H newc | gzip > …/rootfs.cpio.gz
- 在 QEMU 中测试
(1) 启动 QEMU(ARM virt 机器)
bash
qemu-system-arm
-M virt
-kernel /path/to/zImage \ # 替换为你的 ARM 内核
-initrd rootfs.cpio.gz
-append “root=/dev/ram rdinit=/sbin/init”
-nographic
(2) 直接测试 BusyBox
如果没有内核,可以用 qemu-arm 直接运行:
bash
qemu-arm ./busybox ash
常见问题
- 编译失败:缺少头文件
安装 ARM 架构的头文件和库:
bash
sudo apt install libc6-dev-armhf-cross
- 动态链接问题
如果选择动态链接,需将 ARM 的 libc.so 等库复制到目标系统。
3. 其他架构(如 ARM64)
替换工具链为 aarch64-linux-gnu-gcc,并设置 ARCH=arm64。
总结
步骤 命令/操作
- 安装工具链 sudo apt install gcc-arm-linux-gnueabihf
- 下载源码 wget https://busybox.net/downloads/busybox-1.36.1.tar.bz2
- 配置 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
- 编译 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j$(nproc)
- 测试 qemu-arm ./busybox ash 或打包为 rootfs.cpio.gz
适用于:
嵌入式 Linux 开发自定义 initramfsARM 平台轻量级系统