nandflash驱动框架

nandflash驱动框架


最上层肯定是应用程


——————————

app: open read write

________________

文件系统:文件系统是将对文件的读写转换为对块设备的读写

—————————

块设备驱动

块设备 : 知道怎么优化

——————

nandflash协议层:知道发什么来读写,擦除,识别

——————

硬件相关的代码  :知道怎么发命令,发地址,读写数据

————————

——————————

硬件



我们来看看内核的启动信息,从内核的启动信息我们找到那个文件,从那个文件分析


搜索s3c nand driver这句话



我们就从这个文件里面一路分析进去

我们可以从上面的图片看出,它先注册了一个平台驱动,根据总线设备驱动模型,在内核里面有个同名的平台设备


如果有就会调用probe函数


进入probe函数




初始化硬件

初始化芯片

会有个nand_scan_ident扫描

扫描完之后add_partition添加分区,


我们进入add_partition这个函数,它调用下面这个函数


我们来看看nand_scan_iden这个函数怎么扫描的


设置默认函数


获得flash类型

看看别人是怎么获得的


选中芯片


然后复位芯片,然后读芯片的ID

发什么命令呢 发NAND_CMD_READID,这个等于多少呢???


跟我们前面弄的一样的

然后读数据,第一个读到厂家ID,第二个读到设备ID


在这个nand_flash_ids数组里面比较这个id,我们来看看这个数组


我们可以看到我们的DC在这里面


我们nand_scan_ident是在   //driver/mtd/nand/nand_base.c里面实现的

这个文件是通用的,所有的nandflash都要发命令读到这些东西



我们在来看看我们的添加分区


在这里面又调用了


这个函数




我们看一下开发板下面的驱动


有字符设备,也有块设备。所以我们这个nandflash可以当作字符设备也可以当作块设备


我们只需要做硬件操作那块就行了,其余的别个已经帮我们做好了

以我们写了那么多驱动应该知道了

1.分配某个结构体

2.设置

3.硬件相关的设置

4.使用


这个结构体我们现在还不知道是什么东西,但我们可以看看例子程序,看看probe函数,三星写到代码都太啰嗦了,我们看atmel-nand.c的nandflash驱动

它是一个好的例子


这里有个nand_chip结构体


接着他又设置了这个结构体。这就是我们要找的结构体


所以我们的驱动就是

分配 设置nand_chip结构体

使用就用nand_scan_ident这个函数 扫描完之后在添加分区add_mtd_partitions,最后还是会到我们的add_mtd_device
我们来看看这个函数做了什么事情


对链表里的每一项,调用add函数。那mtd_notifiers这个链表在哪里设置

在这个函数里面注册 register_mtd_user


这个函数又被谁调用呢???

被mtdchar.c和mtdblock.c

这两个函数都注册了一个user


将mtdchar_notifier这个放到那个链表里面去,当它发现一个mtd设备的时候会调用链表里面的add函数


在mtdchar.c是这个函数被调用


在mtdblock.c是下面的函数被调用


我们先看mtdchar_notify_add这个函数,看看它做了什么事情,然而发现它是个空函数

但是看整个文件,其实就是一个字符设备驱动


然后看看块设备的add函数,看它做了什么事情


这里又有一个链表,对应链表里面每个成员,调用add_mtd,但是这个blktrans_majors又在哪里设置


在register_mtd_blktrans这个函数里面

注册mtd块传输


然后mtdblock.c又调用这个函数 mtdblock_ro.c也调用了

从名字上可以看 ro是只读的意思

我们看mtdblock.c就好了


这里有个add_mtd函数

这个函数有调用了下面这个函数


add_mtd_blktrans_dev又调用了


然后我们的alloc_disk就出来了

设置容量出来了



add_disk出来了


在nand_scan_ident这个函数之后有个


这个函数

这个函数里面


又有个这个,构造struct mtd_info *mtd结构体

相关文章

  译序:JWMediaPlayer是开源的网页使用的Flash播放器。本...
    Flash编程原理都是只能将1写为0,而不能将0写成1.所...
 上传setenvgatewayip192.168.1.1;setenvserverip192.168.1...
Error:FlashDownloadFailed-"Cortex-M3"出现一般有...
jPlayer是一个用于控制和播放mp3文件的jQuery插件。它在后台...
#ifndef__FONTUPD_H__#define__FONTUPD_H__#include"sy...