linux flash设备驱动

一、概要

存储设备市面上常见的有nandflash,norflash,emmc这三类
1.1、nandflash
NAND Flash式东芝在1989年的国际固态电路研讨会(ISSCC)上发表的, 要在NandFlash上面读写数据,要外部加主控和电路设计。。NAND Flash具有较快的抹写时间, 而且每个存储单元的面积也较小,这让NAND Flash相较于NOR Flash具有较高的存储密度与较低的每比特成本。同时它的可抹除次数也高出NOR Flash十倍。然而NAND Flash 的I/O接口并没有随机存取外部地址总线,它必须以区块性的方式进行读取,NAND Flash典型的区块大小是数百至数千比特。
1.2、norflash
NOR Flash需要很长的时间进行抹写,但是它提供完整的寻址与数据总线,并允许随机存取存储器上的任何区域,这使的它非常适合取代老式的ROM芯片。当时ROM芯片主要用来存储几乎不需更新的代码,例如电脑的BIOS或机上盒(Set-top Box)的固件。NOR Flash可以忍受一万到一百万次抹写循环,它同时也是早期的可移除式快闪存储媒体的基础。CompactFlash本来便是以NOR Flash为基础的,虽然它之后跳槽到成本较低的 NAND Flash。
norflash可读,可写,同时程序可以在nor上运行

1.3、emmc
emmc由一个嵌入式存储解决方案组成,带有MMC(多媒体卡)接口、快闪存储器设备及主控制器。所有都在一个小型的BGA 封装。接口速度高达每秒52MBytes,eMMC具有快速、可升级的性能。同时其接口电压可以是1.8V或者是3.3V

二、设备驱动框架

linux的flash设备驱动框架如下图所示、
在这里插入图片描述
2.1、硬件驱动层
硬件驱动层主要完成flash的硬件操作,主要是读,写,擦除等操作。
2.2、MTD原始设备层
主要提供了对flash设备通用操作函数以及提供特定的flash操作,比如分区。
2.3、MTD设备层
flash的设备驱动层支持字符设备驱动(major = 90,在mtdchar.c中实现)与块设备驱动(major = 30),
2.4、设备节点
就是为文件系统在/dev/下提供访问的节点。

数据结构框图如下所示、
在这里插入图片描述
猜测1:在mtd的原始设备层肯定有一个数组或者链表来供硬件驱动层注册或者添加(add_mtd_device)设备信息.同时对于flash类设备,肯定要提供分区功能(所谓分区,就是在整个flash上做一个数据信息标定),所以需要硬件驱动层将当前的分区信息存在在某一个表中,供上层来查询,修改。
猜测2:mtd原始设备层提供了设备的device数组和分区信息给谁勒,当然是"用户"了,这里的用户是mtd设备层,设备层使用这些信息来提供一个统一的,无须关系硬件的ops给文件系统了。
上面猜测对不对勒,我们来代码验证一下吧。

三、代码逻辑分析

晚上再写。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值