首页 > 范文大全 > 正文

μC/FS嵌入式文件系统移植研究

开篇:润墨网以专业的文秘视角,为您筛选了一篇μC/FS嵌入式文件系统移植研究范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘 要: 介绍了μC/fs嵌入式文件系统的主要功能,着重说明了μC/FS的移植步骤,实现了μC/FS在SD上的移植。测试结果表明,基于SD卡的μC/FS文件系统移植在采集系统中的应用满足了设计要求,并具有良好的性能。

关键词: 嵌入式文件系统; μC/FS; 移植

中图分类号:TP319 文献标志码:A 文章编号:1006-8228(2012)05-03-03

Research and application of μC/FS embedded file system migration

Si Yingying, Cao Gaofang

(Binzhou Medical University,Yantai, Shandong 264003, China)

Abstract: The main function and feature of μC/FS embedded file system is described, highlights steps of μC/FS migration is illustrated. It is realized that μC/FS is migrated to SD card. The results of test show that the application of μC/FS file system migration based on SD card can meet the design of requirements and have good performance.

Key words: embedded file system; μC/FS; migration

0 引言

进入后PC技术时代,嵌入式操作系统成为最受关注的技术之一。在嵌入式操作系统中,文件管理系统的地位显得非常重要。目前通用的操作系统上有很多成熟的文件系统,如DOS/Windows9X下的FAT16/32文件系统、WindowsNT/2K/XP下的NTFS文件系统和UNIX文件系统等,但这些通用文件系统并不适合直接应用于嵌入式实时系统。主要原因有两点:一是通用文件系统采用缓存技术提高文件系统的速度特性,要耗费大量的系统资源;二是嵌入式实时系统电源的突发性断电会对存储造成很大影响,通用文件系统对此欠考虑[1]。

嵌入式文件系统比较简单,主要提供文件存储、检索和更新等功能,一般不提供保护和加密等安全机制。它以系统调用和命令方式提供文件的各种操作,主要包括设置、修改对文件和目录的存取权限,提供建立、修改、改变和删除目录等服务,提供创建、打开、读写、关闭和撤销文件等服务[2]。嵌入式文件系统能够以较短的时间实时响应,对文件的操作允许多个任务同时打开文件并进行读操作,具有可裁剪、可配置、支持多种存储设备和开放的体系架构等性能。其中μC/FS嵌入式文件系统以其源码开放、价格低廉、兼容性等特点日渐受到重视。

1 μC/FS文件系统

μC/FS是Micrium公司开发的一个嵌入式文件系统,可以应用于多种存储介质,并为它们提供了基本硬件接口函数。μC/FS嵌入式文件系统是一个高性能的函数库,能够在速度、多功能性和内存占用上进行优化。它的优点是:采用模块化结构,可读性强;支持标准的应用程序接口,可移植性高;符合FAT标准,支持FAT格式文件,可应用的嵌入式操作系统范围广。μC/FS的源代码用标准C语言编写,几乎可以应用于所有处理器[3]。其主要功能如下。

⑴ 支持与MS-DOS/MS Windows兼容的FAT12、FAT16和FAT32文件系统。

⑵ 支持中文长文件名的FAT存储介质。

⑶ 支持多个设备驱动程序,允许同一时间通过文件系统访问不同类型的硬件。

⑷ 支持多种存储介质,允许同一时间通过驱动程序访问不同存储介质。

⑸ 支持操作系统,μC/FS可以移植到任意操作系统,并在多线程条件下使用。

⑹ 支持标准C语言中的stdio.h中类似标准应用程序接口(API),标准C语言I/O库中的应用程序可以移植到μC/FS中使用。

⑺ 支持简单的设备驱动程序结构,μC/FS驱动程序只需要基本的读写块函数。

⑻ 支持SmartMediaka和NAND闪存器件的驱动程序,可用于访问硬件(读卡器);支持通用电子集成驱动器(IDE)驱动程序,用于真正IDE或内存映射模式的CF卡;支持通用闪存芯片(EEPOM)驱动程序,用于处理不同闪存扇区大小。

⑼ 支持集成多媒体和SD卡串行外设接口(SPI)模式。

⑽ 支持专用文件系统(EFS),支持中文长文件名。

