基于mtd的nandflash设备驱动底层实现原理分析

基于mtd的nandflash设备驱动底层实现原理分析

ID:7815811

大小:1.05 MB

页数:61页

时间:2018-02-27

基于mtd的nandflash设备驱动底层实现原理分析_第1页
基于mtd的nandflash设备驱动底层实现原理分析_第2页
基于mtd的nandflash设备驱动底层实现原理分析_第3页
基于mtd的nandflash设备驱动底层实现原理分析_第4页
基于mtd的nandflash设备驱动底层实现原理分析_第5页
资源描述:

《基于mtd的nandflash设备驱动底层实现原理分析》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、基于MTD的NANDFLASH设备驱动底层实现原理分析(一)经过UBOOT初步的移植,Linux内核初步的移植,Linux内核总线设备模型的分析,等一系列痛苦的折腾,目的就是想更好的来分析下NANDFLASH的驱动。。大概一共历经了半个月的时间,慢慢的对NANDFLASH驱动程序有感觉了。。。一、MTD体系结构:Linux内核提供MTD子系统来建立FLASH针对Linux的统一、抽象接口。MTD将文件系统与底层的FLASH存储器进行隔离。     引入MTD后Linux系统中对FLASH的设备驱动分为4层   设备节点:用户在/dev目录下使用mknod命令建立MTD字符设备节点(主设备号为

2、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字符设备                    driv

3、er/mtd/mtdpart.c支持mtd块设备Flash硬件驱动层:Flash硬件驱动层负责对Flash硬件的读、写和擦除操作。MTD设备的NorFlash芯片驱动位于drivers/mtd/chips/子目录下,NandFlash芯片的驱动则位于drivers/mtd/nand/子目录下。二、Linux内核中基于MTD的NANDFLASH驱动代码布局:在Linux2.6.35内核中,MTD源代码放在driver/mtd目录中,该目录中包含chips、devices、maps、nand、onenand、lpdrr、tests和ubi八个子目录。其中只有nand和onenand目录中的代码才

4、与NAND驱动相关,不过nand目录中的代码比较通用,而onenand目录中的代码相对于nand中的代码而言则简化了很多,它是针对三星公司开发的另一类Flash芯片,即OneNANDFlash。本文我们需要关注的代码是linux-2.6.35/drivers/mtd/nand目录中,在该目录中我们关心的文件如下:1、 nand_base.c:定义了NAND驱动中对NAND芯片最基本的操作函数和操作流程,如擦除、读写page、读写oob等。当然这些函数都只是进行一些default的操作,若你的系统在对NAND操作时有一些特殊的动作,则需要在你自己的驱动代码中进行定义,然后Replace这些de

5、fault的函数。2、 nand_bbt.c:定义了NAND驱动中与坏块管理有关的函数和结构体。3、 nand_ids.c:定义了两个全局类型的结构体:structnand_flash_devnand_flash_ids[]和structnand_manufacturersnand_manuf_ids[]。其中前者定义了一些NAND芯片的类型,后者定义了NAND芯片的几个厂商。NAND芯片的ID至少包含两项内容:厂商ID和厂商为自己的NAND芯片定义的芯片ID。当NAND驱动被加载的时候,它会去读取具体NAND芯片的ID,然后根据读取的内容到上述定义的nand_manuf_ids[]和nan

6、d_flash_ids[]两个结构体中去查找,以此判断该NAND芯片是那个厂商的产品,以及该NAND芯片的类型。若查找不到,则NAND驱动就会加载失败,因此在开发NAND驱动前必须事先将你的NAND芯片添加到这两个结构体中去(其实这两个结构体中已经定义了市场上绝大多数的NAND芯片,所以除非你的NAND芯片实在比较特殊,否则一般不需要额外添加)。值得一提的是,nand_flash_ids[]中有三项属性比较重要,即pagesize、chipsize和erasesize,驱动就是依据这三项属性来决定对NAND芯片进行擦除,读写等操作时的大小的。其中pagesize即NAND芯片的页大小,一般为

7、256、512或2048;chipsize即NAND芯片的容量;erasesize即每次擦除操作的大小,通常就是NAND芯片的block大小。4、 nand_ecc.c:定义了NAND驱动中与softewareECC有关的函数和结构体,若你的系统支持hardwareECC,且不需要softwareECC,则该文件也不需理会。上面这些内容我是Copy别人的我觉得写得太好了,因为一开始我真的很迷茫,在nand目录

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。