根文件系统的构建与分析(四)之瑞士军刀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内核移植之 ...
随机推荐
- mysql学习笔记(window下简单使用+Navict)
之前安装过mysql.最近刚好要重新翻出来看看 发现又忘记了那些命令.还是要百度.所以不如自己整理下 尽管网上有很多相关的介绍.当时想对的不如自己整理出来的舒服 首先是下载安装.网上有很多就不一一罗列 ...
- Mac 终端 Termial 高亮配置(PS1变量配置)
操作环境: 系统:Mac 10.12 编辑器:vim 一.无脑配置: 1. 打开中端输入: vi ~/.bash_profile 2. 打开并编辑 .bash_profile 文件: 按键盘“i”,进 ...
- 查询相应的key
一.key pattern 查询相应的key (1)redis允许模糊查询key 有3个通配符 *.?.[] (2)randomkey:返回随机key (3)type key:返回key存储的类型 ...
- linux中的权限管理命令
一. 改变文件或目录的权限:chmod 命令详解 命令名称:chmod 命令所在路径:/bin/chmod 执行权限:所有用户 语法:chmod [{ugoa}{+-=}{rwx}] [文件或目录] ...
- SpringBoot下的Dubbo和Zookeeper整合
最近一直在学各种分布式的内容,学到了dubbo分布式服务框架就想写个小demo使用一下,但是由于我要整合在SpringBoot框架中,SpringBoot框架毕竟提倡的是java注解配置,XML文件不 ...
- Matplotlib -多组线用不同的线性、颜色、节点绘制
先来看看我们要实现的效果图吧: 先来看看Matplotlib的plot函数原型 plt.plot(x, y, color='r', maker='o', linestyle='-', linewidt ...
- 使用cqlsh远程连接cassandra——设置cassandra.yaml里rpc_address和listen_address为ipv4地址即可
You need to edit cassandra.yaml on the node you are trying to connect to and set the node ip address ...
- LeetCode OJ:Set Matrix Zeroes(设置矩阵0元素)
Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place. 这题要注意的 ...
- 前端 velocity(.vm)模板里写ajax出现解析异常
异常信息:Caused by: org.apache.velocity.exception.ParseErrorException: Encountered "{" at dist ...
- ADO.NET数据库访问技术(转)
这几天的自学,现在总结一下关于C#中连接数据库的一些知识点: 1.使用Connection连接数据库的步骤: (1).添加命名空间 System.Data.SqlClient(注意:初学者经常会忘记) ...