当前位置: 首页 > backend >正文

编译 BusyBox for ARM 平台

编译 BusyBox for ARM 平台

BusyBox 是一个集成了许多 Linux 常用命令的轻量级工具集,适用于嵌入式系统。以下是详细的 ARM 交叉编译步骤:

  1. 准备交叉编译工具链

在 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

  1. 下载 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

  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
  1. 编译 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

  1. 安装到目录
    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

  1. 在 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

常见问题

  1. 编译失败:缺少头文件

安装 ARM 架构的头文件和库:
bash

sudo apt install libc6-dev-armhf-cross

  1. 动态链接问题

如果选择动态链接,需将 ARM 的 libc.so 等库复制到目标系统。
3. 其他架构(如 ARM64)

替换工具链为 aarch64-linux-gnu-gcc,并设置 ARCH=arm64。
总结
步骤 命令/操作

  1. 安装工具链 sudo apt install gcc-arm-linux-gnueabihf
  2. 下载源码 wget https://busybox.net/downloads/busybox-1.36.1.tar.bz2
  3. 配置 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
  4. 编译 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j$(nproc)
  5. 测试 qemu-arm ./busybox ash 或打包为 rootfs.cpio.gz

适用于:

嵌入式 Linux 开发自定义 initramfsARM 平台轻量级系统
http://www.xdnf.cn/news/17613.html

相关文章:

  • 力扣面试150题--爬楼梯 打家劫舍 零钱兑换 最长递增子序列
  • Elasticsearch JS 自定义 ConnectionPool / Connection / Serializer、敏感信息脱敏与 v8 平滑迁移
  • 01-Ansible 自动化介绍与使用
  • 83. 删除排序链表中的重复元素
  • Neo4j Cypher
  • Fiddler国内中文网使用经验分享,从抓包入门到API调试进阶
  • 【读代码】深度解析 Researcher:开源自动化科研助手
  • K8S 节点初始化一键脚本(禁用 SELinux + 关闭 swap + 开启 ipvs 亲测实用)
  • Golang 语言中 Context 的使用方式
  • 计算机视觉(6)-自动驾驶感知方案对比
  • AV、IPS、WAF对比
  • CMake笔记:PUBLIC/PRIVATE/INTERFACE的使用
  • 力扣经典算法篇-50-单词规律(双哈希结构+正反向求解)
  • 微软发布GPT-5赋能的Copilot:重构办公场景的智能革命
  • 【昇腾】关于Atlas 200I A2加速模块macro0配置3路PCIE+1路SATA在hboot2中的一个bug_20250812
  • TensorBoard的使用 小土堆pytorch记录
  • 猫头虎AI分享|腾讯新开源了一个轻量级、即插即用的身份保留视频生成框架:Stand-In,也支持换头像视频
  • PostgreSQL 范围、空间唯一性约束
  • Linux 常用命令大全:覆盖日常 99% 操作需求
  • UserController类讲解
  • 2025年Java后端秋招面试宝典:高频题库+场景解析
  • 国产3D大型装配设计新突破②:装配约束智能推断 | 中望3D 2026
  • 【Redis与缓存预热:如何通过预加载减少数据库压力】
  • Ansible 基本使用
  • 02-Ansible 基本使用
  • Day 38: Dataset类和DataLoader类
  • 计算机网络摘星题库800题笔记 第5章 传输层
  • 达梦数据闪回查询-快速恢复表
  • 燕山大学计算机网络实验(2025最新)
  • SpringMVC的原理及执行流程?