文件系统是操作系统用于明确磁盘或分区上的文件的方法和数据结构; 即在磁盘上组织文件的方法。也指用于存储文件的磁盘或分区
一个分区或磁盘能作为文件系统使用前,需要初始化,并将记录数据结构写到磁盘上。这个过程就叫建立文件系统
种类:
1 ext2与ext3是linux专门设计的硬盘文件系统一般称为扩展文件系统。Ext3增加了日志记录功能。
fdisk 分区在终端会显示打印信息 mkfs.ext4 /dev/XXX
sfdisk [options] device 可以直接执行分区
2 swap文件系统
用于linux的交换分区,用来提供虚拟内存,一般为物理内存的2倍。由操作系统自行管理
3 vfat
是linux对DOS,windows系统下的FAT文件系统的一个统称
4 NFS文件系统
即网络文件系统,用于系统间通过网络进行文件共享,
不能建立在flash上,只能建立在硬盘上。
5 ISO 9660文件系统
光盘使用的标准文件系统,
6 jffs2文件系统
JFFS2是一个可读写的、压缩的、日志型文件系统,并提供了崩溃/掉电安全保护,克服了JFFS的一些缺点:使用了基于哈希表的日志节点结构,大大加快了对节点的操作速度;支持数据压缩;提供了“写平衡”支持;支持多种节点类型;提高了对闪存的利用率,降低了内存的消耗。这些特点使JFFS2文件系统成为目前Flash设备上最流行的文件系统格式,它的缺点就是当文件系统已满或接近满时,JFFS2运行会变慢,这主要是因为碎片收集的问题
它是在闪存上使用非常广泛的读/写文件系统
方法一:
mkfs.jffs2 –r rootfs –o rootfs.bin –pad=0x1000000 –e=0x20000 –n
将rootfs制作为jffs2镜像文件并拷贝到/tftpboot烧写
--pad指定最终的jffs2镜像被填充的大小,若不用该选项制作的可能不是页对其的 -e 指定擦除的大小,
jffs2文件系统烧写
#tftp 30008000 filesys.jffs2
#nand erase 200000 800000 (根文件系统所在的分区,kernel启动的时候有显示)
#nand write 30008000 200000 800000 (nand write 下载的地址 偏移地址 大小)
方法二:
mount –t jffs2 /dev/mtdblock1 /mnt; 将块设备直接挂在成jffs2格式
tar zxvf rootfs.ta.gz -C /mnt
umount /dev/mtdblock1
7、ubifs文件系统
无排序区块图像文件系统,是用于固态硬盘存储设备上,UBIFS 支持 write-back, 其写入的数据会被cache, 直到有必要写入时才写到flash, 大大地降低分散小区块数量并提高I/O效率
mkfs.ubifs –m 2048 –c 2048 –e 126976 –r rootfs –o rootfs.bin
将rootfs制作成ubifs镜像文件rootfs.bin并拷贝到/tftpboot下下载烧写
-r 要制作的镜像的根文件系统的路径
-m 最小的I/O操作的大小
-e 擦除块的大小
-p 物理擦除块的大小
-c 最大逻辑擦除块的数量
-o 最终制作成的根文件镜像的文件名
8、yaffs文件系统
YAFFS/YAFFS2是一种和JFFSx类似的闪存文件系统,它是专为嵌入式系统使用NAND型闪存而设计的一种日志型文件系统。和JFFS2相比它减少了一些功能,所以速度更快,而且对内存的占用比较小。此外,YAFFS自带NAND芯片的驱动,并且为嵌入式系统提供了直接访问文件系统的API,用户可以不使用Linux中的MTD与VFS,直接对文件系统操作。YAFFS2支持大页面的NAND设备,并且对大页面的NAND设备做了优化。JFFS2在NAND闪存上表现并不稳定,更适合于NOR闪存,所以相对大容量的NAND闪存,YAFFS是更好的选择
专门为NAND Flash存储器设计的嵌入式文件系统,适用于大容量的存储设备,以固定大小的数据块进行存储的,块的大小可以是512字节、1 024字节或者2 048字节 制作yaffs文件系统
mkyaffs2image rootf rootf_yaffs.bin
烧写到yaffs2根文件系统到NandFlash这种方法是不可行的
要用用mount成yaffs格式,在解压到该目录下。
1)启动U-boot,修改启动参数
setenv bootargs noinitrd root=/dev/mtdblock2 rootfstype=yaffs2 rw console=ttySAC0,115200 init=/linuxrc mem=64M
2)setenv bootcmd nand read.jffs2 32000000 100000 0x350000 && bootm 0x32000000
文件系统的烧写
文件系统的烧写,可以通过与内核相似的方法使用串口烧写,也可以通过挂载nfs使用mtd_debug 工具烧写,由于文件系统较大,使用第一种方式会慢一些。
串口烧写使用到的命令
loady
nand erase 0x600000 0x3a00000(目前的分区情况)
nand write 0x30001000 0x600000 0x800000(实际大小)
使用nfs烧写用到的命令
mtd_debug erase /dev/mtd2 0 0x3a00000
mtd_debug write /dev/mtd2 0 0x800000 ubi.img