上传者: dubo1988
|
上传时间: 2019-12-21 19:40:56
|
文件大小: 411KB
|
文件类型: pdf
### MTD模型详解
MTD(Memory Technology Device)模型是Linux操作系统中用于处理各种内存设备,尤其是非易失性存储器如ROM和Flash的子系统。它的设计目标是为了简化新内存设备驱动的开发过程,通过在硬件与软件层之间提供抽象接口,确保不同设备能够以统一的方式被访问和管理。
#### 重要概念
- **MTD**: 内存技术设备,指Linux内核中的一个子系统,用于管理非易失性存储设备。
- **JEDEC**: Joint Electron Device Engineering Council,即电子电器设备联合会,制定了一系列电子设备的标准,包括闪存。
- **CFI**: Common Flash Interface,由Intel发起的闪存接口标准,旨在提高闪存设备的互操作性和可预测性。
- **OOB**: Out Of Band,某些内存技术如NAND flash支持的额外数据区域,用于存放ECC数据或其他元数据。
- **ECC**: Error Correction Code,一种错误校正机制,用于检测并纠正闪存中的数据错误,提高数据可靠性。
- **Erasesize**: 擦除大小,即一次擦除操作能覆盖的最小数据块大小。
- **Buswidth**: MTD设备与系统间通信的总线宽度。
- **Interleave**: 交错数,指的是多块芯片并行连接以增加总线宽度的技术。
- **Devicetype**: 芯片类型,如x8、x16或x32,表示数据线的数量。
- **NAND**/**NOR**: 两种常见的闪存技术,各有特点,NAND通常用于高密度存储,而NOR则适用于快速随机访问。
- **Wearout**: 闪存的寿命限制,由于擦除次数有限,一般在1000,000次左右,过度使用会导致设备失效。
#### 体系结构概览
MTD的体系结构主要包括几个层次:
1. **硬件驱动层**:负责初始化和驱动底层的Flash硬件,包括遵循CFI接口标准的NOR Flash和NAND Flash的驱动。
2. **分区驱动层**:管理和组织多个Flash芯片,支持将物理设备映射为逻辑分区。
3. **文件系统层**:支持多种文件系统,如JFFS2、NFTL、FTL等,用于在Flash设备上进行数据的高效存储和检索。
4. **访问层**:提供对MTD设备的字符设备和块设备访问接口,允许用户空间应用程序直接读写Flash。
#### CFI与JEDEC标准
CFI标准是由Intel提出的,旨在简化Flash设备的识别和编程,它定义了一套用于设备自识别的数据结构和命令集。当一个设备被认为是CFI兼容时,可以通过读取特定地址的数据来获取设备的信息,如制造商、容量、命令集等。
JEDEC标准则是由电子电器设备联合会制定的一系列行业规范,涵盖了很多方面,包括Flash设备的电气特性、信号协议等。JEDEC标准的设备也可以被MTD识别和驱动,但可能需要专门的探测程序。
#### 探测与识别
对于CFI使能的Flash设备,识别过程涉及向设备的特定地址发送特定的指令序列,并根据返回的数据判断设备是否符合CFI标准。一旦确认,MTD会进一步读取CFI查询结构,以获取更详细的设备信息。类似地,对于遵循JEDEC标准的设备,也有相应的探测程序。
除了CFI和JEDEC设备外,MTD还支持其他非标准的Flash类型,以及非Flash的MTD设备,如ROM或absent设备,这些都有各自的探测和驱动程序。
MTD模型通过提供一套灵活且强大的框架,使得Linux能够有效地支持和管理各种复杂的内存技术设备,从而提高了系统的稳定性和性能。