用busybox作简单的文件系统(一)
来源:互联网 发布:构件柱模板的算法 编辑:程序博客网 时间:2024/06/05 14:26
转载文章做个记号,谢谢分享~~~~~~~~~~~~~~~~~~~~~~~~
http://blog.sina.com.cn/s/blog_6de4c6c30100tixd.html
我的文件系统就是参照这个制作的,虽然有些内容不全,但是起码能转起来了。用NFS测试过
利用BusyBox做一个简单的根文件系统
1、下载BusyBox源代码包 http://busybox.net/
2、找个地方解压缩包,例如tar -xjvf busybox-1.00.tar.bz2
3、进入busybox的文件夹,使用make menuconfig进入设置
[attach]244[/attach]
4、在build options中有一些选项要注意
Build BusyBox as a static binary (no sharedlibs):如果选择了这个选项,那么BusyBox将被静态编译,也就是不需要动态链接库的支持就能运行,但是这样会使编译后文件的体积增大。
Do you want to build BusyBox with a CrossCompiler:如果你的busybox将要运行机器与编译主机的体系结构不同,比如s3c2410是ARM,与我们的X86主机芯片系统结构不一样,那么这个一定要选上,并且在Cross Compiler prefix中写上交叉编译器的名字,比如ARM用arm-linux-
[attach]245[/attach]
5、在Installation Options中 BusyBox installation prefix就是在编译完后运行makeinstall 时,busybox将被安装的地址。
[attach]246[/attach]
6、其它的选项按照默认选项就行,当然自己也可以看看有没有需要,把其它一些命令加入到编译选项中来
7、完成后保存,然后运行make
8、编译没有问题后运行make install这样编译好的busybox就会自动安装到BusyBox installationprefix中,一般是三个文件夹bin sbin usr和一个文件linuxrc。这样busybox的编译就完成了
9、准备一个空文件夹将BusyBox installationprefix中的东西拷过来,另外再建几个linux需要的文件夹
lib
dev
etc
home
proc
root
tmp
var
mnt
10、在etc文件夹下建一个目录init.d,并且在其中建立一个空文件rcS,在rcS中加上以下内容
#! /bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
runlevel=S
prevlevel=N
umask 022
export PATH runlevel prevlevel
#
#
#
trap ":" INT QUIT TSTP
/bin/mount -t proc none/proc
11、如果你的busybox是静态编译的,那么一个简单的能使用的根文件系统就这样完成了,但是这个文件系统中没有glibc的动态链接库,除了busybox以外的软件,如果对glibc有依赖,但是又没有静态编译的的话就无法运行。但如果所有的软件都用静态编译的话,那这个文件系统将很大。所以一般推荐软件不要使用静态编译,而使用一个库。
12、如果你不是用静态编译的,那么你需要编译好的glibc的动态链接库。在一般的交叉编译器中都带有已经编译好的库,直接拷过来就行了。一般在交叉编译器的lib或arm-linux/lib中
2编译busybox
在这个菜单界面中除了可以对最终编译到可执行文件中的命令进行选择外,还有很多其他设置也是非常重要的。下面三个目录是很多人都会感兴趣的:
Build Options--->
Installation Options --->
Login/Password Management Utilities --->
3完善文件系统
3.1需要增加的文件
mkdir mnt root var tmpproc boot etc lib
mkdir /var/{lock,log,mail,run,spool}
chown 0:0R *
如果busybox采用了动态链接的方式编译,还需要把busybox所需要的动态库:libcrypt.so.1、libc.so.6、ldlinux.so.2放到lib目录中。最好按照标准的方式建立相应的文件和链接,可以参考下面的列表:
-rwxrwxrwx192519ld-2.3.2.so
lrwxrwxrwx 111ld-linux.so.2 -> ld-2.3.2.so
-rwxrwxrwx 1 1190032libc-2.3.2.so
lrwxrwxrwx 113libc.so.6 -> libc-2.3.2.so
-rwxr-xr-x 118348libcrypt-2.3.2.so
lrwxrwxrwx 117libcrypt.so.1 ->libcrypt-2.3.2.so
3.2编写 etc文件夹下的文件
::sysinit:/etc/init.d/rcS
tty0::respawn:/sbin/getty 38400 tty0
tty2::askfirst:/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount ar
::shutdown:/bin/mount / o remount,ro
fstab文件定义了文件系统的各个“挂接点”,需要与实际的系统相配合。一个简单的fstab文件如下:proc/procprocdefaults00
/dev/hda1/ext2rw,noauto01
devpts/dev/ptsdevptsdefaults00
其中第三行是为UNIXPTYs准备的,telnetd要用到。
profile文件是终端登录之后首先运行的脚本,这里可以不去管它。我们比较关心的是系统在无人登录的情况下有哪些程序要执行。从inittab文件可以看出系统启动之后要运行/etc/init.d/rcS脚本,需要启动的程序和需要进行的设置都可以写在这里面。一个可能的rcS文件如下:
#! /bin/sh
echo e ''Starting System''
ifconfig lo 127.0.0.1
ifconfig eth0 192.168.0.100
hostname F /etc/hostname
/bin/mount / o remount,rw
/bin/mount /proc
/bin/mount /dev/pts
/usr/sbin/telnetd
dmesg > /var/log/dmesg
为了满足终端登录用户验证的要求,etc目录下还需要有passwd、group和shadow(在编译busybox时如果不选择shadow功能将不需要这个文件)。这些文件至少要包含root用户的定义,如下所示:
passwd:
root:x:0:0:root:/root:/bin/sh
group:
root:x:0:
shadow:
root::12179:0:99999:7:::
其中,如果shadow(对于不支持shadow的系统则是passwd)文件的第一个冒号和第二个冒号之间没有内容,表示这个用户登录不需要密码。如果需要设定密码或者增加新的登录用户,就可以参考开发主机上的相应文件,或者在目标系统启动之后用passwd命令和adduser命令完成。
4测试新的文件系统
首先将下载的 busybox-1.1.3-tar.bz2解压到一个目录中,然后在里面运行以下的命令,对源代码进行配置:
[root@redhat9busybox-1.1.3]# make menuconfig
相信有过编译内核经验的人对这个界面应该很熟悉,在这个莱单里可以对 BusyBox的编译方式进行选择,例如是静态编译还是动态编译,是使用 glibc 还是 uClibc 等;也可以选择你所需要的applet。
如果你的操作系统是 Red Hat Linux9.0 那么有两个问题你需要注意一下:
不要选择使用 Support NSASecurity Enhanced Linux;
如果选择了 Linux Ext2 FS Progs 下的任何一个 applet,那么就必须更新你的 make,make-3.81可以是一个选择。
完成配置后,接下来就容易了:
[root@redhat9busybox-1.1.3]# make dep
[root@redhat9 busybox-1.1.3]# make
[root@redhat9 busybox-1.1.3]# make install
正常编译完成后,在当前源代码目录下会生成一个_install 子目录,里面包含编译好的 busybox 和一些指向它的符号连接。
3 使用说明
调用 BusyBox 中的 applet 有三种方法(以 ls 命令为例):
给 busybox 带参数 busyboxls
硬连接 ln busybox ls
ls
符号连接 ln -s busybox ls
ls
第三种是最常用的方法,因为在 _install目录中就已经做好了全部的符号连接。
有了 busybox及其符号连接之后,还需要做一些附加工作才能将 BusyBox 作为操作系统使用:
基
- 用busybox作简单的文件系统(一)
- 用busybox做一个简单的文件系统
- 用busybox做一个简单的文件系统
- 使作Busybox创建文件系统 (转)
- 用busybox搭建最简单的Linux文件系统
- 使用busybox制作Linux文件系统(一)
- 用busybox制作嵌入式Linux的文件系统
- 用Busybox制作嵌入式Linux的文件系统
- 用busybox制作嵌入式Linux的文件系统
- 用busybox制作嵌入式Linux的文件系统
- 用busybox打造S3C2410上的文件系统
- 用busybox制作嵌入式Linux的文件系统
- 用busybox制作嵌入式Linux的文件系统
- 用busybox制作嵌入式Linux的文件系统
- 用busybox制作嵌入式Linux的文件系统
- 04 用busybox制作自己的文件系统
- 【Tiny4412--4】基于busybox的简单根文件系统构建
- 用busybox制作文件系统
- 该天为该年第几天
- Implementing Runtime Object Messaging
- UVA 10201 Adventures in Moving - Part IV 车站加油 dp
- Linux系统操作技巧集萃
- CMD的常用命令
- 用busybox作简单的文件系统(一)
- CODE 53: Remove Duplicates from Sorted Array II
- 2013 EMC新产品网络发布大会[演示文档下载]
- 函数与程序结构&数组与指针(C编程语言)
- RAM R/W TEST FAILED PRESS F1 to resume
- 搜索与优化2优化方法总结
- 第12周项目4--任务1--猜数字游戏
- Document root element "beans", must match DOCTYPE root "null"
- 数据结构之哈希表