什么是 BusyBox 以及它在哪里使用?
BusyBox是打包为单个二进制文件的核心 Unix 实用程序的集合。这使其成为资源受限环境(例如嵌入式设备)的理想选择。完整的发行版包含近 400 个最常用的命令。
BusyBox 是开源的,并在 GPL 下获得许可。它创建于 1995 年,旨在使可引导系统适合单个软盘。将命令捆绑到一个二进制文件中可以减少开销并允许看似独立的应用程序之间的代码共享。
BusyBox 包括什么?
BusyBox 提供了日常便利的命令,这些命令常常让人觉得它们是您的 shell 的一部分。尽管 userland 工具喜欢ls并且cat无处不在,但它们实际上驻留在独立于您的 shell 的单独实用程序包中。许多 Linux 发行版通过 GNU 提供这些命令,coreutils 但其他发行版则使用BusyBox。
该项目的工作原理是将熟悉的命令名称符号链接/usr/bin到 BusyBox 二进制文件中。该可执行文件然后调用与作为其第一个参数传递的名称相对应的函数。
使用 BusyBox命令mkdir运行
/usr/bin/busybox mkdir
使用 GNU Coreutils – 命令mkdir运行
/usr/bin/mkdir
您可以透明地使用类似的命令mkdir,passwd,ps,tar,并且wget一旦安装了BusyBox。命令被实现为“小程序”,它们被组合成一个功能强大的 BusyBox 发行版。全套重量约为 1MB。小程序是可移动的,因此二进制大小可以进一步缩小。您可以通过busybox不带参数运行来检查安装中的可用内容。
由于 BusyBox 是为微型可启动系统而创建的,它涵盖了用户空间中启动和管理 POSIX 系统所需的一切。这扩展到init能够作为进程 ID 运行1并支持系统服务的最小实现。您可以采用 BusyBox 作为常规init或systemd守护程序的轻量级替代品。
由于 BusyBox 有意最小化,并非每个命令都实现了其 GNU 对应项的所有功能。在不常见的情况下,您可能会发现一些缺失的标志或行为差异。这是 BusyBox 流线型特性的权衡之一。
BusyBox 在哪里使用?
BusyBox 可以在任何需要关注磁盘使用的地方找到。它被诸如 Alpine 之类的最小操作系统以及嵌入式设备和移动外壳之类的专门场景所使用。
不运行传统操作系统发行版的 Unix 衍生设备很有可能会使用 BusyBox。您可以在网络路由器、智能电视、现代汽车和物联网设备上找到它。这些设置中的每一个都需要在资源严重受限的环境中运行核心用户空间工具。
发送单个多合一二进制文件更有效。它允许所有命令共享公共代码,而无需在磁盘上存储独立库,从而减少了冗余。由于 BusyBox 提供了与其他实现的良好兼容性,并且在 GPL 下获得许可,因此它通常是需要一组轻量级实用程序的环境的首选。
嵌入式设备的供应商也受益于 BusyBox 的模块化特性。物联网产品可能只需要少数关键实用程序来提供其功能。分发修改过的 BusyBox 二进制文件可以释放更多 KB 的磁盘空间,这可以显着节省。
如何试用 BusyBox
您可以在不替换当前实用程序的情况下安装 BusyBox。使用您的包管理器添加busybox,然后将您选择的命令附加到busybox二进制文件以运行小程序:
busybox mkdir test
这确保将使用命令的 BusyBox 版本而不是 shell 的默认路径中的版本。
另一种尝试 BusyBox 的方法是通过其官方 Docker 镜像:
docker run -it --rm busybox
如果你已经安装了 Docker,这会让你进入 BusyBox 的 shell 实现。您可以通过在图像名称后添加它来运行特定命令:
docker run -it --rm busybox mkdir demo
usyBox 还具有JavaScript 模拟器,可让您在 Web 浏览器中试用这些实用程序。
在大多数 Linux 发行版上,您不能完全coreutils用 BusyBox替换。特定于发行版的命令和包通常是硬连接的,期望coreutils实用程序可用。您的发行版通常会拒绝卸载此软件包,因为如果init删除它可能会使系统无法运行。
如果您想依赖 BusyBox,最好从使用它的发行版开始,然后将其他软件放在上面。coreutils当您需要检查小程序在特定场景中的响应方式时,如上所示添加 BusyBox效果很好。
结论
usyBox 是打包为单个二进制文件的用户级 UNIX 实用程序的轻量级实现。您可以将它与 Linux 内核结合起来,以创建一个没有其他依赖项的正常运行的系统。
BusyBox 针对空间受限的环境进行了优化。这使其成为物联网设备等嵌入式产品的理想选择。您可能还会发现 BusyBox 安装在最小但通用的 Linux 发行版上,例如 Alpine Linux。
无论您使用的是 BusyBox 还是 GNU Coreutils,您熟悉的命令通常都“适用”于任一实现。任何出现的问题通常都是由于 BusyBox 没有实现某个罕见的标志或配置选项。
https://www.linuxprobe.com/what-busybox-usage.html
基于busybox构建linux文件系统
下载busybox
busybox从诞生至今已有近20年的历史,目前已经成为嵌入式行业主流的文件系统。官网是https://busybox.net/,点击GetBusyBox下面的Download Source进入到源码下载界面。
busybox的配置及编译
下载源码之后将源码拷贝到编译环境中,在编译前需要对busybox进行配置,主要涉及三方面的内容:
1)编译工具链设置
2)编译模式设置
3)文件系统支持的功能
前两项为必须完成的,而第三点根据用户自己的需求自行制定。执行 makemenuconfig进入到配置界面。
编译工具链设置
设定的交叉编译工具链最好和kernel编译时使用的工具链一样,例如将交叉编译工具链设置为arm-linux-gnueabi-,则进入到build options中进行设置。
当然,也可以进入到根目录下的Makefile文件中修改对应的交叉编译工具链以及平台信息等。
编译模式设置
设置编译出的镜像文件是静态还是动态的,若是动态编译,需要手动将交叉编译工具链下的lib库拷贝到最终的_install文件夹下面,反之则不需要。
静态编译的配置如下,可以看到括号内的提示是不包含共享库。该项不使能则编译方式为动态的。
文件系统支持的功能剪裁
busybox可以支持上百种命令行及其他功能,根据自己的需求可进行增减,例如增加devmem命令行,则勾选上对应的使能框。
执行make、makeinstall后,在编译路径下会生成_install文件夹,里面包含bin、sbin、usr等文件。查看刚添加的devmem命令,发现已编译出。
此时将busybox下编译出来的_install拷贝出来作为文件系统的基本框架,然后再增添文件系统其他必须的组件即可。
构建文件系统
配置lib目录
将_install下的所有文件拷出并创建lib、etc文件夹,然后将交叉编译工具链arm-linux-gnueabi下的lib库拷贝到创建的lib文件夹下。
然后再依次创建home、opt、run、sys、var、boot、dev 、media、proc、tmp、usr。
配置etc目录
创建fstab文件
创建inittab文件
创建rcS文件
在创建rcS文件前需要在etc目录下手动创建init.d文件夹,并在init.d文件夹下创建rcS。
至此,执行tar -jcvf rootfs.tar.bz2 *,已经构建了一个可以基本运行的根文件系统了。
文件系统验证
使用mfgtools将压缩好的rootfs.tar.bz2下载到mmc中,再次启动系统,可以看到制作的根文件系统已经可以正常工作,我们之前添加的devmem命令也可以正常执行。
相关问答
PMB的字母缩写含义_作业帮[回答]公司或者是其它的缩写PMBPatMcGeeBandPMBPeitermartizburg(SouthAfrica)PMBPepperMarketingBoardMalaysia...
20款平板怎么进入recovery?第一步,确定刷入recovery第二步,在电脑上创建个[启动RebootRecovery.txt]文本,把下面三行代码复制到文本里,保存@echooffadbshell"echo...
调度表的使用方法?手动调度表使用方法内置了两种调度,LKT需要安装magisk模块(由于该未取得该调度作者同意,app不能执行自动安装,需要用户手动地前往rec或者magiskmanager安装...
苹果手机屏幕上出现itu∩es是为什么?-ZOL问答建议长按住电源键加home键强制重启一下,如果问题没有解决,连接电脑下载itunes来进行恢复。望采纳,谢谢。有用(0)回复woaitingting11方法一:usb连接线,手机...
busybox 怎么安装?准备:0.先要把手机给Root了,具体教程这里就不提供了,网上有很多。1.下载BusyBox的binary,打开这个地址http://www.busybox.net/downloads/bi...
tall和taller的区别,两个怎样用_作业帮[回答]副词和形容词都有比较级、最高级,分别在该词之后加er、est,但需要注意以下几点:1e结尾,则只需要加r、st,如large的比较级和最高级分别是larger,lar...
902端口是干嘛的?902端口是busybox进程的一个功能端口(目前还不清楚是什么功能),因为exsi的操作系统功能简单,无法安装软件或编译源码包,目前只找到关闭busybox守护进程这一...
在公共场合,孩子大声吵闹该怎么办?去年的一个事情。孩子和同班的2个小朋友一起出去玩,我们3个妈妈带着。中午吃饭的时候,我们在饭店里找了一个角落的位置。然后,小孩子胃口小,首先吃好了,开始...
如何让台式机的有线网络给手机用?usb连接线,手机有线上网1、将手机通过usb线连接到电脑,勾选“设置->无线和网络->绑定与便携热点->USB绑定”选项,电脑上会出现虚拟网卡,为便于分辨,给...
【HELP什么单词想问下这个HELP翻译成中文应是什么?】作业帮[回答]help[help]n.帮助,援助v.帮助例句:Helpyourself.请随便吃.,请自便He'sbeenhelpinghimselftomystationery.他未经许...