LV100-busybox简介
一、busybox 简介
1. busybox 是什么

官网的简介是这样写的:BusyBox - about
BusyBox: The Swiss Army Knife of Embedded Linux
BusyBox combines tiny versions of many common UNIX utilities into a single small executable. It provides replacements for most of the utilities you usually find in GNU fileutils, shellutils, etc. The utilities in BusyBox generally have fewer options than their full-featured GNU cousins; however, the options that are included provide the expected functionality and behave very much like their GNU counterparts. BusyBox provides a fairly complete environment for any small or embedded system.
BusyBox has been written with size-optimization and limited resources in mind. It is also extremely modular so you can easily include or exclude commands (or features) at compile time. This makes it easy to customize your embedded systems. To create a working system, just add some device nodes in /dev, a few configuration files in /etc, and a Linux kernel.
BusyBox is maintained by Denys Vlasenko, and licensed under the GNU GENERAL PUBLIC LICENSE version 2
简单来说 busybox 是一个开源的、轻量级的软件工具集合,旨在提供一个精简的 Unix 工具集,适用于嵌入式系统和资源受限的环境。它将许多常用的 Unix 工具(如 ls、cp、cat、mv、grep、find、telnet 等)合并为一个可执行文件,从而减少了系统的存储空间和资源占用。
2. 发展历史
GNU Coreutils + Bash 的组合一直是各大 Linux 发行版中的“黄金搭档”,如今几乎所有的 Linux 发行版默认都会使用它们作为默认的 Shell 和基础工具包,Coreutils 包含了一系列每个 Linux 用户都再熟悉不过的命令:ls、cat、grep...几乎所有我们熟悉的“开箱即用”的 Linux 工具都是 Coreutils 的一部分。
不过在桌面发行版中广受欢迎的它却在嵌入式开发中遇到了一个问题,一个永恒的、经典的问题:成本,或者换句话来说,体积。Coreutils 丰富功能的代价之一就是体积的膨胀,这使得它不适用于嵌入式环境这种对体积要求极为严苛的环境,于是 BusyBox 应运而生。
BusyBox 做的最关键的一件事就是:压缩体积,它在诞生之初便是为了塞进一张软盘而设计的(当时流行的 3.5 寸软盘容量约为 1.44 MB),这样它既可以作为当时流行的 Debian 系统的急救盘、也可以成为它的安装盘,BusyBox 把原来数十个乃至数百个程序实现的功能塞进了一个可执行文件中,这种高度的集成带来的是体积的极致压缩,因为这样做它便不会受到多个 ELF 文件中冗余文件头的影响,同时多个功能也可以调用同一个库中的代码,进一步压缩了体积。1996 年,初版 BusyBox 诞生了,之后便被广泛应用在各种嵌入式项目和精简发行版中,成为了嵌入式操作系统的事实标准之一,不只是 Linux,FreeBSD 等项目中也不乏 BusyBox 的身影。
2. 特点
精简:Busybox 的设计理念是将多个工具合并为一个可执行文件,从而减少了系统的存储空间和资源占用。
可定制性:Busybox 提供了许多编译选项,可以根据需求选择需要的工具,并排除不需要的工具,从而进一步减小可执行文件的大小。
兼容性:Busybox 的工具与传统的 Unix 工具具有相似的命令行接口和功能,因此可以方便地替代传统的 Unix 工具。
二、参考资料
busybox 的官网在这里:BusyBox。我们可以在这里找到官方的帮助文档以及源码的下载链接。
三、源码获取
1. 源码下载
我们可以在这里下载:Index of /downloads。我下载的是 busybox-1.22.1.tar.bz2 这个压缩包并将其存放于 ubuntu 下的共享文件夹下:

下载的时候可能会非常慢,要是特别慢的话,有条件的可以科学处理一下,哈哈。也可以通过这个命令下载:
wget https://www.busybox.net/downloads/busybox-1.36.1.tar.bz2
或者也可以来这里拉取:busybox - BusyBox: The Swiss Army Knife of Embedded Linux
2. 拷贝解压
然后我们可以将这个源码文件拷贝解压到 ubuntu 中,方便后边编译,我们可以在终端执行以下命令:
cd ~/7Linux
tar -xf busybox-1.36.1.tar.bz2 # 解压然后我们可以得到下边这些文件(通过 ls 命令查看):

3. 目录说明
一些目录的说明如下:
| 目录名称 | 功能说明 |
| applets | 实现 applets 框架的文件。目录中包含了几个 main()的文件 |
| applets_sh | 此目录包含了几个作为 shell 脚本实现的 applet 示例。在“make install”时不会被自动安装,需要使用时,手动处理 |
| arch | 包含用于不同体系架构的 makefile 文件。约束 busybox 在不同架构体系下的编译构建过程 |
| archival | 与压缩相关命令的实现源文件。 |
| configs | busybox 自带的默认配置文件 |
| console-tools | 与控制台相关的一些命令 |
| coreutils | 常用的一些核心命令。例如 chgrp、rm 等 |
| debianutils | 针对 Debian 的套件。 |
| e2fsprogs | 针对 Linux Ext2 FS prog 的命令。例如 chattr、lsattr |
| editors | 常用的编辑命令。例如 diff、vi 等 |
| findutils | 用于查找的命令 |
| include | busybox 项目的头文件 |
| init | init 进程的实现源码目录 |
| klibc-utils | klibc 命令套件 |
| libbb | 与 busybox 实现相关的库文件 |
| libpwdgrp | libpwdgrp 相关的命令 |
| loginutils | 与用户管理相关的命令 |
| mailutils | 与 mail 相关的命令套件 |
| miscutils | 该文件下是一些杂项命令,针对特定应用场景 |
| modutils | 与模块相关的命令 |
| networking | 与网络相关的命令,例如 arp |
| printutils | Print 相关的命令 |
| procps | 与内存、进程相关的命令 |
| runit | 与 Runit 实现相关的命令 |
| shell | 与 shell 相关的命令 |
| sysklogd | 系统日志记录工具相关的命令 |
| util-linux | Linux 下常用的命令,主要与文件系统操作相关的命令。 |
参考资料