嵌入式系统存储知识
Android中mount命令可以得到
/dev/block/mtdblock3 /system yaffs2 rw,relatime 0 0
/dev/block/mtdblock4 /cache yaffs2 rw,nosuid,nodev,relatime 0 0
/dev/block/mmcblk0p3 /mnt/asec/extdata ext4 rw,nosuid,nodev,noat
MTD的介绍
Linux系统提供了MTD(Memory Technolgy Device,内存技术设备)系统来建立针对Flash设备的统一,抽象的接口。
有了MTD,就不用考虑不同Flash设备带来的差异,这点和FBD(FrameBuffer Device)作用类似。
Linux MTD层次图
- MTD将文件系统与底层的Flash存储器进行隔离,这样应用层就无须考虑真实的硬件情况
- 图中的mtdblock表示MTD块设备。
有了MTD后,就不用关心Flash是NOR还是NAND了。
Flash文件系统
Flash文件系统特性,常见的文件系统(FAT32,NTFS,Ext2
)是无法直接在Flash设备上,因为无法重复再Flash用一块存储位置做写入操作(必须事先擦除该块后才能写入)。
为了能够在Flash设备上使用这些文件系统,必须透过一个转换层(Translation Layer),将逻辑地址对应到Flash存储器的物理地址上,以便系统能够把Flash当做普通的磁盘处理器。可以把这一层FTL(Flash Translation Layer),如图:
FTL和NFTL转换层示意图
- 如果使用FAT32或NTFS文件系统,必须通过FTL或NTFL进行转换,其中FTL针对NOR Flash而NTFL针对NAND Flash
- 尽管有了中间转换层,I/O效率有影响,开发了Flash文件系统,YAFFS应用比较广泛的一种。