一、Busybox简介

​ 【特点】

(1-1)开源项目

​ Busybox是一个开源项目,遵循GPL v2协议。Busybox将众多的UNIX命令集合进了一个很小的可执行程序中,可以用来替代GNU fileutils、shellutils等工具集。Busybox中各种命令与相应的GNU工具相比,所能提供的选项比较少,但是对于一般的应用场景也足够了。Busybox主要用于嵌入式系统的开发中。

(1-2)程序本体较小

​ Busybox在编写过程中对文件大小进行了优化,并考虑了系统资源有限(比如内存等)的情况。与一般的GNU工具集动辄几M的体积相比,动态链接的Busybox只有几百K,即使是采用静态链接也只有1.M左右。Busybox按模块设计,可以很容易地加入、去除某些命令,或增减命令的某些选项。

(1-3)使用简单

​ 在创建根文件系统的时候,如果使用Busybox来创建根文件系统,使用起来较为方便,只需要在/dev目录下创建必要的设备节点,在/etc目录下增加一些配置文件即可,当然如果Busybox是动态链接的,那么还需要在/lib目录下包含相关的运行库文件。


​ 【官方资源】

​ URL:https://busybox.net/

​ Web页面:

【注】本文所记录内容时 使用的busybox版本为:1.29.0

二、Busybox源码目录结构

上图是Busybox的目录中的目录和文件。

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

​ 在linux内核启动的最后阶段,会调用run_init_process()函数启动用户空间进程,对于Busybox来说,它同样将提供一个init程序,满足linux内核最后阶段的启动跳转。只要run_init_process()创建进程成功,那么此函数将不会返回了,从而从内核态进入了用户态进程。

​ busybox的init程序的描述源文件位于源代码下的init/init.c文件中。

​ 核心功能的由init_main函数实现,此函数中内容较多,将在文章《busybox的init_main函数》中分析

