项目中用到了spi flash芯片MX25L25635E,之前在uboot下简单分析了驱动代码,调试该flash擦除的bug,一直没有时间分
析内核中关于该芯片的驱动,以下是对该芯片驱动的一个简单分析:
1、先粘贴一些flash的理论部分:

MTD层为NOR FLASH和NAND FLASH设备提供统一接口。MTD将文件系统与底层FLASH存储器进行了隔离。
如图所示,MTD设备通常可分为四层,从上到下依次是:设备节点、MTD设备层、MTD原始设备层、硬件驱动层。
Flash硬件驱动层:(相当于spi driver/i2c driver)Flash硬件驱动层负责对Flash硬件的读、写和擦除操作。MTD设备的Nand Flash芯片的驱动则drivers/mtd/nand/子目录下,Nor Flash芯片驱动位于drivers/mtd/chips/子目录下。
MTD原始设备层:(相当于spi master/i2c client)用于描述MTD原始设备的数据结构是mtd_info,它定义了大量的关于MTD的数据和操作函数。其中mtdcore.c: MTD原始设备接口相关实现,mtdpart.c : MTD分区接口相关实现。
MTD设备层:基于MTD原始设备,linux系统可以定义出MTD的块设备(主设备号31)和字符设备(设备号90)。其中mtdchar.c : MTD字符设备接口相关实现,mtdblock.c : MTD块设备接口相关实现。
设备节点:通过mknod在/dev子目录下建立MTD块设备节点(主设备号为31)和MTD字符设备节点(主设备号为90)。通过访问此设备节点即可访问MTD字符设备和块设备。
2、关于

本文分析了Linux内核中针对SPI Flash芯片M25P80的驱动程序,包括硬件驱动层的spi_driver注册、MTD原始设备层的擦写操作接口以及MTD设备层的文件操作接口。驱动调用流程从设备节点到mtd设备层,再到硬件驱动层,实现了对SPI Flash的读写擦除功能。
最低0.47元/天 解锁文章
771

被折叠的 条评论
为什么被折叠?



