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

编译 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.dtcms.com/a/327671.html

相关文章:

  • 数据结构:图
  • 1、正则表达式入门
  • (LeetCode 每日一题) 2787. 将一个数字表示成幂的和的方案数(动态规划dp+01背包)
  • Python 常用的正则表达式
  • CodeRush AI 助手进驻 Visual Studio:AiGen/AiFind 亮相(五)
  • RL推理的尽头,是熵坍缩?统一SFT与强化学习的新视角
  • 零基础学Java第七讲---调试(IDEA)
  • 面试经典150题[001]:合并两个有序数组(LeetCode 88)
  • 【代码随想录day 17】 力扣 98.验证二叉搜索树
  • iis无法访问文件
  • NTP常见日志分析
  • 每日五个pyecharts可视化图表-line:从入门到精通 (4)
  • 多轮问答与指代消解
  • 测试匠谈 | AI语音合成之大模型性能优化实践
  • @JsonAnyGetter 动态表格渲染的“神”
  • 「机器学习」:金融风控贷款违约预测,天池比赛解决详细思路
  • Redis面试精讲 Day 19:Redis缓存设计模式与策略
  • 剑指offer第2版——面试题3:数组中重复的数字
  • RabbitMQ-知识技能图谱(总结篇)
  • 【时时三省】(C语言基础)建立动态链表
  • LeetCode189~191、198~214题解
  • 探秘酵母单杂交技术:解锁基因调控的密码
  • WEB虚拟主机3种部署方式全解析
  • 【Java Web 快速入门】九、事务管理
  • 【数据分享】2018-2024年中国10米分辨率春小麦和冬小麦分布栅格数据
  • Unity:GUI笔记(一)——文本、按钮、多选框和单选框、输入框和拖动条、图片绘制和框绘制
  • vue3大事件
  • 4.运算符
  • TF-IDF——红楼梦案例
  • IIS Express中可以同时加载并使用.net4.0和.NET 2.0的 DLL