【busybox】busybox使用总结 -01
一、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相关推荐
- 【Busybox】Busybox源码分析-01 | 源码目录结构和程序入口
文章目录 一.Busybox简介 (1-1)开源项目 (1-2)程序本体较小 (1-3)使用简单 二.Busybox源码目录结构 三.Busybox程序主体 四.Busybox程序运行剖析
- linux怎么编译并安装busybox,busybox的编译使用及安装
busybox是什么? http://www.busybox.net/,在这里你可以找到与busybox相关的所有资料. busybox编译和移植 (2)make menuconfig busybox ...
- docker创建busybox
1. busybox是什么 BusyBox 是一个集成了三百多个最常用Linux命令和工具的软件.BusyBox 包含了一些简单的工具,例如ls.cat和echo等等,还包含了一些更大.更复杂的工具, ...
- 内核实验(二):自定义一个迷你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. ...
- linux内核安装busybox,学习busybox基本配置安装(转载)
下面是对1.00版本的实验. 1.文件准备 解压busybox-1.00.tar.gz得到busybox-1.00目录,进入,阅读相关的README和INSTALL,没什么特别的,都是提示busybo ...
- 详解基于busybox、dropbear、ngnix制作完整的嵌入式Linux系统
说明: <一>:查看此博文,建议查看笔者上一篇博文(Linux启动过程),因为只有在完全了解Linux系统启动流程及一些配置文件的相关性,在阅读此博文才能有思路,理解起来更 ...
- 【精选】uboot/linux/qt/busybox/opengl/yaffs/lzop/glibc源码下载地址
随着Linux.Android等开源平台和开源项目的推广和应用,它们所带来的开源思维也更加深入的普及到更多领域.现在,非常多的项目都推崇开源分享了(当然,商业盈利模式的应用仍然是要收费的,此处不讨论这 ...
- 为Android安装BusyBox
大家是否有过这样的经历,在命令行里输入adb shell,然后使用命令操作你的手机或模拟器,但是那些命令都是常见Linux命令的缩水版,用起来很不爽.是否想过在Android上使用较完整的shell呢 ...
- 使用busybox制作iniramfs
启动Linux kernel的其中一种方式是initramfs + kernel.其中iniramfs可使用busybox进行制作.本例子将在ubuntu 16.04 64bit中使用busybox ...
- Linux学习笔记---使用BusyBox创建根文件系统(一)
目录 下载BusyBox 修改makefile 添加中文支持 编译busybox 下载BusyBox BusyBox 可以在其官网下载到,官网地址为:https://busybox.net 打开官网后 ...
最新文章
- 【光纤通信】关于RFA(喇曼光纤放大器)
- 互联网产品设计的“马化腾法则”
- 【阿里云课程】注意力机制原理,应用与设计
- opencv 设置视频帧的分辨率“无效”
- python中算法定义_python算法
- unity3d 求两个点长度_三年级上册求组合图形周长专项练习,附答案
- [BZOJ4756]Promotion Counting
- Android全局异常捕获
- 《UNIX网络编程 卷1》一、环境配置
- java写的国有资产管理系统
- 计算机网络原理(3)数据编码技术
- Python【一点号】短视频的自动上传与发布实例演示,同时支持抖音、快手、哔哩哔哩、小红书、微视、西瓜视频、微信视频号等平台的视频自动化同步发布
- 使用Python库valuequant和利润表历史数据计算股权价值
- 学计算机每天应该吃什么,上班族长时间看电脑,哪些食物对眼睛好?
- java:Cassandra入门与实战——上
- 第三届上海市青少年算法竞赛题解
- 单元测试的艺术--读书笔记
- 专访模组厂商:人脸识别中单摄像头和双摄像头该如何选型
- bitcomet端口阻塞,黄灯,解决方案
- 计算机主机加固方案介绍
热门文章
- vue自定义日历组件(12日历平铺) pc/移动
- PPT绘图并将其保存为高清图片插入Word或Latex
- 费用报销java_ERP费用报销操作与设计--开源软件诞生31
- 移动设计必备:iPhone 5S PSD 矢量原型免费下载
- LaTeX幻灯片通用简洁模板(Beamer)
- 小学生学Arduino-------初始物联世界
- 天线发射功率计算公式_(ERP)有效辐射功率与(EIRP)等效全向辐射功率在线计算器_三贝计算网_23bei.com...
- 容联云容信:高行业贴合度即时通讯平台,助力银行「安全、合规、高效」发展
- 计算机应用技术macbook,告别MacBook小容量,网友:中国技术让库克泪流满面,这操作香!...
- 零基础Python完全自学教程17:Python中的字典完全解读