文件系统是一种用于向用户提供底层数据访问的机制,它将设备中的空间划分为特定大小的块(扇区),一般每块为512B。数据存储在这些块中,大小被修正为整数个块。通常由文件系统软件来负责将这些块组织为文件和目录,并记录哪些块被分配给了哪个文件,以及哪些块没有被使用。不过,文件系统并不一定只在特定存储设备上出现,它是数据的组织者和提供者,至于它的底层,可以是磁盘,也可以是其他动态生成数据的设备(如网络设备等)。
1.Linux文件系统层次标准介绍
因为Linux的开发人员实在太多了,如果每个人都使用自己的目录配置方法,那么将带来很多管理问题。所以,后来就有所谓的文件系统层次标准(Filesystem Hierarchy Standard,FHS)出台。它定义了文件系统中的目录、文件分类存放的原则,系统运行所需的最小文件、目录的集合。下面分别介绍各个目录的作用。
1)/bin基础系统所需要的那些命令位于此目录,也是最小系统所需要的命令;如ls、cp、mkdir等命令;功能和/usr/bin类似,这个目录中的文件都是可执行的,是普通用户都可以使用的命令。作为基础系统所需要的最基础的命令就放在这里。
2)/boot Linux的内核及引导系统程序所需要的文件,如vmlinuz initrd.img文件都位于这个目录中。一般情况下,GRUB或LILO系统引导管理器也位于这个目录。
3)/dev设备文件存储目录,如声卡和磁盘等。
4)/etc系统配置文件的所在地,一些服务器的配置文件也在这里;如用户账号及密码配置文件等。
5)/home普通用户目录的默认存放目录。
6)/lib库文件存放目录。
7)/lost+found在ext2或ext3文件系统中。当系统意外崩溃或机器意外关机产生的一些文件碎片会放在这里。在系统启动的过程中,fsck工具会检查这里,并修复已经损坏的文件系统。有时系统发生问题,有很多的文件被移到这个目录中,可能会用手工的方式来修复,或移动文件到原来的位置上。
8)/media即插即用型存储设备的挂载点自动在这个目录下创建,如USB盘系统自动挂载后,会在这个目录下产生一个目录;CD/DVD自动挂载后,也会在这个目录中创建一个目录,类似cdrom的目录。这个只有在最新的发行套件上才有,如Fedora等。可以参看/etc/fstab的定义。
9)/mnt目录一般用于存放挂载储存设备的挂载目录的,如cdrom等目录,可以参看/etc/fstab的定义。有时可以把系统开机自动挂载文件系统,把挂载点放在这里也是可以的,主要看/etc/fstab中怎么定义了;如光驱可以挂载到/mnt/cdrom等。
10)/proc操作系统运行时,进程(正在运行中的程序)信息及内核信息(如CPU、硬盘分区、内存信息等)存放在这里。/proc目录伪装了文件系统proc的挂载目录,proc并不是真正的文件系统。
11)/root Linux超级权限用户root的目录。
12)/sbin大多是涉及系统管理的命令的存放,是超级权限用户root的可执行命令存放地,普通用户无权限执行这个目录下的命令,这个目录和/usr/sbin或/usr/local/sbin目录是相似的。
13)/tmp临时文件目录,有时用户运行程序时会产生临时文件。/tmp就是用来存放临时文件的。/var/tmp目录和这个目录相似。
14)/usr是系统存放程序的目录,如命令和帮助文件等。这个目录下有很多文件和目录。当安装一个Linux发行版官方提供的软件包时,大多安装在这里。如果有涉及服务器配置文件的,就会把配置文件安装在/etc目录中。/usr目录下包括字体目录/usr/share/fonts,帮助目录/usr/share/man或/usr/share/doc,普通用户可执行文件目录/usr/bin或/usr/local/bin。超级权限用户root的可执行命令存放目录,如/usr/sbin或/usr/local/sbin等;还有程序的头文件存放目录/usr/include。
15)/var目录的内容是经常变动的,看名字就知道了,这里可以将其理解为vary的缩写,/var下有/var/log,这是用来存放系统日志的目录。/var/www目录用于定义Apache服务器站点存放目录;/var/lib目录用来存放一些库文件。
16)/etc/init.d目录用来存放系统或服务器以SystemV模式启动的脚本,这在以System V模式启动或初始化的系统中经常见到。如果服务器是通过xinetd模式运行的,它的脚本就要放在/etc/xinit.d目录下。/etc/rc.d是BSD方式启动脚本的存放地;如定义网卡和服务器开启脚本等。
2.移植Busybox
构建Linux根文件系统,就是参照FHS的标准创建相应的目录,并且在其中存放各种可执行程序,建立相关的配置文件以及相应的库文件。这里采用的是Busybox工具,它是遵循GPL协议的一个开源的工具,最初是为了Debian安装盘编写的,其目的是在一张软盘上创建一个可引导的Linux系统,可以用于安装盘和急救盘,其大小在1.44MB以内。它将众多的UNIX命令集合到一个可执行文件中,很多标准的Linux工具都可以共享很多相同的元素,这些工具被合并到一个可执行程序中,就可以共享这些相同的元素,从而产生更小的可执行程序。Busybox在设计时充分考虑了硬件资源受限的环境,通过不同的符号链接来选择到底执行哪一个命令,这对资源紧张的嵌入式Linux系统来说再合适不过了。
首先下载Busybox,http://www.busybox.net,这里用的是Busybox-1.3.0,解压缩以后,修改Makefile文件。
指定交叉编译器:
执行makemenuconfig进行配置,在其中可以有针对性地选择需要的工具,这里使用默认配置,选择动态编译以减小体积。然后执行make编译,最后执行make CONFIG_PREFIX=~/rootfsinstall,这样一套工具集就被做好了,放在主目录下的rootfs文件夹中。通过ls-l命令可以看到这些命令实际上都是指向Busybox文件的。
这里采用的是动态编译,下一步要做的就是裁剪所需要的库函数。glibc的库位于“/usr/local/crosstool/gcc-3.3.6-glibc-2.3.2/arm-linux/lib/”目录下,其中只需要复制一些加载器和动态库即可通过arm-linux-readelf-abusybox|grep"Shared"命令来查看Busybox具体使用了哪些共享库,并且把它们统统复制过来,这样,基本的命令行工具集和库文件就做好了。
3.构建Linux根文件系统
下面将参照FHS的标准来建立目录以及配置文件。
1)首先建立etc目录和一些基本的配置文件。(www.xing528.com)
2)参考busyboxexample目录下的inittab文件编辑etc/inittab文件如下。
3)编辑etc/init.d/rcS文件,配置IP。
4)编辑etc/resolv.conf,添加DNS配置。
5)编辑etc/fstab文件,这是一个用来定义系统开机后自动挂载的配置文件。
至此,基本的系统配置就完成了。下面要做的就是创建dev目录。
常见的设备节点见表13-2。
表13-2 常见的设备节点
(续)
6)最后创建一些其他的目录。
这样,一个基本的文件系统就做好了,把做好的目录按照FHS标准放在自建的rootfs目录下面。现在需要制作YAFFS2文件系统映像文件,在YAFFS2源码目录下有一个utils目录,下面有编译好的mkyaffs2image的代码,编译好以后就可以用来制作YAFFS2文件系统映像文件了。
7)利用mkyaffsimage工具制作根文件系统镜像。例如,根文件系统放在/nfsboot目录下,可以执行如下命令:
8)把rootfs.img复制到NFS目录后,在U-Boot控制界面就可以将镜像下载到开发板内存、继而把镜像固化到NANDFlash中。操作命令如下:
9)修改U-Boot的命令行参数,以MTD2分区作为根文件系统,设置如下:
10)启动开发板。
11)当开发测试时,可以设置U-Boot从NFS启动,这时的设置为
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。