博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MTD nor flash (二) linux mtd 架构
阅读量:4285 次
发布时间:2019-05-27

本文共 3595 字,大约阅读时间需要 11 分钟。

  • 参考代码 -
linux_4.0/drivers/mtd
  • mtd 设备类型
//用来填充 mtd_info 结构体中的 type 成员include/mtd/mtd-abi.h#define MTD_ABSENT      0                                                           #define MTD_RAM         1                                                           #define MTD_ROM         2                                                           #define MTD_NORFLASH        3                                                       #define MTD_NANDFLASH       4   /* SLC NAND */                                      #define MTD_DATAFLASH       6                                                       #define MTD_UBIVOLUME       7                                                       #define MTD_MLCNANDFLASH    8   /* MLC NAND (including TLC) */
  • mtd 目录
devices	nor flash 驱动// 很多	ram flash 驱动// 很多	nandflash 驱动 // 一个	dataflash 驱动 // 3个	不基于mapping的驱动spi-nor	nor flash 驱动 //  1个 //spi 接口	spi-nor.c // spi nor 的封装层  // 提供 spi_nor_scan // spi_nor_scan 提供了 组装 mtd_info 的过程 	不基于 mapping的驱动chips	JEDEC mapping , 对应一个 struct mtd_chip_driver	CFI  mapping , 对应一个 struct mtd_chip_driver	ram mapping , 对应一个 struct mtd_chip_driver	rom mapping , 对应一个 struct mtd_chip_driver		提供mapping	register_mtd_chip_driver 注册 struct mtd_chip_driverlpddr	对 lpddr 的支持, lpddr 是 一种ram ,mtd 架构也包括ram	其中包括 一个驱动 Support for LPDDR2-NVM flash chips	提供 lpddr mapping	maps	基于 mapping 的驱动	通过do_map_probe接口,返回 mtd_info 结构体,然后在通过  mtd_device_register 或者 mtd_device_parse_register 注册 mtd 设备	do_map_probe 查询注册 的 各种 struct mtd_chip_driver ,然后调用 struct mtd_chip_driver 中 probe 成员,返回 mtd_info 结构体nand	nand_scan_tail 封装了 组成 mtd_info 的过程	nand$ grep type * -nr  |grep "="  |grep MTD_	nand_base.c:4143:       mtd->type = nand_is_slc(chip) ? MTD_NANDFLASH : MTD_MLCNANDFLASH;	这个文件夹内 提供 了 MTD_NANDFLASH 类 和 MTD_MLCNANDFLASH 类的 驱动 及 基础文件	接口 有gpio接口(CONFIG_MTD_NAND_GPIO)onenand	drivers/mtd/onenand$ grep type * -nr  |grep "="  |grep MTD_	onenand_base.c:4069:    mtd->type = ONENAND_IS_MLC(this) ? MTD_MLCNANDFLASH : MTD_NANDFLASH;	ubi	gluebi.c:318:   mtd->type = MTD_UBIVOLUME;tests	mtd 测试 模块,以模块形式 提供 ,insmod 即可运行.
  • mtd 主要函数
// 注册 mtd 设备mtd_device_registermtd_device_parse_register// 注册 mtd chip driverregister_mtd_chip_driver// 获取 mtd chip driverget_mtd_chip_driver// 填充 mtd_infodo_map_probe
  • mtd spi flash 相关函数
// 填充 mtd spi flash 相关的 mtd_info 结构体spi_nor_scan
MTD设备层 			(字符设备)mtdchar.c         (块设备)mtdblock.cMTD原始设备层 		mtdcore.c 		  mtdpart.cmtd驱动(驱动人员)	linux_4.0/drivers/mtd/devices/m25p80.c(典型的spi flash设备)设备节点:通过mknod在/dev子目录下建立MTD块设备节点(主设备号为31)和MTD字符设备节点(主设备号为90)。通过访问此设备节点即可访问MTD字符设备和块设备 MTD设备层:基于MTD原始设备,linux系统可以定义出MTD的块设备(主设备号31)和字符设备(设备号90)。其中mtdchar.c :  MTD字符设备接口相关实现,mtdblock.c : MTD块设备接口相关实现。MTD原始设备层:用于描述MTD原始设备的数据结构是mtd_info,它定义了大量的关于MTD的数据和操作函数。其中mtdcore.c:  MTD原始设备接口相关实现,mtdpart.c :  MTD分区接口相关实现。Flash硬件驱动层:Flash硬件驱动层负责对Flash硬件的读、写和擦除操作。MTD设备的Nand Flash芯片的驱动则drivers/mtd/nand/子目录下,Nor Flash芯片驱动位于drivers/mtd/chips/子目录下。
如果这样子分类的话,那么 在 drivers/mtd 下的 子文件夹 都属于 flash硬件驱动层.这些 硬件驱动层的任务就是封装 mtd_info ,然后通过  MTD原始设备层 的函数 (mtd_device_register 或者 mtd_device_parse_register) 注册 mtd 设备内核 在 drivers/mtd 下的 子文件夹 提供了 mapping 机制(do_map_probe) 和 nand_base.c(nand_scan_tail )中 提供了 spi-nor.c(spi_nor_scan) 来提供 mtd_info. 这些内核实现的部分也属于 Flash硬件驱动层 的 一部分,可以说内核实现了 Flash硬件驱动层 的一部分,更多的减轻了驱动开发者的劳动强度.mtd 目录下的普通文件呢?	一部分 是 mtd 的 核心部分,必须编译 mtdcore.o mtdsuper.o mtdconcat.o mtdpart.o mtdchar.o	一部分 是 解析 mtd 的分区的 方法,选择性编译 ofpart.o  redboot.o cmdlinepart.o afs.o ar7part.o bcm63xxpart.o bcm47xxpart.o	另一部分 是 给用户空间提供接口的模块, 选择性编译 mtd_blkdevs.o mtdblock.o mtdblock_ro.o ftl.o nftlcore.o nftlmount.o inftlcore.o inftlmount.o rfd_ftl.o ssfdc.o sm_ftl.o mtdoops.o mtdswap.o

转载地址:http://mligi.baihongyu.com/

你可能感兴趣的文章
2014校园招聘_百度2014校园招聘
查看>>
2014校园招聘_华为2014校园招聘
查看>>
2014校园招聘_腾讯2014校园招聘
查看>>
ExtJs4.2学习--Ext.tab.Panel 选项卡
查看>>
mybatis+spring+struts2框架整合
查看>>
你真正理解java的字符类型了吗?(bit,byte,short,int等字符类型)
查看>>
数据挖掘开源软件:WEKA基础操作
查看>>
Python一些容易忽略的知识
查看>>
Ubuntu(-13.10)中安装JDK图文详解教程
查看>>
Hadoop2.2.0单节点安装和配置环境图文详解
查看>>
数据挖掘学习笔记--决策树C4.5
查看>>
数据挖掘学习笔记之人工神经网络(一)
查看>>
数据挖掘学习笔记之人工神经网络(二)
查看>>
人工神经网络关键核心知识点
查看>>
贝叶斯学习--极大后验概率假设和极大似然假设
查看>>
贝叶斯学习--极大后验假设学习
查看>>
朴素贝叶斯分类器
查看>>
贝叶斯学习举例--学习分类文本
查看>>
hadoop HDFS原理基础知识
查看>>
数据挖掘十大算法----EM算法(最大期望算法)
查看>>