个人/家庭网络硬盘的设计及实现*
2012-08-13刘剑,张刚,常青
刘 剑,张 刚,常 青
(太原理工大学 信息工程学院,山西 太原 030024)
USB移动硬盘需要用户随身携带,易感染病毒且主机关机后无法使用。随着高性能网络技术的不断进步,网络存储方式逐渐兴起[1],个人/家庭网络硬盘是为适应当前对远程文件资源访问的迫切需求而设计开发的一种基于FPGA的嵌入式网络存储设备。它是一种将文件上传至服务器主机、用户可在任意地点的客户端上通过网络访问该文件的存储方式。
图1 系统整体架构
本文设计实现了一种基于 FPGA的个人/家庭网络硬盘,其系统整体架构如图1所示,分为硬件层、内核层及用户层。用户层是系统的交互操作界面,硬件层实现系统对底层硬盘的各种操作,内核层负责在用户层与硬件层之间传递驱动的相关参数及数据。利用XUPV5 LX110T FPGA开发板设计并挂载ATA控制器的IP核;移植PetaLinux操作系统并添加独立的FAT32文件系统模块;用户端采用B/S模式。由于用户端是标准的浏览器,用户只需要一台能上网的PC机就可利用Web浏览器调用相应的通用网关接口CGI(Common Gateway Interface)程序完成对硬盘的远程操作。个人/家庭网络硬盘可全天候不间断工作,方便快捷,通过挂载多个硬盘可扩展用户存储容量。未来可以参考本文提出的通用方法结合不同的需求对系统进一步开发与完善。
1 系统设计
1.1 硬件平台简介
图2 系统硬件平台结构
系统硬件平台结构如图2所示。系统采用Xilinx公司的XUPV5 LX110T FPGA开发板,内嵌MicroBlaze软核、以太网控制器、Flash、DDR等模块,通过 PLB总线实现模块之间的交互通信。底层数据存储设备使用具有IDE接口的ATA硬盘,通过V5开发板的扩展接口与FPGA芯片相连,用户端通过访问网络实现对硬盘的远程访问。
图2模块中,除阴影所示模块需自行开发外,其他部分均由XUPV5 LX110T FPGA开发板提供。
1.2 ATA主机控制器的IP核设计
本文采用具有IDE接口的希捷ST340014A硬盘(40 GB)作为数据存储设备,依据ATA/ATAPI-6协议[2]完成了对ATA主机控制器的设计,并将其封装为IP核以方便集成到不同总线结构的ASIC或SoC系统中[3]。ATA主机控制器的结构如图3所示。
硬件层的ATA主机控制器包括复位、PIO控制、MDMA(Multiword DMA)控制、Ultra DMA控制、接收/发送缓存等6个主要模块,全部用VHDL语言编程实现,仿真调试通过。其中,复位模块在初始化或异常情况下对各个模块的重置复位;PIO模块控制PIO模式的读写硬盘操作;MDMA模块实现对硬盘的多字DMA模式读写操作;Ultra DMA控制模块用于实现对以Ultra DMA方式访问硬盘的整个流程的控制;接收/发送缓存模块用于控制数据的缓存。
实现ATA主机控制器的关键除了要按要求设计严格的时序逻辑及状态机外,还需要实现对协议指定寄存器的读写操作。因为命令及命令参数的传递、设备状态信息的传递都是通过对寄存器的读写来完成的。ATA协议中各寄存器的数据传输遵守PIO传输模式,通过设置CS1-、CS0-和 DA[2:0]选通寄存器地址,DIOR-/DIOW-信号控制读写。同时,ATA主机控制器或硬盘把待传送的数据放到数据总线上,并根据数据传送的方向由控制器或硬盘读取总线上的数据。ATA/ATAPI-6协议中各寄存器[4]的定义如表1所示。
实现内核驱动与底层硬盘的对接过程为:首先将VHDL设计的ATA主控制器模块封装成用户定制的IP核,通过PLB总线与MicroBlaze处理器互连;其次对XG-pio函数进行封装。硬盘驱动定义如表2所示。
1.3 FAT文件系统
文件系统作为操作系统与底层硬件之间的桥梁,在嵌入式系统等各个领域得到了广泛的应用。当前U盘、MP3、MP4等设备几乎都采用了微软公司 FAT32[5]文件系统,但由于并未公布FAT32文件系统的源码,本文采用开源项目FatFS[6]。FatFS独立于底层的DISK I/O层,不依赖于硬件架构并与Windows的FAT文件系统有着良好的兼容性。
表1 寄存器地址及名称
表2 硬盘驱动定义
FAT文件系统可划分为需求、逻辑和物理三个层次。需求层支持用户的基本文件操作;逻辑层实现FAT文件系统到物理层的映射;物理层实现与物理存储介质的接口(包括基本的读写扇区、硬盘复位等操作)。物理层主要实现 5个接口:disk_initialize(初始化磁盘驱动器)、disk_status(获取磁盘状态)、disk_read(读 扇 区)、disk_write(写扇区)、disk_ioctl(控制设备关联特性)。利用这 5个接口可以实现FAT文件系统的需求和逻辑。
文件系统物理层的5个接口函数调用PetaLinux内核驱动实现底层硬盘与文件系统的对接,进而实现FAT文件系统的各个流程,例如读扇区disk_read操作将调用表2中定义的xgpio_ata_ioctl、xgpio_ata_read等驱动函数,这些函数实现了ATA IP核中对相应的寄存器读写功能。首先,将参数及数据传递到内核中;其次,将xgpio_ata_ioctl、xgpio_ata_read等驱动函数封装到应用层中的disk_read中,满足文件系统逻辑层的需求,进而实现文件系统需求层各个接口。所有的FAT文件系统操作流程都封装为库,被用户直接调用。文件系统的接口函数全部被定义到应用层,供CGI调用。
经测试,编写的FatFS文件系统物理层接口函数工作正常,可以满足逻辑层、需求层的所有需求。
1.4 用户接口
PetaLinux操作系统是专门用于FPGA的全功能嵌入式Linux操作系统[7],用户可使用其自带的工具方便快捷地搭建所需的开发环境。PetaLinux中集成了对部分常用IP核的支持,减少了用户移植、编写驱动的工作量。同时源码中包含大量的脚本语言,简化了操作。编译生成并拷贝FatFS库到PetaLinux/bin目录下,用户便可将其作为应用程序进行调用。
用户和整体系统的接口通过满足CGI规范的C语言编写实现。服务器采用完全支持CGI的高性能单任务型嵌入式Web服务器Boa。移植PetaLinux时需开启对Boa的支持。
GI工作流程:当输入目标板的IP地址后,用户的Web浏览器与Boa服务器建立TCP连接;当在Web页面上完成一定操作后,将会向PetaLinux中的Boa服务器发出CGI请求,Boa服务器接收到该请求后将会创建一个CGI进程,并将具体的环境变量、参数与标准的输入方式传递给CGI程序;CGI程序完成相应的处理后再将结果传给Boa服务器,服务器将输出内容添加一定的标识信息后以HTML页面的形式返回并呈现给用户[8],具体流程如图4所示。例如,用户点击“Read”按钮时,将触发HTML页面中的表单并向服务器发出HTTP请求(CGI请求),发往<FORM>标记中的 ACTION 属性标识的地址(此处为 CGI处理程序)。
2 系统特点
个人/家庭网络硬盘具以下特点:
(1)较高的私有性及安全性。存储设备用户可见,确保了用户数据的私有性及安全性;
(2)即插即用。安装简单,插上电源及网线即可使用;
(3)采用浏览器访问。只要一台可以上网的PC机,利用浏览器即可实现对硬盘的访问;
(4)易操作和易扩展。通过增加硬盘数量或更换存储介质可以支持用户扩充存储容量。
实验室测试环境中,在浏览器输入开发板IP地址(192.168.0.10)与FPGA开发板建立连接,用户操作主界面如图5所示。
点击“上传文件”按钮后将提示用户选择要上传的文件,文件确定后点击 “Submit”将执行上传文件的操作,即由本地主机写入至远端的硬盘中。
本文设计并实现的个人/家庭网络硬盘,在XUPV5 LX110T FPGA开发板上挂载了ATA控制器的IP核、移植了PetaLinux操作系统、添加了独立的FAT32文件系统模块、设计了硬盘的人机交互界面,通过实际系统验证证明了该方案的可行性。未来可结合相应的需求对个人/家庭网络硬盘进一步开发与完善。
[1]邓玉辉.基于网络磁盘阵列的海量信息存储系统[D].武汉:华中科技大学,2004.
[2]ANSI INCITS.Information technology-AT attachment with packet interface-6[S].USA:T13 Technical Committee,2002.
[3]齐作府.基于 FPGA的 ATA Device IP研究[D].阜新:辽宁工程技术大学,2008.
[4]李晓娟.基于 FPGA的 Ultra DMA写控制器的实现[J].科学技术与工程,2007(15):3746-3749.
[5]Microsoft Corporation.Microsoft EFI FAT32 file system specification[S].2000.
[6]FatFs generic FAT file system module[EB/OL].(2011-11-04)[2012-04-20].http://elm-chan.org/fsw/ff/00index_e.html.
[7]薛慧敏,武传华,路后兵,等.基于 MicroBlaze的 PetaLinux嵌入式操作系统移植[J].微计算机信息,2011,27(8):108-110.
[8]刘辉,刘毅敏.嵌入式 Web服务器的研究与设计[J].数字通信,2011(4):78-81.