基于MTD的NANDFLASH设备驱动底层实现原理分析(一)经过UBOOT初步的移植,Linux内核初步的移植,Linux内核总线设备模型的分析,等一系列痛苦的折腾,目的就是想更好的来分析下NANDFLASH的驱动
大概一共历经了半个月的时间,慢慢的对NANDFLASH驱动程序有感觉了
一、MTD体系结构:Linux内核提供MTD子系统来建立FLASH针对Linux的统一、抽象接口
MTD将文件系统与底层的FLASH存储器进行隔离
引入MTD后Linux系统中对FLASH的设备驱动分为4层设备节点:用户在/dev目录下使用mknod命令建立MTD字符设备节点(主设备号为90),或者MTD块设备节点(主设备号为31),使用该设备节点即可访问MTD设备
MTD设备层:基于MTD原始设备层,系统将MTD设备可以定义为MTD字符(在/mtd/mtdchar
c中实现,设备号90)和MTD块设备(在/mtd/mtdblock
c中实现,设备号31)
MTD原始设备层:MTD原始设备层由两部分构成,一部分是MTD原始设备的通用代码,另一部分是各个特定Flash的数据,如分区
主要构成的文件有:drivers/mtd/mtdcore
c支持mtd字符设备driver/mtd/mtdpart
c支持mtd块设备Flash硬件驱动层:Flash硬件驱动层负责对Flash硬件的读、写和擦除操作
MTD设备的NorFlash芯片驱动位于drivers/mtd/chips/子目录下,NandFlash芯片的驱动则位于drivers/mtd/nand/子目录下
二、Linux内核中基于MTD的NANDFLASH驱动代码布局:在Linux2
35内核中,MTD源代码放在driver/mtd目录中,该目录中包含chips、devices、maps、nand、onenand、lpdrr、test