- 1 -
中国科技论文在线
μC/FS 文件系统在遥感图像存储中的应用
王释民1,张忠剑1,熊远2,兰西柱1**
作者简介:王释民,(1985-),男,硕士研究生,主要研究方向:嵌入式系统。
通信联系人:兰西柱,(1966-),男,副教授,主要研究方向为计算机监控及通信、嵌入式系统应用。 E-mail:
lxz@
(1. 中国矿业大学(北京)机电与信息工程学院,北京 100083;
2. 北京邮电大学自动化学院,北京 100876) 5
摘要:本文主要是将 µC/FS文件系统移植到基于 FPGA控制的遥感图像的硬盘存储系统上,
通过对开源的 µC/FS 文件系统进行修改以及编写相应的硬盘底层驱动,在嵌入式系统上实
现文件系统,从而使得通过 CMOS 图像传感器获得的图像数据存入硬盘时,存储系统可以
通过 µC/FS文件系统对其进行管理。
关键词:嵌入式系统;μC/FS文件系统;FAT32;NIOS 10
中图分类号:TN409
Application of µC/FS File System Transplantation in
Remote Sensing Images
Wang Shimin1, Zhang Zhongjian1, Xiong Yuan2, Lan XiZhu1 15
(1. School of Mechanical Electronic& Information Engineering, China University of Mining &
Technology(Beijing), Beijing 100083;
2. Automation School,Beijing University of Posts and Telecommunications, Beijing 100193)
Abstract: The paper mainly introduces that µC/FS is translpanted into a HDD storage system
based on FPGA. By modifying the file system and writing hard disk drive,we can achieve a file 20
system in embedded system. And then storage system can manage the image data by µC/FS while
storing the acquired data into the hard disk.
Keywords: Embedded System; µC/FS File System; FAT32; NIOS
0 引言 25
伴随着人类社会科学技术的持续发展,生活实践中产生的信息量越来越多,在遥感信息
领域内,通过航空航天对地观测平台采集原始遥感图像数据,以往的这种采集系统简单地对
存储介质进行读和写操作的方式已经不再满足人们实际应用的需要[1],必须将这种原始数据
加以处理,使计算机可以直接识别,从而使遥感图像处理更加简捷。于是通过文件系统对存
储介质存储的信息进行管理成为一个值得研究的问题。目前我们熟知的文件系统主要有微软30
Windows 系统的 FATl2、FATl6、FAT32、NTFS,以及 Linux 系统下的 EXT2、EXT3 等。
就一般用户而言,对于 FAT32 文件系统无疑是最熟悉不过的,所以选择一种支持 FAT32 而
且易移植的嵌入式文件系统对于我们的研究至关重要。μC/FS 是美国 micrium 公司研发的
一个专门针对嵌入式应用的文件系统,μC/FS 是使用标准 ANSI C 编写的可以应用在几乎所
有媒介上的一种文件系统,他只需要我们提供基本硬件的底层驱动程序它就可以执行文件管35
理工作[2]。研究μC/FS 文件系统的移植对于方便我们的生活和科学研究有极大的帮助。
1 设计方案
本文的设计是对我们开发嵌入式高速存储系统的进一步完善,此高速存储系统经前端图
像数据传感器采集图像数据,然后将数据存入 IDE 硬盘中,而存储的图像数据无法直接被
计算机所识别,需要我们通过特别的方式对其处理后才能使用,给科研工作带来了极大不变,40
- 2 -
中国科技论文在线
所以我们通过移植文件系统的方式来解决这个问题,设计的文件系统应用框图如下图 所
示。
图 1 文件系统应用
Application of File System 45
由图 1可知,我们设计的存储系统通过接收图像传感器采集的数据经数据缓存模块后,
通过 NIOS 嵌入式处理器控制工作的μC/FS 文件系统管理并将数据存入 IDE 硬盘里,同时使
用 USB 接口将硬盘中以μC/FS 文件系统存储的图像数据导出至计算机,在计算机上直接对
该数据进行进一步的图像处理,而不需开发上位机软件,将未经文件系统的管理的裸数据进50
行处理。本文主要研究的内容为虚线框里的内容,即μC/FS 文件系统的移植。
2 μC/FS 文件系统
μC/FS 是一种使用标准 ANSI C 编写的可应用于绝大多数存储介质的文件管理系统,它
具有的特点有以下几条:
支持 DOS/WINDOWS环境下的 FAT12,FAT16和 FAT32文件系统; 55
支持多个存储器共同工作,可以同时访问多个存储器;
支持多媒体,在设备驱动的支持下可以在同一时间存取不同的媒体;
支持多操作系统,可以很方便得移植到几乎任何操作系统;
速度快,可扩展性强,可裁剪,支持广泛等特点;
非常简单的设备驱动结构; 60
可选的通用 ide 驱动,同时也适合工作在“TRUE ide”模式的压缩闪存;
基于以上的这些特点,μC/FS 文件系统非常适合应用到中小型的存储器设备当中进行
文件的有效管理[3]。
μC/FS 文件系统由不同的层组成,它主要由应用层、文件系统层、逻辑块层以及设备
驱动硬件层组成[3]。其具体结构图如图 2 所示。各层功能描述如下: 65
9 应用层是应用程序和μC/FS 的接口,它包涵了如文件打开(FS_FOpen),文件读写
(FS_FWrite, FS_FRead)及相关函数的标准的 ANSI C 的函数库。API 层就是将这些对
文件的调用转换到文件系统层。目前μC/FS 已经提供了对 FAT16,FAT32,NTFS 等众
多分区格式的支持,并且可以同时对多分区格式同时进行操作。
9 文件系统层将对文件的操作转化对对逻辑块的操作。当完成了这层的转换以后,μ70
C/FS 就会调用这个逻辑块并为其调用相应的驱动。
9 逻辑块层的主要任务是同步对一个器件的存取以及为文件系统层提供一个简单接
- 3 -
中国科技论文在线
口。此层直接调用器件驱动以实现逻辑块操作。
9 器件驱动层是较底层的服务用于直接访问你的硬件。该层的结构比较简单,易于实
现以及硬件的整合。 75
图 2 μC/FS 文件系统结构
Fig. 2 Structure of File System
3 文件系统移植总体设计 80
移植μC/FS 文件系统到嵌入式存储系统中,主要通过有两个步骤来实现:配置文件系
统和文件系统底层驱动的编写。移植工作准备完成后,将其加入到 NIOS 工程中[4],进行编
译,最终下载到 FPGA 中实现设计的逻辑功能[5]。
图 3 为文件系统移植的总体流程图,从该图中可以了解到μC/FS 文件系统移植的具体
步骤: 85
1) 准备工作,准备μC/FS 文件系统的移植手册以及源代码,以及调试成功的高速数
据存储系统(软件、硬件);
2) 文件系统的配置,设置文件系统的相关参数,根据μC/FS 文件系统手册以及存储
系统的设计的需要配置 文件系统配置文件,以使整个系统获得最优效果
3) 配置 NIOSⅡ嵌入式软核[6],通过 Quartus Ⅱ软件中的 SOPC Builder 开发工具配置90
NIOS 的处理器,主要包括处理器类型的选择、程序/数据存储器的配置以及配置并行输
入/输出端口;
4) 底层驱动的编写,根据不同的存储媒介,编写相应的底层硬件驱动,这是本设计中
最重要的部分;
5) 新建 NIOS ⅡIDE 工程,使用 NIOS ⅡIDE 开发平台建立文件系统移植工程,将编95
写好的文件系统源文件加入到新建的工程中,并对该工程进行调试编译[8]。
6) 仿真验证,将编译成功的 NIOS 系统加入到 Quartus 系统中进行仿真综合,检验加
入文件系统的整个存储系统的逻辑功能及时序的正确性;
7) 配置目标 FPGA,对系统的控制核心 FPGA 芯片进行简单的配置,使其正常工作;
8) 下载,将编译调试好的工程通过 JTAG 接口下载到高速数据存储系统硬件平台中,100
在硬件平台中运行设计的文件系统,验证其工作性能;
- 4 -
中国科技论文在线
图 3 文件系统移植流程图
flow chart of file system transplanting
105
4 文件系统的移植
μC/FS 文件系统的配置
μC/FS 文件系统的配置文件为 ,操作的时候我们需要配置几个相关的操作函
数即可。
1) 设备驱动与配置部分,由于本设计用到的是硬盘,所以只要将 FS_USE_IDE_DRIVER110
函数设为‘1’,具体如#define FS_USE_IDE_DRIVER 1,其他皆为‘0’就可以了;
2) FAT配置部分,将函数 FS_FAT_SUPPORT_FAT32设为‘1’以支持 FAT32文件系统;
3) 操作系统的配置,本设计中只是简单的图片存取,不需要操作系统的支持,所以函
数 FS_OS_UCOS_II,FS_OS_EMBOS,FS_OS_WINDOWS,都设置为‘0’,也可以设置相应
的函数为‘1’以支持相应的操作系统。 115
4) 数据类型配置,我们用的硬盘需要的数据类型已经包含在内不需要更改了。
硬盘硬件驱动的设计
我们移植μC/FS 文件系统的时候需要编写相应的硬件驱动,设备驱动由用于存取硬件
的基本 I/O 功能和一个全局表组成。这一部分主要介绍硬盘驱动的编写。
全局表主要包含_DevStatus、_DevRead、_DevWrite、_DevIoCtl、_DevReadBurst,120
_DevWriteBurst 五个函数。_DevStatus 用于返回当前设备的工作状态,主要用于检测是否我
们使用的设备发生了改变,而且因为我们只使用硬盘作为存储媒介,该函数值需要初始化的
时候检测一次。_DevRead 主要用于从硬盘中读取数据。_DevWrite 用于往硬盘中写入数据,
这里我们会用到一次读写多个数据块,此函数就重要了。_DevIoCtl 为我们的设备执行特殊
的命令。_DevReadBurst 是从多个数据块中读取数据,这个函数为可选函数,而且本设计的125
要求也只是要求将数据以文件系统的方式存入硬盘,而无读出要求,所以这个函数可以不用。
- 5 -
中国科技论文在线
_DevWriteBurst 往硬盘中写入多个数据块,为了文件系统的快速写入我们需要调用此函数,
在调用此函数前需要先将 FS_SUPPORT_BURST 设置‘1’,否则系统会使用函数_DevWrite
进行写操作。在执行这些操作之前,为了使高级应用层能够识别我们的硬盘,我们需要使用
如下的结构: 130
const FS_DEVICE_TYPE FS_idedevice_driver = {
"ide",
1,
_FS_IDE_DevStatus,
_FS_IDE _DevRead, 135
_FS_IDE _DevWrite,
_FS_IDE _DevIoCtl,
_FS_IDE _WriteBurst
};
在建立了上述结构之后,通过 NIOS 完成应用层的功能识别 IDE 硬盘,同时因为本高速140
数据存储系统只要求图像数据以文件系统的方式管理写入硬盘文件,而不需要进行读操作,
同时为了加快写硬盘的速度,只需编写_DevWriteBurst 这个函数进行多块写入操作即可,该
函数内容编写如下所示:
static char _IdeDrive[(long)FS_RR_BLOCKNUM * FS_SEC_SIZE];
static int _FS_IDE_WriteBurst(FS_U8 Unit, 145
FS_U32 SectorNo,
FS_U32 NumSectors,
const void *pBuffer)
{
if (SectorNo + NumSectors > FS_RR_BLOCKNUM) 150
{
FS_DEBUG_ERROROUT("_FS_IDE_WriteBurst: Sector out of range\n");
return -1;
}
MEMCPY(((char*)&_IdeDrive[0])+SectorNo*FS_SEC_SIZE,pBuffer,NumSectors 155
*FS_SEC_SIZE);
return 0;
}
其中 Unit 代表媒体的数量可以设为‘1’;NumSectors 代表写入硬盘的扇区数,SectorNo
表示写入硬盘的起始扇区数。其他的相关函数由于篇幅限制这里就不一一列出。 160
NIOSⅡ嵌入式软核的设计
使用 QuartusⅡ软件中的 SOPC Builder 建立 NIOS 嵌入式软核处理器应用系统,首先在
Quartus 下建立存储系统工程,使用的 FPGA 芯片为 Altera 公司的 cyclone Ⅱ系列芯片
EP2C35F672C[7],然后使用 NIOS ⅡIDE 进行μC/FS 文件系统移植的相关工作。
综合比较处理器的性能及其占用的逻辑资源,选择标准型内核 NIOSⅡ/s 作为移植工作165
的处理器,该类型的处理器完成存储系统的所有控制功能,包括执行文件系统管理。
在 SOPC Builder 下将 NIOS 的各种外设加入到该系统中,图 4 为 NIOSⅡ软核处理器系
统组成图,从图中可知系统的各部分组成,cpu 即为嵌入式软核;jtag_uart_0 为 JTAG 控制
模块控制上位机与 NIOS 的通信;pixel_num 为存储系统前端图像传感器传回的图像数据帧
- 6 -
中国科技论文在线
的数量,图中的各种存储介质如 sram、flash 等为存储系统的各种外设;lba 为写硬盘地址模170
块,提供写硬盘的地址信息;ucfs 为移植的文件系统模块,该存储系统通过此,模块对写入
硬盘的数据进行管理。
图 Ⅱ软核处理器系统组成
NIOSⅡSoft processors systems 175
此后则是对 ATA I/O 寄存器功能存取功能的设置。经过这些寄存器的设置后以及相关
函数的编写后,所有的移植工作就完成了,将该 NIOS 模块加入到 QuartusⅡ工程中[8],对整
个工程进行编译仿真验证设计的正确性,最后下载到硬件平台上,然后我们就可以对移植的
文件系统进行测试,经测试我们移植的μC/FS 文件系统能够完成写入文件、删除文件等基180
本操作,满足我们预期的设计要求,μC/FS 文件系统移植成功。
5 结论
本设计通过移植的μC/FS 文件系统到高速数据存储系统内,将系统前端采集的图像数
据按文件系统的格式进行存储,最后成功实现其功能。移植过程简单,使我们可以直接对存
储的图像文件进行操作,极大的缩短了科研周期,为以后我们的遥感图像领域以及其他学科185
的科研工作提供便利。
[参考文献] (References)
[1] 陈智育. 嵌入式系统中的 flash 文件系统[J]. 单片机与嵌入式系统应用,2002,(2):5-8.
[2] 郝伟,李竟兆. 基于 uc/FS的大容量微存储FAT32格式的实现与应用[J]. 电脑知识与技术,2006,113-186. 190
[3] μC-FS-UserManualV2-36b[S]. Micrium Technologies Corporation, 2005.
[4] 潘松. SOPC 技术实用教程[M]. 北京:清华大学出版社,2004.
[5] 潘松,王国栋.VHDL 实用教程[M]. 杭州:电子科技大学出版社,1999.
[6] 赫建国,倪德客,郑燕. 基于 NiosⅡ内核的 FPGA 电路系统设计[M]. 北京:电子工业出版社,2010.
[7] Ⅱhandbook[OL]. 195
[8] 杨晓慧,杨永健. 基于 FPGA 的 EDA/SOPC 技术与 VHDL[M]. 北京:国防工业出版社,2007.