μC/FS依据各层不同的功能划分组织层次,使得μC/FS结构清晰[4]。API层是μC/FS和用户应用程序的接口,包括一个与文件函数例如FS_fopen、FS_fwrite等有关的ANSIC库。应用程序通过调用API层所提供的函数可方便地访问文件系统层。文件系统层把文件的操作请求传递给逻辑块处理,系统通过这种文件传递调用逻辑块为设备制定相应的设备驱动。逻辑块操作的主要功能是使对设备驱动的访问同步,并为文件系统层提供一个便捷的接口。逻辑块层调用一个设备驱动来进行块操作。设备驱动层是访问硬件设备的底层程序,它包括基本的I/O函数,以便访问硬件设备和保存指向函数指针的向量表[5]。

2 μC/FS文件系统的移植步骤

μC/FS的默认配置是一个内存磁盘。进行μC/FS文件系统移植首先要熟悉工程开发所需要的工具(如编译器,工程管理,连接器等),并能够添加文件、目录到include搜索路径;还要熟悉目标工程使用的操作系统。将μC/FS移植到一个工程的进程中需经以下步骤。

⑴ 创建一个不包括μC/FS的工程。

⑵ 将μC/FS目录下的文件添加到工程中,然后验证添加后的运行情况。这时应从工程文件下的程序代码启动(但不包括main.c和start.c应用程序)。应用程序执行过程如下:

(a) mian.c调用函数MainTask(),该函数的主要任务是完成初始化和添加μC/FS;

(b) 检查卷标是否需要低级格式化或高级格式化,并输出卷标名称;

(c) 调用函数FS_GetFreeVolumeSpace()并输出一个返回值―可用内存磁盘的总空间;

(d) 创建并打开一个写访问设备的测试文件,向文件写入4个字节,并关闭文件句柄或程序输出一个错误信息;

(e) 再次调用函数FS_GetFreeVolumeSpace()并得到一个函数返回值―可用的RAM磁盘空间;

(f) 程序输出一个退出消息并进入循环等待。

⑶ 添加设备驱动程序。在μC/ FS文件系统配置设备驱动程序需要完成两件事情:第一件是添加设备驱动程序到工程文件。大多数驱动程序运行需要硬件的设备驱动程序和特定的硬件,驱动访问硬件的底层I/O函数和全局表。全局表中存放了I/O函数的指针。需要硬件驱动程序的有 NAND闪存、多媒体卡(MMC)、SD卡;不需要硬件驱动程序的有NOR闪存、RAM。几乎所有的驱动程序使用之前都需要配置;配置函数主要任务是指定各自驱动配置文件的内存地址和内存空间。第二件是添加硬件驱动到工程文件。

⑷ 激活驱动程序。添加驱动程序和硬件驱动函数到工程文件后,复制config.c文件到μC/FS工程的配置目录下。配置文件在文件系统运行时发挥配置作用,它包含一个能快速、简易启动驱动程序。其中最重要的启动函数是FS_X_AddDevices(),它是激活和配置启动函数,不需要硬件驱动,必须在使用之前配置。

⑸ 调整内存空间。文件系统在很多地方由于管理的目的需要使用内存,内存空间取决于配置文件尤其是驱动的使用情况,通常硬盘、CF卡或SD卡驱动要比简单的驱动管理需要更多内存空间。每个驱动程序都需要分配内存空间。文件系统在初始化阶段分配到内存,在运行过程中会一直占用分配到的空间。宏ALLOC_SIZE就是在文件系统中用来根据各自驱动配置函数指定内存空间的。

3 μC/FS文件系统在SD卡上的移植应用

SD卡(Secure Digital Memory Card)即安全数码卡,是一种基于半导体快闪记忆器的新一代记忆设备,被广泛使用在便携式装置上,如数码相机、个人数码助理(PDA)和多媒体播放器等。SD卡拥有高记忆容量、快速数据传输率、极大的灵活性和很好的安全性[6]。SD卡的通信基于一个9引脚接口(时钟、命令、4根数据线、3根电源和地线),可以在最高25MHz频率和低电压范围工作,不需要额外的电源来保持其上的记忆信息。SD卡主机接口支持MMC标准[7]。

SD卡的协议结构如图1所示。

[

SD卡

安全

规范

][音频规范][其他应用规范] [文件系统规范][SD卡物理层规范]

图1 SD卡协议结构图

其中,音频规范和其他应用规范阐述音频应用的规范和实现要求;SD卡文件系统规范阐述保存在SD卡中的文件结构格式要求;SD卡安全规范阐述版权保护机制以及所支持的应用专用命令;SD卡物理层规范阐述SD卡使用的物理接口和命令协议[8]。

3.1 μC/FS在SD卡的移植