int init_main(int argc UNUSED_PARAM, char **argv)
{INIT_G();if (argv[1] && strcmp(argv[1], "-q") == 0) {return kill(1, SIGHUP);}#if DEBUG_SEGV_HANDLER{struct sigaction sa;memset(&sa, 0, sizeof(sa));sa.sa_sigaction = handle_sigsegv;sa.sa_flags = SA_SIGINFO;sigaction(SIGSEGV, &sa, NULL);sigaction(SIGILL, &sa, NULL);sigaction(SIGFPE, &sa, NULL);sigaction(SIGBUS, &sa, NULL);}
#endifif (!DEBUG_INIT) {sigprocmask_allsigs(SIG_BLOCK);/* ........................... */
四、编译busybox过程总结

在准备编译前,可以先参考INSTALL、README以及examples目录和docs目录下的文件。获取到相关的构建说明、安装说明和一些使用的示例。

总体来说,编译busybox与linux、以及u-boot的过程类似:

(1)使用

make menuconfig

​ 先在宿主机上编译出用于配置busybox的图像化界面

​ 这个过程中,可能会由于缺少一些库(例如ncurses)而报错,这时将其安装即可解决。

​ 对于嵌入式系统环境,是需要使用与嵌入式系统相关联的【交叉编译器】来进行编译,所以,这里需要指定用于编译busybox的交叉编译器。

​ 在busybox源码目录下的顶层makefile文件中添加:

CROSS_COMPILE ?= #交叉编译器的路径ARCH ?= arm  #对应的架构,这里以arm为例

​ (经测试,笔者的1.29版本busybox可以在图形项中配置交叉编译器的路径,较低版本的可能需要手动指定)

(2)指定busybox编译后的安装路径。

从上图我们可以看出,Busybox默认的安装路径是源代码目录的_install目录(该目录不存在,安装的时候自动创建)。

(3)可以更加实际情况设置busybox的动态/静态编译

​ 笔者本文使用的【静态编译】

(4)使用make 编译

(5)使用make install进行安装,完成后如下图:

使用静态编译构建出的busybox 软件本体有1.4M大小左右

总结一下busybox的编译构建过程:

1、使用make menuconfig构建出图形配置界面。
2、通过配置图形配置界面的选项配置busybox的安装路径、编译工具、命令功能使能等。生成.config配置文件
3、使用make编译busybox
4、使用make install命令安装由busybox生成的根文件系统
5、完善根文件系统
6、使用和测试根文件系统

【busybox】busybox使用总结 -01相关推荐

  1. 【Busybox】Busybox源码分析-01 | 源码目录结构和程序入口

    文章目录 一.Busybox简介 (1-1)开源项目 (1-2)程序本体较小 (1-3)使用简单 二.Busybox源码目录结构 三.Busybox程序主体 四.Busybox程序运行剖析

  2. linux怎么编译并安装busybox,busybox的编译使用及安装

    busybox是什么? http://www.busybox.net/,在这里你可以找到与busybox相关的所有资料. busybox编译和移植 (2)make menuconfig busybox ...

  3. docker创建busybox

    1. busybox是什么 BusyBox 是一个集成了三百多个最常用Linux命令和工具的软件.BusyBox 包含了一些简单的工具,例如ls.cat和echo等等,还包含了一些更大.更复杂的工具, ...

  4. 内核实验(二):自定义一个迷你Linux ARM系统,基于Kernel v5.15.102, Busybox,Qemu

    文章目录 一.篇头 二.内核部分 2.1 源码下载 2.1.1 官网 2.1.2 镜像站点 2.1.3 代码下载 2.2 编译 2.2.1 设置工具链 2.2.2 配置 2.2.3 make 2.2. ...

  5. linux内核安装busybox,学习busybox基本配置安装(转载)

    下面是对1.00版本的实验. 1.文件准备 解压busybox-1.00.tar.gz得到busybox-1.00目录,进入,阅读相关的README和INSTALL,没什么特别的,都是提示busybo ...

  6. 详解基于busybox、dropbear、ngnix制作完整的嵌入式Linux系统

    说明:         <一>:查看此博文,建议查看笔者上一篇博文(Linux启动过程),因为只有在完全了解Linux系统启动流程及一些配置文件的相关性,在阅读此博文才能有思路,理解起来更 ...

  7. 【精选】uboot/linux/qt/busybox/opengl/yaffs/lzop/glibc源码下载地址

    随着Linux.Android等开源平台和开源项目的推广和应用,它们所带来的开源思维也更加深入的普及到更多领域.现在,非常多的项目都推崇开源分享了(当然,商业盈利模式的应用仍然是要收费的,此处不讨论这 ...

  8. 为Android安装BusyBox

    大家是否有过这样的经历,在命令行里输入adb shell,然后使用命令操作你的手机或模拟器,但是那些命令都是常见Linux命令的缩水版,用起来很不爽.是否想过在Android上使用较完整的shell呢 ...

  9. 使用busybox制作iniramfs

    启动Linux kernel的其中一种方式是initramfs + kernel.其中iniramfs可使用busybox进行制作.本例子将在ubuntu 16.04 64bit中使用busybox ...

  10. Linux学习笔记---使用BusyBox创建根文件系统(一)

    目录 下载BusyBox 修改makefile 添加中文支持 编译busybox 下载BusyBox BusyBox 可以在其官网下载到,官网地址为:https://busybox.net 打开官网后 ...

最新文章

  1. 【光纤通信】关于RFA(喇曼光纤放大器)
  2. 互联网产品设计的“马化腾法则”
  3. 【阿里云课程】注意力机制原理,应用与设计
  4. opencv 设置视频帧的分辨率“无效”
  5. python中算法定义_python算法
  6. unity3d 求两个点长度_三年级上册求组合图形周长专项练习,附答案
  7. [BZOJ4756]Promotion Counting
  8. Android全局异常捕获
  9. 《UNIX网络编程 卷1》一、环境配置
  10. java写的国有资产管理系统
  11. 计算机网络原理(3)数据编码技术
  12. Python【一点号】短视频的自动上传与发布实例演示,同时支持抖音、快手、哔哩哔哩、小红书、微视、西瓜视频、微信视频号等平台的视频自动化同步发布
  13. 使用Python库valuequant和利润表历史数据计算股权价值
  14. 学计算机每天应该吃什么,上班族长时间看电脑,哪些食物对眼睛好?
  15. java:Cassandra入门与实战——上
  16. 第三届上海市青少年算法竞赛题解
  17. 单元测试的艺术--读书笔记
  18. 专访模组厂商:人脸识别中单摄像头和双摄像头该如何选型
  19. bitcomet端口阻塞,黄灯,解决方案
  20. 计算机主机加固方案介绍

热门文章

  1. vue自定义日历组件(12日历平铺) pc/移动
  2. PPT绘图并将其保存为高清图片插入Word或Latex
  3. 费用报销java_ERP费用报销操作与设计--开源软件诞生31
  4. 移动设计必备:iPhone 5S PSD 矢量原型免费下载
  5. LaTeX幻灯片通用简洁模板(Beamer)
  6. 小学生学Arduino-------初始物联世界
  7. 天线发射功率计算公式_(ERP)有效辐射功率与(EIRP)等效全向辐射功率在线计算器_三贝计算网_23bei.com...
  8. 容联云容信:高行业贴合度即时通讯平台,助力银行「安全、合规、高效」发展
  9. 计算机应用技术macbook,告别MacBook小容量,网友:中国技术让库克泪流满面,这操作香!...
  10. 零基础Python完全自学教程17:Python中的字典完全解读