关于存储的基本知识:
flash:Flash,是内存(Memory)的一种,但兼有RAM和ROM, 分为NOR Flash 和 NADN Flash两种不同的flash,分别用在不同的场合,不同于SRAM(EEPROM),FLASH的操作是靠一系列指令完成,以扇区sector进行整体操作
NORflash:主要用来存储代码,常量表,可随机读写,无坏块,成本高,可以以单字节读写,但只能以块进行擦除。。
NANDFLASH:主要用来存数据,不能随机读取,每次只能以页为单位进行读写,以block块(512bytes)为单位擦除用512字节的页和32KB的块为单位,有坏块(初始化扫描以发现坏块,并将坏块标记为不可用,并以冗余块代替,向NAND器件写入信息需要相当的技巧,因为设计师绝不能向坏块写入NAND器件上自始至终都必须进行虚拟映射。需要通过软件方法避免,EDC/ECC算法避免位交换错误),容量大,成本相对低一点,擦写寿命短。
● NOR的读速度比NAND稍快一些。、
● NAND的写入速度比NOR快很多。
● NAND的4ms擦除速度远比NOR的5s快。
● 大多数写入操作需要先进行擦除操作。
● NAND的擦除单元更小,相应的擦除电路更少
字符设备:字节流形式访问如串口
块设备:挂载文件系统以块分区形式访问
MTD设备:内存技术驱动程序
MTD 设备是象闪存芯片、小型闪存卡、记忆棒等之类的设备,它们在嵌入式设备中的使用正在不断增长。 MTD 驱动程序是在 Linux 下专门为嵌入式环境开发的新的一类驱动程序。相对于常规块设备驱动程序,使用 MTD 驱动程序的主要优点在于 MTD 驱动程序是专门为基于闪存的设备所设计的,所以它们通常有更好的支持、更好的管理和基于扇区的擦除和读写操作的更好的接口。Linux 下的 MTD 驱动程序接口被划分为两类模块:用户模块和硬件模块。
MTD 驱动程序设置
为了访问特定的闪存设备并将文件系统置于其上,需要将 MTD 子系统编译到内核中。这包括选择适当的 MTD 硬件和用户模块。当前,MTD 子系统支持为数众多的闪存设备 ― 并且有越来越多的驱动程序正被添加进来以用于不同的闪存芯片。 有两个流行的用户模块可启用对闪存的访问: MTD_CHAR 和 MTD_BLOCK 。 MTD_CHAR 提供对闪存的原始字符访问,而 MTD_BLOCK 将闪存设计为可以在上面创建文件系统的常规块设备(象 IDE 磁盘)。与 MTD_CHAR 关联的设备是 /dev/mtd0、mtd1、mtd2(等等),而与 MTD_BLOCK 关联的设备是 /dev/mtdblock0、mtdblock1(等等)。由于 MTD_BLOCK 设备提供象块设备那样的模拟,通常更可取的是在这个模拟基础上创建象 FTL 和 JFFS2 那样的文件系统。 为了进行这个操作,可能需要创建分区表将闪存设备分拆到引导装载程序节、内核节和文件系统节中。
Linux 中 MTD 子系统的主要目标是在系统的硬件驱动程序和上层,或用户模块之间提供通用接口。硬件驱动程序不需要知道象 JFFS2 和 FTL 那样的用户模块使用的方法。