基于 MTD 的 NAND 驱动开发说明 大约用了两个礼拜不到的时间为公司的 IPcamera 系统写了基于 MTD 的 NAND 驱动(linux-2.6.22.10内 核),目前已可以在该驱动的支持下跑 cramfs 和 jffs2 文件系统,另 外,该驱动也可以同时支持small page(每页 512 Byte)和 big page(每页 2048 Byte)两种 NAND 芯片。在此整理一下与 NAND 驱 动相关的概念,结构体,驱动框架和流程,同时分析一下基于 MTD 的 NAND 驱动的部分函数,尤其是其中的 nand_scan()函数。(涉及到具体 NAND 芯片时,若不做说明,将以 small page 的 NAND 芯片为例。) 注:个人理解,有误难免!—— 笔者:曹荣荣 MTD 驱动程序是专门针对嵌入式 Linux 的 一种驱动程序,相对于常规块设备驱动程序(比如 PC中 的 IDE 硬盘)而言,MTD 驱动程序能更好的支持和管理闪存设备,因为它本身就是专为闪存设备 而设计的。具体地讲,基于 MTD 的 FLASH 驱动,承上可以很好地支持 cramfs,jffs2 和 yaffs 等文件系统,启下也能对 FLASH 的擦除,读写,FLASH 坏块以及损耗平衡进行很好的管理。所谓损耗平衡,是指对 NAND 的擦写不能总是集中在某一个或某几个 block 中,这是由 NAND 芯片有限的擦写次数的特性决定的。总之,在现阶段,要为 FLASH 设备开发 Linux 下的驱动程序,那么基于 MTD 的开发将几乎是省时又省力的唯一选择! 一、NAND 和 NOR 的区别 Google “Nand Flash 和 Nor Flash 的区别”。 简单点说,主要的区别就是: 1、 NAND 比 NOR 便宜;NAND 的容量比 NOR 大(指相同成 本);NAND 的擦写次数是 NOR的十倍;NAND 的擦除和写入速度比 NOR 快,读取速度比 NOR 稍 慢; 2、 NAND 和 NOR 的读都可以以字节为单位,但 NAND 的写以 page 为 单位,而 NOR 可以随机写每一个字节。NAND 和 NOR 的擦除都以 block 为单位,但一般 NAND 的 block 比 NOR 的 block 小。另外,不管是 NAND 还 是 NOR,在写入前,都必须先进行擦除操作,但是 NOR 在擦除前要先写0; 3、 NAND 不能在片内运行程序,而 NOR 可以。但目前很多 CPU 都可以在上电时,以硬件的方式先将 NAND 的第一个 block 中的内容(一般是程 序代码,且也许不足一个 block,如 2KB 大小)自动 copy 到 ram 中,然后再运行,因此只要 CPU 支持,NAND 也可以当成启动设备...