Linux 内核 MTD驱动程序与 SD卡驱动程序 flash 闪存设备和 SD插卡设备是嵌入式设备用到的主要存储设备,它们相当于 PC机的硬盘。在嵌入设备特别是手持设备中, flash 闪存是焊接在嵌入设备主板
上的 flash 闪存芯片。在嵌入设备上有 MMC/SD卡控制器及插槽,可通过电梯门光幕 MMC/SD
来扩充存储空间。
嵌入设备的存储设备的空间划分及所有逻辑设备和文件系统示例列出如下图:
图:嵌入设备的存储空间划分及文件系统示例图
在嵌入设备上的 flash 芯片上 blob 和 zImage 直接按内存线性地址存储管理, 对于 flash 芯片上留出的供用户使用的存储空间,使用 MTDBLOCK块设备和 JFFS2 文件系统。对于 flash 芯片的分区表信息则以 MTDCHAR字符设备来存储管理。 在嵌入设备上的 MMC/SD插卡则由 MMCBLOCK驱动程序和 VFAT文件系统进行存储管理。本章分析了 MTD泵设备和 MMC/SD驱动程序。
Figure 3-1. UBI/MTD Integration
[ 隐藏]
1MTD内存技术设备
o1.1 MTD内存技术设备层次结构
o1.2 设备层和原始设备层的函数调用关系
o1.3 MTD相关结构
o1.4 MTD块设备初始化
o1.5 MTD块设备的读写操作
o1.6 MTD核心初始化
o1.7 MTD字符设备
o1.8 具体 flash 芯片的探测及映射
o1.9 驱动程序实例分析
2SD/MMC卡块设备驱动程序
o粉煤灰水泥2.1 MMC抽象设备层相关结构
2.1.1 ( 1)设备描述结构
2.1.2 ( 2) 读写请求相关结构
o2.2 MMC抽象设备层 MMC块设备驱动程序
2.2.1 ( 1) MMC块设备驱动程序初始化
2.2.2 ( 2) MMC块设备驱动程序探测函数
2.2.3 ( 3) MMC卡请求的处理
o2.3 具体 MMC控制器驱动程序示例
2.3.1 ( 1) amba控制器驱动程序相关结构
2.3.2 ( 2) amba控制器的初始化
2.3.3 ( 3)设备探测函数遥控器组合 mmci_probe
2.3.4 ( 4) amba控制器操作函数
MTD内存技术设备
Linux 中 MTD子系统在系统的硬件驱动程序和文件系统之间提供通用接口。 在 MTD 上常用的文件文件系统是 JFFS2日志闪存文件系统版本 2(Journaling Flash
File System)。 JFFS2用于微型嵌入式设备的原始闪存芯片的文件系统。 JFFS2 文件系统是日志结构化的, 这意味着它基本上是一长列节点。 每个节点包含有关文件的部分信息 ― 可能是文件的名称、也许是一些数据。与 Ext2 文件系统相比, JFFS2因为有以下这些优点:
JFFS2在扇区级别上执行闪存擦除/写/读操作要比 Ext2 文件系统好。 JFFS2
提供了比 Ext2fs 更好的崩溃/掉电安全保护。当需要更改少量数据时, Ext2 文
件系统将整个扇区复制到内存( DRAM)中,在内存中合并新数据,并写回整个扇
区。这意味着为了更改单个字,必须对整个扇区( 64 KB)执行读/擦除/写例
热风炉燃烧器
程 ,这样做的效率非常低。 JFFS2是附加文件而不是重写整个扇区,并且具有
崩溃/掉电安全保护这一功能。
JFFS2是是为 FLASH定制的文件系统, JFFS1实现了日志功能, JFFS2高效除雾器实现了压
缩功能。它的整个设计提供了更好的闪存管理。 JFFS2的 缺点很少,主要是当文件系统已满或接近满时, JFFS2会大大放慢运行速度。这是因为垃圾收集的问题。
MTD驱动程序是专门为基于闪存的设备所设计的, 它提供了基于扇区的擦除和读写操作的更好的接口。 MTD子系统支持众多的闪存设备,并且有越来越多的驱动程序正被添加进来以用于不同的闪存芯片。
MTD子系统提供了对字符设备 MTD_CHAR和块设备 MTD_BLOCK的支持。 MTD_CHAR
提供对闪存的原始字符访问, 象通常的 IDE 硬盘一样,在 MTD_BLOCK块设备上可
创建文件系统。 MTD_CHAR字符设备文件是 /dev/mtd0 、mtd1、mtd2 等,MTD_BLOCK
块设备文件是 /dev/mtdblock0 、mtdblock1 等等。
NAND和 NOR是制作 Flash 的工艺,CFI 和 JEDEC是 flash 硬件提供的接口,linux通过这些用通用接口抽象出 MTD设备。 JFFS2文件系统就建立在 MTD设备上。
NOR flash 带有 SRAM接口,可以直接存取内部的每一个字节。 NAND器件使用串
行 I/O 口来存取数据, 8 个引脚用来传送控制、地址和数据信息。 NAND读和写操作用 512 字节的块。
MTD内存技术设备层次结构
MTD(memory technology device 内存技术设备 ) 在硬件和文件系统层之间的提供了一个抽象的接口, MTD是用来访问内存设备(如: ROM、 flash )的中间层,它将内存设备的共有特性抽取出来, 从而使增加新的内存设备驱动程序变得更简单。 MTD的源代码都在 /drivers/mtd 目录中。