嵌入式文件系统在工程机械监控器上的移植
摘要:在基于嵌入式操作系统的工程机械智能监控器的开发过程中,完成了文件系统的移植,将周立功公司的ZLG/FS文件系统经过一系列修改,嵌入到监控器的系统程序里运行。文件系统的硬件平台选用三星公司的Nand Flash芯片K9F2808,作为文件系统的硬件依托。文件系统移植完后该芯片就成为系统硬盘,用来存储系统程序和字库文件等。
关键词:文件系统;Nand Flash;嵌入式系统;移植;K9F2808
引言
文件系统是操作系统中组织、存取和保护数据的一个重要部分,文件系统的主要目标是提高存储器的利用率,接受用户的委托实施对文件的操作。在本工程机械智能监控器项目开发之初,文件系统这部分设计是由合作方北京航空航天大学完成的,当时使用的嵌入式文件系统是μC/OS—II。我方接手以后,对该文件系统进行了分析研究,发现该文件系统虽然能用,但是有些地方不够完善,存在一些问题和隐患:比如μC/OS-II内存占用比较大,且效率不高等。因此,又从网上下载了周立功文件系统(ZLG/FS),发现其非常适合监控器项目的使用,并且具备如下特点:
①高度兼容FAT12、FAT16、FAT32;
②可移植;
③支持多任务操作系统;
④兼容多种介质。
ZLG/FS采用模块化层次结构设计,并使用底层驱动程序来兼容不同的硬件结构和不同的介质。共包括6个模块:应用程序模块、文件管理与目录管理模块、文件分配表管理与文件目录表管理模块、逻辑盘管理模块、高速缓存(Cache)管理模块、底层驱动程序模块。最终决定将该文件系统移植到智能监控器系统上面。
1 硬件平台简介
本系统采用目标机+宿主机的开发模式,目标平台是ARM S3C44B0,宿主机是PC机+μC/OS-II操作系统。S3C44B0是基于ARM7TDMI内核的32位微控制器,它是三星公司专门为PDA、Internet设备和手持设备等开发的微处理器。该芯片还包含有8 KB的Cache,这一特性使开发人员能够将μC/OS-II操作系统移植到基于该处理器的目标系统中。
2 文件系统在智能监控器系统上面的移植过程
2.1 底层驱动程序的编写
硬件上,将三星公司的Nand Flash芯片K9F2808开发为系统硬盘。需要编写两部分的驱动程序:一是关于该Flash芯片的驱动程序,也就是对该芯片最底层的最基本的操作,建立文件Flash.c,包括Flash复位、读Flash ID号、擦除Flash的一块、读扇区、写扇区等函数,这部分函数代码由芯片公司提供;二是关于文件系统的基础操作,创建文件K9F2808.c,它调用flash.c里面的函数,为上层的程序提供一个与底层无关的接口。
文件K9F2808.c主要包括以下函数:创建FAT12、创建根目录、格式化Flash盘、将MBR写到盘里等。在格式化Flash盘这个函数里,首先要调用Flash复位的函数,然后擦除Flash盘的第0个Block,擦除成功以后,将MBR的内容写入该Block的第一个Page里,这是Flash盘的引导扇区,写入的MBR包含了该盘的一些基本信息。至此,完成了格式化盘的第一步,为后面继续格式化打下基础。
下一步就是要创建FAT12,用两个扇区(即两个Page)作FAT区,并将其内部单元全部初始化为00H,相继的2个扇区作FAT区的备份。接下来,把第1个Block擦除掉,然后在这个Block里创建该盘文件系统的根目录,并将根目录区初始化为00H。这样就把一个Flash盘给格式化为FAT12文件系统格式。但是还不能往盘里存东两,因为还需要一些文件系统上层的管理。
在K9F2808.c这个文件里,函数K9F2808(uint8 Cammand,vold*Parameter)是底层驱动程序与上层的接口函数,第一个参数代表要对该盘进行操作的命令,比如磁盘初始化、关闭磁盘、读扇区、写扇区等;第二个参数是一个结构体,它包含了当前操作的磁盘的一些读写基本信息。在文件系统的上层程序里这个函数将被频繁调用。
2.2 逻辑盘管理的程序移植
这是底层驱动程序上面一层的程序,文件名是disk.c,其中主要包含:磁盘初始化、读取磁盘信息、获取空盘信息、增加一个驱动程序。删除一个驱动程序等函数。这部分程序勿需改变,可以原封不动地延用ZLG—FS里提供的程序,在此不再赘述。
2.3 高速缓存管理的程序移植
这是FAT文件系统关于Cache管理的部分,文件名是RWSec.c,主要包括:初始化磁盘Cache、解锁指定Cache(允许切换出内存)、把指定扇区写回逻辑盘、把指定Cache写回逻辑盘、把所有已改变的扇区写回逻辑盘、从内存获取一个Cache、为逻辑盘上的一个扇区打开一个Cache并锁定、从逻辑盘读取一个扇区、指定逻辑盘的指定一个扇区被改写等。除了极个别的地方需要稍做修改外,这部分函数基本上都延用ZLG—FS里提供的程序。
2.4 文件分配表管理(FAT)的移植
文件Fat.c主要是FAT文件系统的文件分配表基本操作函数,包括:返回FAT表指定簇的下一个簇号、分配下一个簇、为指定簇链增加一个簇、删除指定簇链。这些函数可以放心大胆地使用,不需要修改。
2.5 文件目录表管理(FDT)的移植
文件Fdt.c是关于FAT文件系统的文件分配表基本操作程序。主要包括:将指定簇所有数据清零,读取FDT信息,写FDT信息,获取根目录指定文件(目录)信息,获取指定目录指定文件(目录)信息,设置根目录指定文件(目录)信息,设置指定目录指定文件(目录)信息,在指定目录查找指定文件(目录),在指定目录处增加指定文件(目录),在指定目录删除指定文件(目录),改变指定目录指定文件(目录)的属性,判断目录是否为空,在指定目录查看指定文件(目录)是否存在。除了对最后两个函数作了很小的改动外,其他函数都没用动。
加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW
或用微信扫描左侧二维码