linux nand闪存驱动编写

  

很长一段时间,快闪记忆体都是嵌入式的标配产品.nand flash价格便宜,存储量大,适用于很多的场景。现在很普及的ssd,上面的存储模块其实也是由一块一块快闪记忆体构成的。对于linux嵌入式来说,开始uboot的加载是硬件完成的,中期的内核加载是由uboot中的nand闪存驱动完成的,而后期的rootfs加载,这就要靠内核自己来完成了。当然,这次还是以三星s3c芯片为例进行说明。

  

1, nand闪存驱动在什么地方,可以从drviers mtd/Makefile来看

        obj-y +=/nand芯片/lpddr/地图/设备/>   配置MTD_NAND_S3C2410   三态“三星S3C soc NAND Flash支持”   取决于>   obj - $ (CONFIG_MTD_NAND_S3C2410) +=s3c2410。o      

4,查看s3c2410.c文件,看看基本结构构成

        静态结构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(信息、nmtd、集);之前      

6,之所以从中摘出了s3c2410_nand_init_chip这个函数,是因为里面进行了函数注册

  

类似的函数还有s3c2410_nand_update_chip函数

        芯片→write_buf=s3c2410_nand_write_buf;   芯片→read_buf=s3c2410_nand_read_buf;   芯片→select_chip=s3c2410_nand_select_chip;   芯片→chip_delay=50;   nand_set_controller_data(芯片,nmtd);=设置芯片→选项→选项;   芯片→控制器=,信息→控制器;   开关(信息→得){   案例TYPE_S3C2410:   芯片→IO_ADDR_W=规则+ S3C2410_NFDATA;   信息→sel_reg=规则+ S3C2410_NFCONF;   信息→sel_bit=S3C2410_NFCONF_nFCE;   芯片→cmd_ctrl=s3c2410_nand_hwcontrol;   芯片→dev_ready=s3c2410_nand_devready;   打破;      案例TYPE_S3C2440:   芯片→IO_ADDR_W=规则+ S3C2440_NFDATA;   信息→sel_reg=规则+ S3C2440_NFCONT;   信息→sel_bit=S3C2440_NFCONT_nFCE;   芯片→cmd_ctrl=s3c2440_nand_hwcontrol;   芯片→dev_ready=s3c2440_nand_devready;   芯片→read_buf=s3c2440_nand_read_buf;   芯片→write_buf=s3c2440_nand_write_buf;   打破;   案例TYPE_S3C2412:   芯片→IO_ADDR_W=规则+ S3C2440_NFDATA;   信息→sel_reg=规则+ S3C2440_NFCONT;   信息→sel_bit=S3C2412_NFCONT_nFCE0;   芯片→cmd_ctrl=s3c2440_nand_hwcontrol;   芯片→dev_ready=s3c2412_nand_devready;   如果(readl(海军学校规则+ S3C2410_NFCONF),S3C2412_NFCONF_NANDBOOT)   dev_info(信息→设备,“系统启动从NAND \ n”);   打破;   }   之前      

7,抓住了函数接口,就找到了基本逻辑。

  

对于框架来说,它不关心你的代码如何实现。只要你按照它的接口写,就能让上层正常获得数据.platform, usb, pci这都是一种接口形式,具体实现还要按照各个具体功能模块来实现才行。

  

8,为什么我们都用s3c芯片进行举例

  

因为它用的场景最多,学习资料最全,对于新手来说,这会少很多麻烦。

  

9,这个驱动依赖的内核版本是什么

  

这里最有的代码都是按照最新4.16的版本进行分析的,大家可以直接查看这里的地址。

  

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

linux nand闪存驱动编写