嵌入式Linux的文件系统制作
发布时间:2008/8/28 0:00:00 访问次数:552
busybox在设计上就充分考虑了硬件资源受限的特殊工作环境。它采用一种很巧妙的办法减少自己的体积:所有的命令都通过“插件”的方式集中到一个可执行文件中,在实际应用过程中通过不同的符号链接来确定到底要执行哪个操作。例如最终生成的可执行文件为busybox,当为它建立一个符号链接ls的时候,就可以通过执行这个新命令实现列目录的功能。采用单一执行文件的方式最大限度地共享了程序代码,甚至连文件头、内存中的程序控制块等其他操作系统资源都共享了,对于资源比较紧张的系统来说,真是最合适不过了。
在busybox的编译过程中,可以非常方便地加减它的“插件”,最后的符号链接也可以由编译系统自动生成。下面就来一步步地用busybox从无到有地建立一个全新的linux文件系统。
2编译busybox
2004年10月中旬,busybox的1.00稳定版终于推出了,完整的源代码可以从http://www.busybox.net下载,压缩包大小为1.3 mb左右。将源码解压之后,进入到busybox1.00目录中,运行make menuconfig可以打开它的编译界面。这个界面和linux内核编译有些接近,如图1所示。
在这个菜单界面中除了可以对最终编译到可执行文件中的命令进行选择外,还有很多其他设置也是非常重要的。下面三个目录是很多人都会感兴趣的:build options --->
installation options ---> login/password managementutilities --->在build options里面有是否使用交叉编译的选项(do you want to build busybox with a cross compiler)。如果要对其他平台进行编译就要选择它并设置相应的编译程序前缀。
在installation options里面可以设置安装的路径,即设置为新文件系统的根目录。当然也可以用缺省的 _install目录,安装之后再复制到新文件系统中去。
在设置login/password management utilities的时候,为了免去配置glibc的麻烦,最好设置使用busybox自己的password和shadow文件的功能(use internal password and group functions rather than system functions)。
busybox提供的命令无疑比较全面,但它的缺省配置还不能构成一个功能比较完备的文件系统。必须要添加的命令有login/password management utilities里面的getty、login和passwd,这些命令从前是由另外一个软件包tinylogin所提供的。当然,如果不需要一个交互的登录界面,这些命令也可以去掉。通过设定内核参数init=/bin/sh可以在系统启图1busybox的编译配置界面动后直接得到一个shell。
tlenetd命令是一个远程登录服务程序,把它编译进busybox中会为将来的调试提供很多的方便。当然也可以通过串口终端的方式管理嵌入式设备,但网络登录的方式却更为方便。
设置完毕后保存、退出,执行make; make install命令,busybox将在未来的根文件系统中建立/usr、/bin、/sbin等目录。从中可以看到,编译好的busybox可执行文件和其他应用命令的符号链接。典型的busybox文件大小在动态链接的情况下是300 kb左右,静态链接为800 kb左右,用它实现的文件系统完全可以控制在1 mb以下。但就目前为止,得到的还不是一个完整可用的文件系统,必须要在这个基础上添加一些必要的文件,让它可以工作。
3完善文件系统
3.1需要增加的文件
参考一个正常的linux系统就会发现,busybox建立的文件系统还缺少很多文件。下面三行命令建立了常见unix系统中包含的一些目录,虽然它们不全是必需的,但建立它们更符合标准一些。这些命令都是在新文件系统的根目录中执行的,第三条命令的执行还必须要有root权限。mkdir mnt root var tmp proc 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目录中。最好按照标准的方式建立相应的文件和链接,可以参考下面的列表:-rwxrwxrwx 192519ld-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.so3.2编写 etc
文件夹下的文件etc文件夹是许多系统配置文件保存的地方。这些文件非常重要,如果配置错误,就可能影响系统的启动。busybox源代码example/bootfloopy/etc目录中的文件算是一个简单的例子,可以把其中的文件拷贝过来作为基础。(在example/bootfloopy目录中的一些脚本和文档也很值得阅读)
首先inittab文件是系统启动后所访问的第一个脚本文件,后续启动的文件都由它指定。这个文件的格式和普通微机linux上的inittab是有区别的,其具体含义可以参考busybox的文档。下面是一个比较简
busybox在设计上就充分考虑了硬件资源受限的特殊工作环境。它采用一种很巧妙的办法减少自己的体积:所有的命令都通过“插件”的方式集中到一个可执行文件中,在实际应用过程中通过不同的符号链接来确定到底要执行哪个操作。例如最终生成的可执行文件为busybox,当为它建立一个符号链接ls的时候,就可以通过执行这个新命令实现列目录的功能。采用单一执行文件的方式最大限度地共享了程序代码,甚至连文件头、内存中的程序控制块等其他操作系统资源都共享了,对于资源比较紧张的系统来说,真是最合适不过了。
在busybox的编译过程中,可以非常方便地加减它的“插件”,最后的符号链接也可以由编译系统自动生成。下面就来一步步地用busybox从无到有地建立一个全新的linux文件系统。
2编译busybox
2004年10月中旬,busybox的1.00稳定版终于推出了,完整的源代码可以从http://www.busybox.net下载,压缩包大小为1.3 mb左右。将源码解压之后,进入到busybox1.00目录中,运行make menuconfig可以打开它的编译界面。这个界面和linux内核编译有些接近,如图1所示。
在这个菜单界面中除了可以对最终编译到可执行文件中的命令进行选择外,还有很多其他设置也是非常重要的。下面三个目录是很多人都会感兴趣的:build options --->
installation options ---> login/password managementutilities --->在build options里面有是否使用交叉编译的选项(do you want to build busybox with a cross compiler)。如果要对其他平台进行编译就要选择它并设置相应的编译程序前缀。
在installation options里面可以设置安装的路径,即设置为新文件系统的根目录。当然也可以用缺省的 _install目录,安装之后再复制到新文件系统中去。
在设置login/password management utilities的时候,为了免去配置glibc的麻烦,最好设置使用busybox自己的password和shadow文件的功能(use internal password and group functions rather than system functions)。
busybox提供的命令无疑比较全面,但它的缺省配置还不能构成一个功能比较完备的文件系统。必须要添加的命令有login/password management utilities里面的getty、login和passwd,这些命令从前是由另外一个软件包tinylogin所提供的。当然,如果不需要一个交互的登录界面,这些命令也可以去掉。通过设定内核参数init=/bin/sh可以在系统启图1busybox的编译配置界面动后直接得到一个shell。
tlenetd命令是一个远程登录服务程序,把它编译进busybox中会为将来的调试提供很多的方便。当然也可以通过串口终端的方式管理嵌入式设备,但网络登录的方式却更为方便。
设置完毕后保存、退出,执行make; make install命令,busybox将在未来的根文件系统中建立/usr、/bin、/sbin等目录。从中可以看到,编译好的busybox可执行文件和其他应用命令的符号链接。典型的busybox文件大小在动态链接的情况下是300 kb左右,静态链接为800 kb左右,用它实现的文件系统完全可以控制在1 mb以下。但就目前为止,得到的还不是一个完整可用的文件系统,必须要在这个基础上添加一些必要的文件,让它可以工作。
3完善文件系统
3.1需要增加的文件
参考一个正常的linux系统就会发现,busybox建立的文件系统还缺少很多文件。下面三行命令建立了常见unix系统中包含的一些目录,虽然它们不全是必需的,但建立它们更符合标准一些。这些命令都是在新文件系统的根目录中执行的,第三条命令的执行还必须要有root权限。mkdir mnt root var tmp proc 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目录中。最好按照标准的方式建立相应的文件和链接,可以参考下面的列表:-rwxrwxrwx 192519ld-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.so3.2编写 etc
文件夹下的文件etc文件夹是许多系统配置文件保存的地方。这些文件非常重要,如果配置错误,就可能影响系统的启动。busybox源代码example/bootfloopy/etc目录中的文件算是一个简单的例子,可以把其中的文件拷贝过来作为基础。(在example/bootfloopy目录中的一些脚本和文档也很值得阅读)
首先inittab文件是系统启动后所访问的第一个脚本文件,后续启动的文件都由它指定。这个文件的格式和普通微机linux上的inittab是有区别的,其具体含义可以参考busybox的文档。下面是一个比较简
上一篇:嵌入式安全系统的发展趋势