已阅读5页,还剩25页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第24章 Flash设备驱动 Flash存储储器是近几年来发发展最快的存储设备储设备 ,通常也 称作闪闪存。Flash属于EEPROM(电电可擦除可编编程只读读存储储 器),是一类类存取速度很高的存储储器。它既有ROM断电电可 保存数据的特点,又有易于擦写的特点。Flash可以在断电电 的情况下长长期保存信息,因此被广泛的应应用在PC机的BIOS 和嵌入式系统统的存储设备储设备 。本章主要内容如下: Flash存储储器的硬件结结构和存储储原理 Linux内核MTD设备设备 支持 Flash编编程框架 Flash驱动实驱动实 例 24.1 Linux Flash驱动结构 Linux内核对对Flash存储储器有很好的支持。内核设计设计 了 一个MTD结结构支持Flash设备设备 ,用户户只需要按照MTD的要 求设设置Flash设备设备 的参数并且提供驱动驱动 就可以让让Flash设备设备 很好的工作。本节节介绍绍内核MTD的系统结统结 构。 24.1.1 什么是MTD MTD是英文Memory Technology Device的缩缩写,中文 可以直接译为译为 内存技术设备术设备 。MTD是Linux内核为为支持闪闪 存设备设备 的一个驱动驱动 中间层间层 。对对内核其他部分来说说,MTD屏 蔽了闪闪存设备设备 的细节细节 ;对对于闪闪存设备驱动设备驱动 来说说,只需要向 MTD中间层间层 提供接口就可以向内核提供闪闪存设备设备 支持。 Linux内核提供了一些与MTD相关的术语术语 ,解释释如下: JEDEC:J CFI: OOB: ECC: EraseSize: BusWidth: NAND: NOR: 24.1.2 MTD系统结构 Linux内核MTD设备设备 相关代码码在drivers/mtd目录录下, 设计设计 MTD的目的是让让新的闪闪存设备设备 使用更简单简单 。MTD设设 备备可以分层层四层层。 24.1.2 MTD系统结构 24.2 Flash设备基础 NAND和NOR是两种不同的Flash存储储技术术,它们们各有 不同,适合不同的工作范围围。编编写一个闪闪存设备设备 的驱动驱动 不 仅仅需要了解MTD的结结构,还还需要知道闪闪存设备设备 的硬件原理 。本机介绍绍两种不同的闪闪存工作原理,并且比较较它们们之间间 的异同。 24.2.1 存储原理 NAND和NOR闪闪存都使用三端器件作为为存储单储单 元,学 过过模拟电拟电 子技术术的读读者可能了解一种叫做场场效应应管的器件 ,与此原理类类似。三端器件分别别有源极、漏极和栅栅极,栅栅 极利用了电场电场 效应应控制源极于漏极之间间的通断。 24.2.2 性能比较 NOR Flash技术术最早是Intel公司研发发出来的,紧紧接着 东东芝公司研发发出了NAND Falsh技术术。NOR闪闪存的特点是支 持片内执执行(Execute In Place),应应用程序不必加载载到 RAM就可以直接运行,简简化了软软件开发发。NOR闪闪存的读读取 速率非常高,但是容量通常不大,因为为容量大成本会显显著增 大。此外,NOR闪闪存的写入和擦除速度非常慢,不利于大 量数据存储储。 NAND Flash特点是存储储密度高,写入和擦除速度都比 NOR Flash快,适合大数据量存储储。但是,NAND Flash需 要特殊的存储电储电 路控制,并且空的或者已经经擦除的单单元才 能写入数据,所以必须须在写入数据之前先擦除块块。 24.3 内核MTD层 由于NOR和NAND Flash的物理特性差异,Linux内核 设计设计 了MTD层层用于管理两种不同类类型的Flash设备设备 。MTD 层对层对 内核空间间其他部分屏蔽了Flash的差异,有几个比较较重 要的数据结结构,在设计闪设计闪 存驱动驱动 的时时候需要了解,本节节以 Linux内核2.6.18版本为为例介绍绍。 24.3.1 mtd_info结构 mtd_info结结构是MTD原始设备层设备层 的一个重要结结构,该该 结结构定义义了大量的关于MTD的数据和操作,定义义在 include/linux/mtd/mtd.h头头文件。mtd_info结结构成员员主要由 数据成员员和操作函数两部分组组成。 24.3.2 mtd_part结构 mtd_part结结构描述分区,该结该结 构中的mtd_info结结构成 员员用于描述本分区,加入到mtd_table全局变变量中。结结构定 义义在drivers/mtd/mtdpart.c。 27 /* Our partition node structure */ 28 struct mtd_part 29 struct mtd_info mtd; 30 struct mtd_info *master; 31 u_int32_t offset; 32 int index; 33 struct list_head list; 34 int registered; 35 ; 24.3.3 mtd_partition结构 内核代码码drivers/mtd/mtdpart.c文件内定义义了添加和删删 除闪闪存分区的函数如下: int add_mtd_partitions(struct mtd_info *master, const struct mtd_partition *parts, int nbparts); int del_mtd_partitions(struct mtd_info *master); 24.3.4 map_info结构 NOR Flash驱动驱动 使用map_info结结构作为为核心数据结结构 。该结该结 构定义义了NOR Flash的基址、位宽宽、大小等信息以及 闪闪存的操作函数。 24.3.5 nand_chip结构 NAND闪闪存使用nand_chip结结构描述存储设备储设备 信息,该该 结结构定义义在include/linux/mtd/nand.h头头文件: 24.4 Flash设备框架 由于NOR Flash和NAND Flash设备设备 的差异,内核对这对这 两种类类型的Flash设备设计设备设计 了不同的驱动驱动 和管理方式。NOR Flash的操作相对对要简单简单 一些,NAND Flash不仅仅需要提供 读读写函数,还还需要提供ECC校验验函数和坏块块管理函数。 24.4.1 NOR Flash设备驱动框架 Linux内核提供了map_info结结构描述NOR Flash设备设备 , 驱动驱动 程序围绕该结围绕该结 构操作,通过过内核提供的注册函数把芯 片的信息提交给给内核,并且提供必要的操作函数。 24.4.2 NAND Flash设备驱动框架 NAND Flash设备设备 使用nand_chip结结构描述。 24.5 Flash设备驱动实例NOR Flash设备 驱动剖析 在介绍绍了Linux内核对对MTD的支持以后,本节给节给 出两 个Flash设备驱动实设备驱动实 例,并且分析驱动驱动 的工作原理。由于 Flash设备设备 具有硬件平台无关的特点,本节节介绍绍的两种Flash 设备驱动设备驱动 适应应于不同的硬件平台。 NOR Flash设备驱动设备驱动 一般来说说比较简单较简单 ,主要因为为 NOR Flash硬件的操作比较简单较简单 ,可以像操作内存一样样使用 ,因此驱动驱动 程序无需提供太多功能。本节节以内核2.6.18版本 代码码drivers/mtd/maps/sharpsl-flash.c文件为为例分析NOR Flash驱动驱动 程序。 24.5.1 数据结构 该驱动该驱动 程序是SHARP某种设备驱动设备驱动 ,程序比较简单较简单 。首先在39行定义义了一个mtd_info结结构用于描述NOR设备设备 : 39 struct map_info sharpsl_map = 40 .name = “sharpsl-flash“, 41 .size = WINDOW_SIZE, 42 .bankwidth = BANK_WIDTH, 43 .phys = WINDOW_ADDR 44 ; 24.5.2 驱动初始化 通过查过查 找模块块初始化和清除宏能得到该驱动该驱动 的初始化 函数为为init_sharpsl()以及清除函数cleanup_sharpsl()。 24.5.3 驱动卸载 驱动驱动 卸载调载调 用了cleanup_sharpsl()函数,主要是释释放 NOR驱动驱动 占用的资资源,函数定义义如下: 101 static void _exit cleanup_sharpsl(void) 102 103 if (mymtd) 104 del_mtd_partitions(mymtd); 105 map_destroy(mymtd); 106 107 if (sharpsl_map.virt) 108 iounmap(sharpsl_map.virt); 109 sharpsl_map.virt = 0; 110 111 24.6 Flash设备驱动实例NAND Flash设备 驱动分析 NAND Flash由于需要控制器才能操作,驱动驱动 程序相对对 复杂杂。在NAND Flash驱动驱动 程序中,主要工作是配置NAND 控制器。内核2.6.18版本代码码drivers/mtd/nand/s3c2410.c文 件包含了S3C2410、S3C2412和S3C2440平台上NAND Flash 驱动驱动 。本节节重点分析S3C2440平台上NAND Flash驱动驱动 程序 。 24.6.1 S3C2440 NAND控制器介绍 S3C2440芯片内部集成了NAND Flash控制器,在芯片 手册Figure 6-1给给出了一个NAND Flash控制器的功能框图图。 24.6.2 数据结构 S3C2410、S3C2412和S3C2440这这三个处处理器在NAND 控制器部分存在一些差异。为为了在三款处处理器上都可以驱驱 动动同样样的NAND Flash闪闪存,在drivers/mtd/nand/s3c2410.c 文件中定义义了s3c2410_nand_mtd结结构和s3c2410_nand_info 结结构存放相关信息。s3c2410_nand_mtd结结构定义义如下: 92 struct s3c2410_nand_mtd 93 struct mtd_info mtd;/ 内核mtd_info结结构 94 struct nand_chip chip;/ 内核nand_chip结结构 95 struct s3c2410_nand_set *set;/ 封装后的mtd_partition结结构,加 入了s3c2440的一些属性 96 struct s3c2410_nand_info *info; / s3c2440状态态信息,私有数据 97 int scan_res; 98 ; 24.6.3 驱动初始化 驱动驱动 初始化调调用s3c2410_nand_init()函数,定义义如下: 796 static int _init s3c2410_nand_init(void) 797 798 printk(“S3C24XX NAND Driver, (c) 2004 Simtec Electronicsn“); 799 800 platform_driver_register( 801 platform_driver_register( / 注册 S3C2440平台驱动驱动 数据结结构 802 return platform_driver_register( 803 24.6.4 驱动卸载 驱动驱动 卸载时调载时调 用s3c2410_nand_remove()函数,主要是 释释放驱动驱动 占用的资资源。 24.6.5 初始化NAND控制器 s3c2410_nand_inithw()函数负责负责 初始化NAND控制器。 24.6.6 设置芯片操作 s3c2410_nand_init_chip()函数初始化nand_chip结结构, 并且设设置相关的操作,函数操作流程如下: (1)程序508514行设设置通用的读读写缓缓冲函数、查查找 芯片函数等。 (2)然后在函数516行使用switch语语句根据不同平台设设 置NAND控制器的配置。 (3)设设置完毕毕后,在548551行设设置mtd_info结结构和 nand_chip结结构之间间的相互指向关系。 (4)最后,程序553576行设设置ECC相关操作。 24.6.7 电源管理 S3C2440平台上NAND闪闪存的电电源管理包
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025中国自动驾驶高精地图标准体系建设现状评估报告
- 2025中国自动驾驶技术等级划分及法规环境与事故责任界定研究报告
- 2025中国自动驾驶传感器融合方案与量产落地障碍分析报告
- 2025中国美容服务行业线上线下融合发展趋势报告
- 2025中国美妆行业柔性供应链建设与风险管理报告
- 2025中国美妆行业大数据分析平台建设与应用场景研究报告
- 2025中国美妆品牌年轻化战略与传播渠道创新研究
- 2025中国网络安全行业发展现状及风险评估分析报告
- 2026年中国医用吻合器项目经营分析报告
- 2026年中国转运呼吸机项目经营分析报告
- 2025年江苏省行政执法证考试题库附答案
- 2025年国考税务面试真题及答案
- 用火用电安全培训资料课件
- 城市沟槽开挖安全监测方案
- 基坑外架专项施工方案(单立杆双排脚手架)
- 本科护理系毕业论文
- (贵州)贵阳市、铜仁市2026届高三年级9月摸底考试化学(含答案)
- 外研版(三起)(2024)四年级上册英语 Unit 5 Lets go!单元整体教学设计(共5课时)
- GPS的课件教学课件
- 检验科标本接收与处理操作规程
- GB/T 43683.3-2025水轮发电机组安装程序与公差导则第3部分:立式混流式水轮机或水泵水轮机
评论
0/150
提交评论