基于busybox的根文件系统制作
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于busybox的根文件系统制作
作者:李飞,武金虎,石颖博
来源:《电脑知识与技术》2010年第17期
摘要:Busybox是构建嵌入式Linux文件系统的必备软件,它是所有文件和设备节点的起始点,是决定系统能否正常启动的关键。通过busybox-1.1.3为例,进行配置、编译、安装等过程,从而形成简单的根文件系统映像文件,为以后嵌入式Linux系统的移植打下了良好的开端。
关键词:Busybox;嵌入式Linux;Linux操作系统;根文件系统;cramfs 文件系统
中国分类号:TP316.81文献标识码:A文章编号:1009-3044(2010)17-4655-02
Making Root File System Based on Busybox
LI Fei, WU Jin-hu, SHI Ying-bo
(College of Computer Science and Information, Guizhou University, Guiyang 550025, China)
Abstract: Busybox is an essentiaL software to buiLd an embedded Linux fiLe system. It is the starting node point of aLL the fiLes and devices and the key whether the system can have a normaL start. Taking busybox-1.1.3 for exampLe, making a simpLe root image system fiLe by configuration compiLation and instaLLation Lays a good foundation for migration of the embedded Linux system.
Key words: busybox; embedded linux; Linux OS; root file system; cramfs file system
1 根文件系统结构
根文件系统是所有文件和设备节点的起始点,包括系统所必须的各种工具软件、库文件、
脚本、配置文件等一系列的文件。一个基本的Linux根文件系统包含有以下的目录:dev、proc、bin、etc、usr、Lib、temp、var、usr等等目录。其中dev是设备文件节点目录,proc是挂载proc文件系统所用的目录,bin目录下面包含了系统的基本命令,etc目录是系统启动脚本所在的目录,Lib是系统默认的动态链接库目录,usr是用户目录,temp是临时目录,用来保存临时文
件,var目录包含系统运行时要改变的数据。以上都是根文件系统所必须的目录
2 Busybox简介
熟练嵌入式Linux的朋友对busybox一定不会陌生,它是标准Linux工具的一个单个可执行实现,被形象的称为嵌入式Linux系统中的“瑞士军刀”,因为它将许多常用的UNIX工具和命令
结合到一个单独的可执行程序中。虽然busybox中的这些工具相对于GNU常用工具功能有所
简化,但对于嵌入式系统来说这已经足够了。同时,busybox仅仅需要几百KB的空间资源就能实现大量的Linux命令(如Ls,cat,cp等),节省系统空间容量,使用简洁方便,不需裁剪就可以直接将其应用于嵌入式系统的根文件系统。
Busybox 开放源代码,遵守GPL协议,本文以虚拟机为载体,以busybox-1.1.3为例,完成的源代码可从下载,压缩包大小为1.3M左右。
3 配置busybox
首先,建立交叉编译环境,使用arm-linux- 3.3.2版本,特别要主要arm-linux- 编译工具和busybox1.1.3版本的对应,不同的对应可能会出现许多意想不到的错误。
安装arm-linux-3.3.2 ,在根目录下解压即可tar –jxvf arm-linux-gcc-3.3.2.tar.bz2
检查是否生成/usr/locaL/arm 目录,若生成说明安装完成。
其次,修改环境变量export PATH=$PATH:/usr/locaL/arm/3.3.2/bin/:
并将busybox-1.1.3源代码解压后,进入busybox目录:
#tar –jvxf busybox-1.1.3.tar.bz2
#cd busybox-1.1.3
#make menuconfig
出现一个图形界面,如图1,选择Busybox Settings,这里可以对编译、安装以及调试等模式进行配置。
然后选择BuiLd Options,对交叉编译器以及编译方式进行配置。
其中的第一项是BuiLd Busybox as a static binary(no shared Libs),如果选择上,则busybox将以静态形式进行编译,否则将以动态方式编译。此外,还需要对交叉编译环境进行配置,选择其中的Cross CompiLer Perfix,输入交叉编译器的前缀,我们的嵌入式平台上使用的是arm-linux-的交叉编译工具,如图2。
接下来,配置busybox过程中的几个重要选择:
1)在GeneraL Configuration中,选择“Support for devfs”选项
2)在Linux System UtiLities选项中,“Support Loopback mounts”和“Support for the oLd
/etc/mtab fiLe”2个选项应该选中
3)在SheLL选项中,应该选中默认sheLL:ash,否则不会生成sh,导致不能解释脚本文件。
最后运行命令:
#make
#make instaLL
将默认在busybox源码目录下生成一个_instaLL目录。到此,busybox基本上可以功成身退了。我们需要的就是busybox编译出来的这个_instaLL目录。进入_instaLL目录,可以看到一共有3个目录和一个文件,分别是:bin、sbin和usr目录以及linuxrc文件。删除linuxrc文件,将其他的目录打包。查看_instaLL目录,大约在540KB左右,由此可见,busybox的效率是非常高的。
4 配置cramfs系统
一个正常的Linux系统还缺少很多文件。我们必须建立了常见Linux 系统中包含的一些目录,虽然它们不全是必需的,但建立它们更符合标准一些。创建一个新的文件夹:
mkdir rootfs
cd rootfs
再建立相应的文件夹,并在etc目录下建立init.d文件夹。
mkdir dev etc home Lib mnt proc sbin sys tmpvar usr
准备系统启动时所需要的文件:linuxrc、rcS、inittab、fstab。这里,我们以脚本的形式直接给出:
1)linuxrc文件
#!/bin/sh
echo "mount /etc as ramfs"
/bin/mount -f -t cramfs -o remount,ro /dev/bon/2 /
/bin/mount -t ramfs ramfs /var
/bin/mkdir -p /var/tmp