在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代码布局相关推荐

  1. linux nand 坏块_linux内核中对nand的坏块管理

    闲来无事,追踪了下linux内核中对nand的坏块管理代码.大致记录一下. 内核中对nand的坏块管理是在nand的驱动中实现的,一般情况下,我们在实现nand控制器的驱动时不用考虑坏块的管理,这些机 ...

  2. Linux驱动模块编译进内核中

    BQ27501驱动编译进内核 一.       驱动程序编译进内核的步骤 在 linux 内核中增加程序需要完成以下三项工作: 1. 将编写的源代码复制到 Linux 内核源代码的相应目录: 2. 在 ...

  3. A40i使用笔记:编译驱动到内核中调用(ubuntu和A40i平台)

    一.前言 最近因个人需求和工作需求,准备入坑linux驱动篇,学习了几节课程,简单了解了linux驱动流程,本章前期现介绍开发linux驱动必备的工具,否则后续学习很困难 二.环境 notepadqq ...

  4. Linux进程管理:内核中的优先级继承互斥(rtmutex.h):防止优先级反转

    目录 Priority inheritance in the kernel 译文 Priority inheritance in the kernel https://lwn.net/Articles ...

  5. X64驱动:内核中的文件回调

    无论在用户层还是内核层,操作文件的流程基本一致,除了在API函数上的区别(用户层调用用户层API,内核层调用内核API)以外其他基本一致,先讲解一下文件系统执行的流程. 以NTFS文件系统为例:假设我 ...

  6. 内核中架构相关代码简介

    以下内容源于朱友鹏<物联网大讲堂>课程的学习,如有侵权,请告知删除. 1.内核代码基本分为3块 (1)arch:本目录下全是cpu架构有关的代码 (2)drivers:本目录下全是硬件的驱 ...

  7. linux声卡驱动源码,Linux声卡驱动移植和測试(示例代码)

    一.分析驱动程序,依据开发板改动代码 代码太长,就不贴了,几个注意点: 1. 查看开发板原理图和S3C2410的datasheet,UDA1341的L3MODE.L3DATA.L3CLOCK分别与S3 ...

  8. 谷歌浏览器32位安装包_谷歌浏览器发布紧急安全更新修复Blink内核中的任意代码执行漏洞...

    上月底谷歌浏览器推送紧急安全更新对浏览器漏洞进行修复,当时谷歌浏览器博客并未公布漏洞的具体细节信息. 蓝点网当时也在文章中称通常这种不公布漏洞的更新,都是比较严重的问题因此只有等多数用户修复后才会公开 ...

  9. Linux 网卡驱动sk_buff内核源码随笔

    这几天在调试有关网卡驱动的东西,有很多地方不清楚.有关网卡驱动部分主要有两个很重要的结构体:struct net_device 和struct sk_buff. 驱动大部分都是围绕这两个东西进行操作的 ...

最新文章

  1. 计算机控制cs,计算机控制
  2. 计算机电路的基本罗门,模拟电路设计经验12条
  3. php打开rs232,php_ser_5.2.0-5.2.17
  4. GitH2月份开源项目
  5. oracle执行策略是什么意思,郁闷的问题:oracle pl/sql 和 pro c中的执行策略
  6. c语言编程打印格式输出总结
  7. Freepiano如何使用sf2音源,sfark如何转换至sf2?
  8. [BZOJ5064] [HDU3652] B-number 数位DP
  9. 生成1-100随机数并进行猜测
  10. TP6使用守护进程完成队列任务
  11. 副业案例一:变现100万美元的国外网课销售漏斗模型案例
  12. c#取消word修订痕迹_C# 操作Word批注(一) 插入、修改、删除Word批注
  13. 数据库和表的基本操作
  14. 用3D再现2D偶像的可爱,Cygames【偶像大师 灰姑娘女孩】开发示例
  15. CentOS7安装Nginx及配置
  16. Before start of result set报错
  17. oracle smon 执行记录,Oracle SMON进程中系统监视进程SMON
  18. php定义json类型数据,PHP中使用json数据格式定义字面量对象的方法_PHP
  19. noip模拟赛 三角形
  20. PS3模拟器使用教程

热门文章

  1. 12306小卡片-鸿蒙智慧出行
  2. linux 标准输出流管道,初学Linux之标准 I/O 和管道
  3. hibernate oracle 插入 clob,Oracle CLOB在Hibernate框架下的一次应用
  4. Pycharm / IDEA 局部搜索功能,调试时搜索变量值,或是搜索文件名等局部搜索方法
  5. opencv java水平投影_OpenCV实现图像在水平方向上投影
  6. docker 日志_解决docker容器日志导致主机磁盘空间满了的情况
  7. 工厂员工晋升机制_维修厂如何设置员工晋升机制?
  8. PipeCAD之管道标准库PipeStd(3)
  9. 201904:Action recognition based on 2D skeletons extracted from RGB videos
  10. oracle9i的erp数据库无法正常关闭的解决方法。