Chinaunix首页 | 论坛 | 博客
  • 博客访问: 475192
  • 博文数量: 56
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1957
  • 用 户 组: 普通用户
  • 注册时间: 2013-06-07 23:02
文章分类

全部博文(56)

文章存档

2016年(1)

2014年(7)

2013年(48)

分类: 嵌入式

2013-08-14 21:59:51

7.2.12 函数库FLtl

函数库FLtl主要定义了两个函数,flMountflFormat函数。

1. FLStatus flMount(unsigned volNo, TL *tl, FLFlash *flash)

函数flMountMTDsockettl层连接起来。它首先调用函数flIdentifyFlash对指定volNo(socketNo)的socket中的flash卡进行识别,识别成功后用数组tlTable[]中每个元素的mountRoutine函数尝试性地安装TL层,从而将MTDsocket以及tl层联系起来。

2. FLStatus flFormat(unsigned volNo, FormatParams FAR1 *formatParams)

这个函数是根据指定的参数对某个socket中的flash卡进行格式化。

格式化之前首先要通过函数flIdentifyFlash(socket,&flash)对flash卡的型号进行识别,识别后就可以得到通用的MTD层接口——FLflash结构。利用该结构就可以完成对flash卡的操作,其操作和flMount类似,也是根据tlTable[]中每个元素的formatRoutine函数尝试性地进行格式化。

注意:该函数中存在一个bug,就是如果flIdentifyFlash函数识别失败则直接退出,否则status的状态为flOK,此时根本不能够进入for循环,修改的方法是将for循环中的判断status == flUnknownMedia改为status != flOK

7.2.13 TLSocketMTD层结构的相互关系

图7.14描述了TL层、socket层以及MTD层的相互关系。

图7.14 函数mountFtl填充的主要数据结构

每个时刻一个socket中最多只有一张flash卡,一张卡则对应一个TlRec结构变量,所有的Tlrec结构变量共用一个TL结构。

7.3 TrueFFS系统动态分析

前面的静态分析中已经看到了TrueFFS的复杂性,本节将沿着TrueFFS的建立过程,对TrueFFS进行动态分析。图7.11描述了TrueFFS的总的框架,但是对于通用的结构TLTlrecFlsocketFlflash,将其与具体的设备关联起来。这也是动态分析的主要线索。

由于socket控制芯片是计算机系统的一部分,在计算机启动之前就已经确定了的,因此socket层驱动的安装和初始化可以放在系统启动的过程中。文件Flsocket.c中定义了static FLSocket vols[DRIVES],文件tffsConfig.cflRegisterComponents调用了文件sysTffs.c中的sysTffsInit函数,它填充了FLSocket vols[DRIVES]从而完成的socket层驱动的安装。图7.15说明了socket层驱动的安装和初始化过程。

图7.15 socket驱动的安装及初始化过程

socket驱动所不同的是,如果系统中没有插入flash卡,那么flash卡的生产厂商、容量以及类型都死不能确定的,相应的TL层也是不能确定的,因此TL层以及MTD层驱动并不是一开始就安装的,而是在检测到flash卡才能安装和初始化。

在文件tffsConfig.c中,通过宏定义了MTDidentifyRoutine mtdTable[]mtdTable[]中包含了不同型号flash卡的识别安装函数,通过函数flIdentifyFlash依次尝试可以完成对flash的识别以及MTD层驱动的安装。

在文件tffsConfig.c中,通过宏定义了TLentry tlTable[]tlTable[]中包含了不同TL层格式的识别安装及格式化函数,通过函数flMount依次尝试可以完成对flashTL层格式的识别安装以及TL层驱动的安装以及TL层、socket层以及MTD层的关联。图7.16说明了MTD层和TL层驱动的安装和初始化过程。

图7.16 MTD层和TL层驱动的安装和初始化过程

7.4 基于TrueFFSFAT文件系统

       TrueFFS使得访问flash卡就像访问普通的硬盘一样,而无需考虑其擦除等复杂的过程。但即便是硬盘,上面文件的存放也不是杂乱无章的,而必须沿用一定的格式和标准,这就是磁盘文件系统。常见的磁盘文件系统有FATNTFSEXT2等等。vxWorks则实现了基于TrueFFSFAT12FAT16文件系统。该文件系统的实现主要是由函数库DosFormt和函数库Fatlite来完成的。其实现过程和其他操作系统并无明显不同,因此这里不再过多分析。

阅读(4375) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~