linux NAND驱动之一:内核中的NAND代码布局
来源:互联网 发布:sql增删改查语句 编辑:程序博客网 时间:2024/06/10 00:23
在Linux 内核中,MTD 源代码放在/driver/mtd 目录中,该目录中包含chips 、devices 、maps 、nand 、onenand 和ubi 六个子目录。其中只有nand 和onenand 目录中的代码才与NAND 驱动相关,不过nand 目录中的代码比较通用,而onenand 目录中的代码相对于nand 中的代码而言则简化了很多,它是针对三星公司开发的另一类Flash芯片,即OneNAND Flash,是一种较常用NAND先进的FLASH吧,只是目前似乎普及率并不高,本文也将不做讨论。
因此,若只是开发基于MTD 的NAND 驱动程序,那么我们需要关注的代码就基本上全在drivers/mtd/nand 目录中了,而该目录中也不是所有的代码文件都与我们将要开发的NAND 驱动有关,除了Makefile 和Kconfig 之外,其中真正与NAND 驱动有关的代码文件只有6 个,即:
1)nand_base.c :
定义了NAND 驱动中对NAND 芯片最基本的操作函数和操作流程,如擦除、读写page 、读写oob 等。当然这些函数都只是进行一些default 的操作,若你的系统在对NAND 操作时有一些特殊的动作,则需要在你自己的驱动代码中进行定义,然后Replace 这些default 的函数。
2)nand_bbt.c :
定义了NAND 驱动中与坏块管理有关的函数和结构体。
3)nand_ids.c :
定义了两个全局类型的结构体:struct nand_flash_dev nand_flash_ids[ ] 和struct nand_manufacturers nand_manuf_ids[ ] 。其中前者定义了一些NAND 芯片的类型,后者定义了NAND 芯片的几个厂商。NAND 芯片的ID 至少包含两项内容:厂商ID 和厂商为自己的NAND 芯片定义的芯片ID 。当NAND 驱动被加载的时候,它会去读取具体NAND 芯片的ID ,然后根据读取的内容到上述定义的nand_manuf_ids[ ] 和nand_flash_ids[ ] 两个结构体中去查找,以此判断该NAND 芯片是那个厂商的产品,以及该NAND 芯片的类型。若查找不到,则NAND 驱动就会加载失败,因此在开发NAND 驱动前必须事先将你的NAND 芯片添加到这两个结构体中去(其实这两个结构体中已经定义了市场上绝大多数的NAND 芯片,所以除非你的NAND 芯片实在比较特殊,否则一般不需要额外添加)。
值得一提的是,nand_flash_ids[ ] 中有三项属性比较重要,即pagesize 、chipsize 和erasesize ,驱动就是依据这三项属性来决定对NAND 芯片进行擦除,读写等操作时的大小的。其中pagesize 即NAND 芯片的页大小,一般为256 、512 或2048 ;chipsize 即NAND 芯片的容量;erasesize 即每次擦除操作的大小,通常就是NAND 芯片的block 大小。
4)nand_ecc.c :
定义了NAND 驱动中与softeware ECC 有关的函数和结构体,若你的系统支持hardware ECC ,且不需要software ECC ,则该文件也不需理会。
5)nandsim.c :
定义了Nokia 开发的模拟NAND 设备,默认是Toshiba NAND 8MiB 1,8V 8-bit (根据ManufactureID ),开发普通NAND 驱动时不用理会。
6)diskonchip.c :
定义了片上磁盘(DOC) 相关的一些函数,开发普通NAND 驱动时不用理会。
除了上述六个文件之外,nand 目录中其他文件基本都是特定系统的NAND 驱动程序例子,但看来真正有参考价值的还有cafe_nand.c 和s3c2410.c 两个,而其中又尤以cafe_nand.c 更为详细,另外,nand 目录中也似乎只有cafe_nand.c 中的驱动程序在读写NAND 芯片时用到了DMA 操作。
- linux NAND驱动之一:内核中的NAND代码布局
- linux NAND驱动之一:内核中的NAND代码布局
- linux NAND驱动之一:内核中的NAND代码布局
- linux NAND驱动之一:内核中的NAND代码布局
- linux NAND驱动之一:内核中的NAND代码布局
- linux NAND驱动之一:内核中的NAND代码布局
- Linux内核的Nand驱动流程分析
- Linux内核的Nand驱动流程分析
- Linux内核的Nand驱动流程分析
- Linux内核的Nand驱动流程分析
- Linux内核的Nand驱动流程分析
- Linux NAND FLASH驱动代码分析
- Linux NAND FLASH驱动代码分析
- Linux NAND FLASH驱动代码分析
- Linux NAND FLASH驱动代码分析
- Linux NAND FLASH驱动代码分析
- linux nand 驱动
- MTD系列 - linux内核底层nand驱动解析
- 如何培养软件工程人才——参加“第一届高等学校软件工程人才培养高峰论坛”有感
- Android异步加载图片详解之方式一(2)
- 触发器中New与Old的区别
- C#数字千分位问题
- 使用Xcode和Instruments调试解决iOS内存泄露
- linux NAND驱动之一:内核中的NAND代码布局
- 使用libvirt创建kvm虚拟机
- 程序员面试100题之十八 十四 两个栈实现队列
- Android异步加载图片详解之方式一(1)
- Twitter的照片滤镜功能可能已经上线,内部员工正在对IOS和Android平台应用程序上进行测试
- hoj1867经理的烦恼
- EL属性范围
- Struts 2 Data Journey
- Ubuntu下进行网络抓包