μC/FS文件系统支持SD卡,但不包含SD卡驱动,用户须提供SD卡设备逻辑层以下的驱动文件。μC/FS支持以SPI模式访问SD卡,用户必须提供基本的I/O功能以实现对卡的访问。

μC/FS文件系统的移植需要对所支持的设备类型、操作系统、块的大小等项加以配置,因此需要定义头文件FS_Conf.h下的FS_OS值为1,并配置函数FS_X_OS_Init、FS_X_OS_Unlock、FS_X_OS_Lock。μC/FS移植的关键是添加SD驱动,添加设备驱动调用FS_AddDevice(),其代码如下:

FS_AddDevice(&FS_MMC_SPI_Driver);

const FS_device_type

FS_MMC_SPI_Driver

{ "SD device",

FS_SD_DevGetStatus,

FS_SD_ReadBlock,

FS_SD_WriteBlock,

FS_SD_DevIoCtl

};

其中FS_device_type是一个设备类型,定义为结构体:

{ Static int _DevGetName (U8 Unit);

Static int _DevGetStatus (U8 Unit);

Static int _DevRead (U8 Unit, U32 Sector, void *pBuffer);

Static int _DevWrite (U8 Unit, U32 Sector, void *pBuffer);

Static int _DevIoCtl (U8 Unit, I32 Cmd, I32 Aux,void

*pBuffer);

} FS_device_type

结构体成员由设备名、设备状态返回函数、读函数、写函数、控制函数组成。上述代码的功能是把设备驱动函数添加到设备驱动表里,设备驱动表向文件系统上层注册以备调用设备驱动程序。经过此步骤后文件系统可以通过其中的FS_SD_ReadBlock和FS_SD_WriteBlock调用SD卡驱动程序的读写函数。

3.2 SD卡驱动程序测试

在测试过程中发现,SD卡芯片支持库提供的对设备访问和控制的函数只能一次读写512字节的数据,这极大地降低了存储数据的速度。为了提高写SD卡的读写速度,我们更改了μC/FS中FS_fat_fwrite函数,使得文件系统在写大于512KB的数据时,把数据全部写入缓冲区后才调用设备驱动程序的写函数FS_SD_WriteBlock。

实际应用中,信号源发送频率为500Hz、峰值为5V连续正弦波,采集时间为100秒;存储到SD卡中的采集数据经过读卡器显示的数据文件为7937KB;四通道数据采集,每通道采样率为10kHz,A/D为16位。因此数据文件大小约为4×10×16×100/8=8MB,与实际采集数据量基本一致,系统的存储功能正常。

SD卡中数据文件通过Matlab读出的波形数据如图2所示。

图2 读SD卡数据波形截图

由图中可以看出四通道信号的每个周期由20个采样点组成,与每通道信号采样率10kHz相符。实际选用的SD卡的写速度是1.5MB/S,SD卡在测试中写速度约为187KB/S。如果使用高速SD卡,系统的读写速度将会得到显著提高。

4 结束语

μC/FS文件系统在SD卡的移植,适合在对读写速度要求不是很高但对存储容量和便携性要求较高的场合使用。μC/FS文件系统移植操作简单,可应用于大多数常见存储介质,如磁盘、闪存等。如果将μC/FS文件系统的移植推广到其他存储介质,仅需要更改文件系统初始化函数FS_Init()、文件系统配置函数FS_AddDevice()、文件系统访问函数FS_Read()和FS_Write()即可。

参考文献:

[1] William Stallings,王涌等译.操作系统-内核与设计原理(第四版)[M].电子工业出版社,2004.

[2] 成巍.嵌入式文件系统的的设计与实现[D].硕士论文,2006.1:2~6

[3] Micrium Corporation.μC/FS Embedded File System (SoftwareVersion 3.10),2004:33~42

[4] 唐长清,郑强,占惠星.μC/FS文件系统在Nand Flash上的实现[J].计算机与现代化,2010.3:4~6

[5] 郝伟,李敬兆.基于μC/FS的大容量存储FAT32格式的实现与应用

[J].开发研究与设计技术,2006:113

[6] 段琪玮,周洪利.基于MMC卡的嵌入式文件系统的设计与实现[J].实践与经验,2006.7:94~96

[7] 李宏佳,徐晓晓,魏权利.基于ARM和SD卡的嵌入式文件系统研究与设计[J].电子设计应用,2007.7:101~103

[8] 李家良,慕德俊.基于SD卡的μC/FS文件系统移植研究[J].微处理机,2010.12:79~81