Linux 下 Nand Flash 驱动说明
?注册 driver_register通过 module_init(s3c2410_nand_init);注册 Nand Flash 驱动. 在 s3c2410_nand_init ()中通过 driver_register()注册 s3c2410_nand_driver 驱动程序,如下所示: static struct device_driver s3c2410_nand_driver = { .name????????? = "s3c2410-nand", .bus?????????? = &platform_bus_type,/* 在 drivers/base/platform.c 中定义 */ .probe???????? = s3c2410_nand_probe, .remove??????? = s3c2410_nand_remove, }; ? 探测设备 probe 在注册的 Nand Flash 驱动程序中,probe 方法为 s3c2410_nand_probe(). s3c2410_nand_probe()再调用 s3c24xx_nand_probe(). 在该函数中,把*info 作为 Nand Flash 驱动的私有数据结构,并通过 dev_set_drvdata(dev,info)把*info 保存在*device 的*driver_data 字段中.然后通过 clk_get(dev,"nand")获取 Nand Flash 的时钟资 源,clk_use(info->clk)增加时钟资源的使用计数,clk_enable(info->clk)开启资源.填写*info 的其它字段,其中包括:
4. 对当前 mtd 设备,调用 s3c2410_nand_init_chip()进行初始化. 5. 对当前 mtd 设备,调用 nand_scan()检测 Nand Flash 芯片,nand_scan()函数在 drivers/mtd/nand/nand_base.c 中 定义.该函数的作用是初始化 struct nand_chip 中一些方法,并从 Nand Flash 中读取芯片 ID,并初始化 struct mtd_info 中的方法. 6.? 对当前 mtd 设备,加入其分区信息. 7. 如果还有更多 mtd 设备,到 4 执行. ? ??初始化 Nand Flash 控制器 s3c2410_nand_inithw()函数会初始化 Nand Flash 控制器,通过设置 Nand Flash 控制寄存器(S3C2410_NFCONF)来 完成,这里最重要的是根据 S3C2410 的 PCLK 计算出 tacls,twrph0 以及 twrph1 值. ? 移除设备 s3c2410_nand_remove()当设备被移除时,被 device 核心驱动调用.它完成的主要工作如下:
2. 释放 mtd 设备信息. 3. 释放 clk 资源. 4. 通过 iounmap()取消映地址空间. 5. 释放申请的 I/O 内存资源. 6. 释放设备私有数据*info 的空间. ? ? ??Nand Flash 芯片初始化 s3c2410_nand_init_chip()初始化 struct nand_chip 中的一些主要字段以及方法.其中主要包括的方法有:
2. s3c2410_nand_devready(); 设备是否准备好
如果支持 ECC 硬件校验,还设置如下方法: ?
? 读 Nand Flash 当对 nand flash 的设备文件(nand flash 在/dev 下对应的文件)执行系统调用 read(),或在某个文件系统中对该 设备进行读操作时. 会调用 struct mtd_info 中的 read 方法,他们缺省调用函数为 nand_read(),在 drivers/mtd/nand/nand_base.c 中定义.nand_read()调用 nand_do_read_ecc(),执行读操作. 在 nand_do_read_ecc()函数中,主要完成如下几项工作:
? ?写 Nand Flash当对 nand flash 的设备文件(nand flash 在/dev 下对应的文件)执行系统调用 write(),或在某个文件系统中对该设备 进行读操作时,会调用 struct mtd_info 中 write 方法,他们缺省调用函数为 nand_write(),这两个函数在 drivers/mtd/nand/nand_base.c 中定义. nand_write()调用 nand_write_ecc(),执行写操作.在 nand_do_write_ecc()函数中,主要完成如下几项工作:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |