1:文件系统分类:
基于flash的文件系统:flash有两种,一种是NOR,另一种NAND。NOR型 FLASH主要用于存放程序。NAND型 FLASH主要用于存放数据。NOR的特点是可在芯片内执行。这样应用程序可以直接在flash内存内运行,不必再把代码读到系统的RAM中。NOR的传输效率很高,但写入和擦除速度较低。而NAND结构能提供极高的单元密度。并且写入和擦除也很快。是提高数据存储密度的最佳选择。JFFS2型文件系统主要用于NOR型flash。其特点为可读写,支持数据压缩的日志型文件系统.而yaffs文件系统一般是基于NAND
FLASH上。yaffs文件系统与jffs相比,减少了一些功能(如支持数据压缩),所以挂载时间更短,速度更快,对内存占用更小。cramfs文件系统既可以用在NOR型flash上,也可以用在NAND型FLASH上。其特点为只读的压缩文件系统。
基于RAM的文件系统:ramdisk文件系统,严格的讲ramdisk并不是一种文件系统,而只是一种磁盘访问技术。是将内存中一块区域当作磁盘来用。是一种将实际的文件系统(如ext2)装入内存的机制。还有一种initramfs文件系统,也是基于RAM的。不做介绍了。进入主题。
2:根文件系统的制作
(1):新建一个目录,取名为rootfs,在其文件夹下创建根文件系统必须的目录。这些目录有:bin,dev,etc,lib,proc,sbin,sys,usr,mnt,tmp,var.usr/bin,usr/lib,usr/sbin,lib/modules。
(2):创建设备文件,以下两个设备文件必须创建。
mknod -m 666 console c 5 1 (说明:C为字符型设备的意思,5为主设备号,1为次设备号)
mknod -m 666 null c 1 3
(3)在/etc目录下装以上文件。inittab ,profile,fstab,init.d(文件夹),init.d/rcS.这几个文件必须要有,我做实验的时候是直接拷的开发箱上的这几个文件。
(4)编译内核模块 make modules
(5)安装内核模块
make modules_install INSTALL_MOD_PATH=/XXX/rootfs(后面跟根文件系统路径,为什么要安装模块到根文件系统,是因为这些模块是用的时候才加入内核中。保存在根文件系统的lib/modules目录中)
(6)配置busybox
busybox主要是制作根文件系统下面的命令,如ls,mkdir等。这是一个很好用的工具。最后编译成功会生成一个busybox文件,然后这些命令最后都是链结到这个busybox文件上。busybox配置中注意的选项有:编译选项中选择使用静态链接库,交叉编译环境的选择。特别注意里面有一个installation option.里面有一个busybox installation prefix,把你建的rootfs的路径填进去。
(7)如果busybox成功配置好,那么你转到rootfs下的bin目录就可以看到很多的命令和一个busybox文件。最后一步就是把rootfs打包成适合开发板的镜像文件了,这一步根据你要选择的文件系统,开发板的文件系统地址有关。我用的是jffs2文件系统。最后的命令为./mkfs.jffs2 -r rootfs -o rootfs.img -e 0x20000 --pad=0xd00000