根文件系统的构建与分析(四)之瑞士军刀busybox生成系统基本命令
根文件系统的构建与分析(四)
转载请注明 http://blog.csdn.net/jianchi88 Author:Lotte 邮箱:baihaowen08@126.com
ls /bin,ls /sbin,这些目录下存储的主要是常用命令的二进制文件,如ls、cp、rm等。如果要自己编写这几百个常用命令的源程序,好在我们有嵌入式Linux系统的瑞士军刀——busybox,事情就简单很多,他集合了许多系统基本命令,这些命令都是链接到busybox这个程序。

一、BusyBox介绍
• Busybox是一个开源的软件项目,其官方网站是:http://www.busybox.net
• Busybox集成了一百多个最常用的Linux命令程序和工具;
• Busybox 程序的体积非常之小,很适合嵌入式系统;
• Busybox 提供的程序包括:
–具有shell功能,如csh
–提供一个迷你的vi编辑器
–提供系统不可或缺的/sbin/init程序
–其他的系统基本命令,如:ls,mkdir,ifconfig等。
二、编译/安装busybox,生成/bin、/sbin、/usr/bin、/usr/sbin目录及其命令
1、下载源码
从官网(http://www.busybox.net/downloads/)上下载最新的版本:busybox-1.20.1.tar.bz2 28-May-2012
00:51 2.1M
2、解压源码。
plain?
- [root@localhost opt]# tar xvjf busybox-1.20.1.tar.bz2
3、进入源码修改Makefile
plain?
- 164 CROSS_COMPILE ?=
改成
plain?
- 164 CROSS_COMPILE ?= arm-linux-
plain?
- 190 ARCH ?= $(SUBARCH)
改成
plain?
- 190 ARCH ?= arm
4、make menuconfig配置busybox

1)Busybox Settings ==》 Build Options ==》 Build BusyBox as a static binary (no shared libs),表示编译busybox时,是否静态链接C库。我们选择动态链接C库(默认动态)。
2)Busybox Settings ==》 Installation Options ==》 What kind of applet links to install (as soft-links) ,表示安装busybox时,将各个命令安装为指向busybox的软链接还是硬链接。我们选择软链接(默认软链接)。
3)Busybox Settings ==》 Installation Options ==》 (/opt/build_rootfs) BusyBox installation prefix,表示busybox的安装位置。我们选择/opt/build_rootfs
4)Busybox Settings ==》 Busybox Library Tuning。保留Command line editing以支持命令行编辑;保留History size以支持记忆历史命令;选中Tab completion和Username completion以支持命令自动补全
选项Applets,他将busybox的支持的几百个命令分门别类。我们只要在各个门类下选择想要的命令即可。这里我们基本保持默认设置。
5)选中Networking Utilities — httpd下的Enable -u <user> option,以启用http服务器的功能allows the server to run as a specific user(默认选上)
更多的选项大家可以摸索一下,常用的它都默认了。
推出Exit后保存配置文件
、
5、编译busybox
make
可能因为我的交叉编译工具链是4.1.2,所以提示错误,mtd\mtd-user.h 没有那个文件或目录
解决:
plain?
- [root@localhost busybox-1.20.1]# cp /usr/include/mtd/ ./include/mtd/ -a
接着make,又出现缺少mtd\ubi-user.h ,我从u-boot源码里拷贝一个过来。
plain?
- [root@localhost busybox-1.20.1]# cp /opt/u-boot-2009.11/include/mtd/ubi-user.h ./include/mtd
6、安装busybox
make install
因为上一篇《根文件系统的构建与分析(三)之根文件目录及最简/dev目录》已经在/opt/build_rootfs建了根文件目录和拷贝了动态库在/lib和建了设备节点在/dev,为了更清晰看到busybox安装到根文件系统的有什么东西,我先搞一个空目录让它安装,看看会多了什么出来!我做的是把原来的/opt/build_rootfs目录备份,再清空之前的/opt/build_rootfs。
安装完成后,可以看到在/opt/build_rootfs目录下生成了bin、sbin、usr/bin、usr/sbin目录,其下包含了我们常用的命令,这些命令都是指向bin/busybox的软链接,而busybox本身的大小也只有900K:
plain?
- [root@localhost build_rootfs]# ls -l
- 总计 28
- drwxr-xr-x 2 root root 4096 06-26 02:10 bin
- lrwxrwxrwx 1 root root 11 06-26 02:10 linuxrc -> bin/busybox
- drwxr-xr-x 2 root root 4096 06-26 02:10 sbin
- drwxr-xr-x 4 root root 4096 06-26 02:10 u)
还记得之前讲过bootloader传到内核的参数init=\linuxrc吗,linuxrc就是内核启动的第一个进程,它链接到busybox。如果没有它也行,因为/sbin/init可以代替。
plain?
- [root@localhost build_rootfs]# ls -l /sbin/init
- -rwxr-xr-x 1 root root 38652 2008-09-18 /sbin/init
plain?
- [root@localhost build_rootfs]# ls -sh bin -l
- 总计 1.3M
- 4.0K lrwxrwxrwx 1 root root 7 06-26 02:10 addgroup -> busybox
- 4.0K lrwxrwxrwx 1 root root 7 06-26 02:10 adduser -> busybox
- 4.0K lrwxrwxrwx 1 root root 7 06-26 02:10 ash -> busybox
- 4.0K lrwxrwxrwx 1 root root 7 06-26 02:10 base64 -> busybox
- 916K -rwxr-xr-x 1 root root 908K 06-26 02:10 busybox
- 4.0K lrwxrwxrwx 1 root root 7 06-26 02:10 cat -> busybox
- 4.0K lrwxrwxrwx 1 root root 7 06-26 02:10 catv -> busybox
- 4.0K lrwxrwxrwx 1 root root 7 06-26 02:10 chattr -> busyb
看见bin命令的大小为1.3M,命令都是链接到busybox的,而busybox的大小仅为908k,十分娇小,集合多系统命令于一身,不愧为瑞士军刀。
PS:假如是旧版本,如1.16.0,可以不要usr这个目录,只要配置make menuconfig,Busybox setting ----> Installation Options ----> [*] don’t use /usr(新版本没这个选项),这样可以节省空间。
7、小结
至此,我们用busybox生成系统基本命令和系统不可或缺的/sbin/init程序和linuxrc。
其中/sbin/init是默认的,如果bootloader不传init=\linuxrc,内核配置也不填上参数init=\linuxrc,这个init就会被执行。
根文件系统的构建与分析(四)之瑞士军刀busybox生成系统基本命令的更多相关文章
- 根文件系统的构建与分析(三)之根文件目录及最简/dev目录
根文件系统的构建与分析(三) 转载请注明 http://blog.csdn.net/jianchi88 Author:Lotte 邮箱:baihaowen08@126.com 一.FHS(Fi ...
- Linux之根文件系统的构建20160611
说一下LINUX根文件系统的构建: 制作文件系统 1. 交叉编译busybox 安装:make install CONFIG_PREFIX=/work/nfs_root/fs_mini_mdev_ne ...
- 构建根文件系统之init进程分析
busybox是ls.cp等命令的集合. 执行ls时,实际上是执行了busybox ls 执行cp时,实际上是执行了busybox cp 分析init程序之前,再让我们回想一下我们的目标:u-boot ...
- yaffs2根文件系统的构建过程
基于BusyBox-1.19.2 (以其它作者的作为参考) 1. 下载BusyBox的源码 http://busybox.net/ 2. 解压#tar xvzf busybox-1.19.2.tgz ...
- Linux学习 :Uboot, Kernel, 根文件系统初步分析
1.U-Boot启动内核的过程可以分为两个阶段: 1)第一阶段的功能 硬件设备初始化 加载U-Boot第二阶段代码到RAM空间 设置好栈 跳转到第二阶段代码入口 2)第二阶段的功能 初始化本阶段使用的 ...
- 构建Linux根文件系统(未完待续)
所谓制作根文件系统, 就是创建各种目录, 并且在里面创建各种文件. 比如在/bin ./sbin 目录下存放各种可执行程序, 在/etc 目录下存放配置文件, 在/lib 目录下存放库文件 ...
- 使用BusyBox制作根文件系统【转】
本文转载自:http://www.cnblogs.com/lidabo/p/5300180.html 1.BusyBox简介 BusyBox 是很多标准 Linux 工具的一个单个可执行实现.Busy ...
- 使用BusyBox制作根文件系统
1.BusyBox简介 BusyBox 是很多标准 Linux 工具的一个单个可执行实现.BusyBox 包含了一些简单的工具,例如 cat 和 echo,还包含了一些更大.更复杂的工具,例如 gre ...
- linux 内核移植和根文件系统的制作【转载】
原文地址:http://www.cnblogs.com/hnrainll/archive/2011/06/09/2076214.html 1.1 Linux内核基础知识 在动手进行Linux内核移植之 ...
随机推荐
- VirtualizingPanel.IsVirtualizing 附加属性
VirtualizingPanel.IsVirtualizing 附加属性 获取或设置一个值,该值指示此 VirtualizingPanel 正在虚拟化其子集合. 说明: 标准布局系统可以创建项容器并 ...
- 在linux上用jmeter压测时出现很多异常java.net.NoRouteToHostException: Cannot assign requested address.
今天压力测试时, 刚开始出现了很多异常, 都是 java.net.NoRouteToHostException: Cannot assign requested address. 经网上查资料, 是由 ...
- mysql的bin或者sbin目录可执行文件
一. mysql服务和myql服务启动程序 1. mysqld mysqld就是mysql server,负责管理对mysql数据的访问. 当mysql server启动后,它会监听来自客户端的网络连 ...
- ubuntu 安装python3.7 以及安装pip3 出现Command '('lsb_release', '-a')' returned non-zero exit status 1问题解决
最近因为电脑重装,东西全没了,总计一下最近重装环境的过程. 如果没有安装包,请下载: wget http://www.python.org/ftp/python/3.7.0/Python-3.7.0. ...
- react-redux: async promise
1.the simple sample action: 事实上,只是返回个一个至少包含type的对象{ },用于reducer接收. import {RECEIVE_DATA} from " ...
- css3 hover 的一些小效果
Hover 2D Transforms Grow Shrink Pulse Pulse-grow Pulse-shrink Push Top Rotate Grow-rotate Float Sink ...
- [置顶]
个人博客上线!欢迎来访~ http://onlyloveyd.cn/
简介 Hexo + Github + 个人域名 构建静态博客系统. 构建方法 参考 https://yq.aliyun.com/articles/64953 个人博客网站 Cherish Androi ...
- zoj-3963 Heap Partition(贪心+二分+树状数组)
题目链接: Heap Partition Time Limit: 2 Seconds Memory Limit: 65536 KB Special Judge A sequence ...
- 防止前端脚本JavaScript注入
在使用ajax进行留言的时候,出现了一个问题.因为留言内容写完之后,通过ajax提交内容,同时使用js把留言的内容添加到页面上来.浏览留言的时候也是通过ajax请求,然后再显示的.这样,如果有人在留言 ...
- How your script code be coverted into arm code and running on ios.
Your script code is compiled into DLLs (assemblies) by the editor. When you build for iOS, these ass ...