linux驱动编写(nand flash驱动)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
很长一段时间,nand flash都是嵌入式的标配产品。nand flash价格便宜,存储量大,适用于很多的场景。现在很普及的ssd,上面的存储模块其实也是由一块一块nand flash构成的。对于linux嵌入式来说,开始uboot的加载是硬件完成的,中期的kernel加载是由uboot中的nand flash驱动完成的,而后期的rootfs加载,这就要靠kernel自己来完成了。当然,这次还是以三星s3c芯片为例进行说明。
1、nand flash驱动在什么地方,可以从drviers/mtd/Makefile来看
obj-y += chips/ lpddr/ maps/ devices/ nand/ onenand/ tests/
2、nand在mtd下面,是作为一个单独目录保存的,这时应该查看nand下的Kconfig
config MTD_NAND_S3C2410tristate "NAND Flash support for Samsung S3C SoCs"depends on ARCH_S3C24XX || ARCH_S3C64XXhelpThis enables the NAND flash controller on the S3C24xx and S3C64xxSoCsNo board specific support is done by this driver, each boardmust advertise a platform_device for the driver to attach.config MTD_NAND_S3C2410_DEBUGbool "Samsung S3C NAND driver debug"depends on MTD_NAND_S3C2410helpEnable debugging of the S3C NAND driverconfig MTD_NAND_S3C2410_CLKSTOPbool "Samsung S3C NAND IDLE clock stop"depends on MTD_NAND_S3C2410default nhelpStop the clock to the NAND controller when there is no chipselected to save power. This will mean there is a small delaywhen the is NAND chip selected or released, but will saveapproximately 5mA of power when there is nothing happening.
3、不难发现,MTD_NAND_S3C2410才是那个真正的macro,尝试在Makefile找文件
obj-$(CONFIG_MTD_NAND_S3C2410) += s3c2410.o
4、查看s3c2410.c文件,看看基本结构构成
static struct platform_driver s3c24xx_nand_driver = {.probe = s3c24xx_nand_probe,.remove = s3c24xx_nand_remove,.suspend = s3c24xx_nand_suspend,.resume = s3c24xx_nand_resume,.id_table = s3c24xx_driver_ids,.driver = {.name = "s3c24xx-nand",.of_match_table = s3c24xx_nand_dt_ids,},
};module_platform_driver(s3c24xx_nand_driver);
5、继续分析s3c24xx_nand_probe函数
s3c2410_nand_init_chip(info, nmtd, sets);
6、之所以从中摘出了s3c2410_nand_init_chip这个函数,是因为里面进行了函数注册
类似的函数还有s3c2410_nand_update_chip函数
chip->write_buf = s3c2410_nand_write_buf;chip->read_buf = s3c2410_nand_read_buf;chip->select_chip = s3c2410_nand_select_chip;chip->chip_delay = 50;nand_set_controller_data(chip, nmtd);chip->options = set->options;chip->controller = &info->controller;switch (info->cpu_type) {case TYPE_S3C2410:chip->IO_ADDR_W = regs + S3C2410_NFDATA;info->sel_reg = regs + S3C2410_NFCONF;info->sel_bit = S3C2410_NFCONF_nFCE;chip->cmd_ctrl = s3c2410_nand_hwcontrol;chip->dev_ready = s3c2410_nand_devready;break;case TYPE_S3C2440:chip->IO_ADDR_W = regs + S3C2440_NFDATA;info->sel_reg = regs + S3C2440_NFCONT;info->sel_bit = S3C2440_NFCONT_nFCE;chip->cmd_ctrl = s3c2440_nand_hwcontrol;chip->dev_ready = s3c2440_nand_devready;chip->read_buf = s3c2440_nand_read_buf;chip->write_buf = s3c2440_nand_write_buf;break;case TYPE_S3C2412:chip->IO_ADDR_W = regs + S3C2440_NFDATA;info->sel_reg = regs + S3C2440_NFCONT;info->sel_bit = S3C2412_NFCONT_nFCE0;chip->cmd_ctrl = s3c2440_nand_hwcontrol;chip->dev_ready = s3c2412_nand_devready;if (readl(regs + S3C2410_NFCONF) & S3C2412_NFCONF_NANDBOOT)dev_info(info->device, "System booted from NAND\n");break;}
7、抓住了函数接口,就找到了基本逻辑。
对于框架来说,它不关心你的代码如何实现。只要你按照它的接口写,就能让上层正常获得数据。platform、usb、pci这都是一种接口形式,具体实现还要按照各个具体功能模块来实现才行。
8、为什么我们都用s3c芯片进行举例
因为它用的场景最多,学习资料最全,对于新手来说,这会少很多麻烦。
9、这个驱动依赖的kernel版本是什么
这里最有的代码都是按照最新4.16的版本进行分析的,大家可以直接查看这里的地址。
linux驱动编写(nand flash驱动)相关推荐
- linux用户空间flash驱动,全面掌握Linux驱动框架——字符设备驱动、I2C驱动、总线设备驱动、NAND FLASH驱动...
原标题:全面掌握Linux驱动框架--字符设备驱动.I2C驱动.总线设备驱动.NAND FLASH驱动 字符设备驱动 哈~ 这几天都在发图,通过这种方式,我们希望能帮大家梳理学过的知识,全局的掌握Li ...
- 《Linux驱动:nand flash驱动看这一篇就够了》
文章目录 一,前言 二,硬件电路 2.1 Nand flash相关 2.2 S3c2440相关 2.3 Nand flash 位反转 三,Nand flash驱动框架 四,S3c2440 Nand F ...
- nand flash 经典 全面 ------如何编写Linux下Nand Flash驱动
Crifan Li 摘要 本文先解释了Nand Flash相关的一些名词,再从Flash硬件机制开始,介绍到Nand Flash的常见的物理特性,且深入介绍了Nand Flash的一些高级功能,然后开 ...
- 如何编写linux下nand flash驱动
http://www.cnblogs.com/sankye/articles/1638852.html 向作者Sankye致敬 [编写驱动之前要了解的知识] 1. 硬件特性: [Flash ...
- 十八、Linux驱动之nor flash驱动
1. 基本概念 NOR FLASH是很常见的一种存储芯片,数据掉电不会丢失.NOR FLASH支持Execute On Chip,即程序可以直接在FLASH片内执行(这意味着存储在NOR FLASH上 ...
- Nand flash驱动的编写与移植
1 Nand flash工作原理 S3C2410板的Nand Flash支持由两部分组成:Nand Flash控制器(集成在S3C2410 CPU)和Nand Flash存储 芯片(K9F12 ...
- Linux MTD架构下的nand flash驱动详解
转载自:http://blog.csdn.net/wang_zheng_kai/article/details/18988521 有了前面的基础(Nandflash详解:https://blog.cs ...
- ARM9 2410移植之Nand flash 驱动的编写与移植
1 Nand flash 工作原理 S3C2410 板的Nand Flash 支持由两部分组成:Nand Flash 控制器(集成在S3C2410 CPU)和Nand Flash 存储 芯片(K9F1 ...
- [转]ARM9 2410移植之Nand flash 驱动的编写与移植
1 Nand flash 工作原理 S3C2410 板的Nand Flash 支持由两部分组成:Nand Flash 控制器(集成在S3C2410 CPU)和Nand Flash 存储 芯片(K9F1 ...
最新文章
- keepalived 高可用日志说明及实战配置日志路径
- 订货(bzoj 2424)
- 1.3 安装Oracle遇到的问题-yum更新配置
- 一个最简单的例子学会使用nodejs redis库进行数据库操作
- 关于Xcode 7.3 7.3.1 断点 卡死 无限菊花
- oracle io lost,磁盘IO故障
- 【LeetCode】剑指 Offer 39. 数组中出现次数超过一半的数字
- 安装php扩展后,执行时找不到扩展 class xxx no found
- WebRTC-集成qsv硬解码实现
- OCRKit Pro for mac (OCR文字识别工具)
- 【毕业季】这四年一路走来都很值得——老学长の忠告
- win10操作系统如何整理桌面
- 【读书笔记】--少有人走的路①:心智成熟的旅程
- Lucene打分公式详解(TFIDFSimilarity)
- 川崎机器人f控制柜接线图_川崎机器人PROFINET总线通信图文教程
- 【Houdini18.5/入门】程序化uv01-将uv壳布局在指定范围
- 网页游戏HTML5--爱心鱼实现过程
- opencv 实现导向滤波
- GPS北斗定位模块如何应用于智慧农业
- 任正非签发文章,时隔五年再被翻出