基于FPGA的C/S模式网络硬盘设计与实现
2014-12-10郭燕妮
郭燕妮,何 杰,张 刚
(太原理工大学 信息工程学院,山西 太原 030024)
0 引言
随着网络技术的不断进步以及网络应用程序的增加,人们对简单快捷易管理易携带存储方式的需求愈加强烈,而网络硬盘可以不需要携带任何存储设备,只要通过网络就能随时随地对目标文件进行访问。
目前,已有众多企业推出了各类的网络硬盘比如百度网盘、微软Skydrive、华为网盘等,注册用户可以通过账号密码随时随地访问自己的已经上传的内容,对文件进行管理,实现了无存储设备的远程访问,并且不会损坏文件。但是,目前已有的网络硬盘均是基于B/S模式的,虽然支持文件的一次性上传下载及在线浏览等功能,但与操作本地文件之间有本质区别,用户不能在线对文件进行编辑保存。此外,该模式的网络硬盘还存在安全性能差,对服务器性能要求高、与服务器交互性差及存储数据传输速度慢等问题。
本文通过FPGA编程设计实现了一种基于C/S模式的网络硬盘,与现有B/S模式网络硬盘不同,它是通过客户端与服务器进行直接相连的,没有中间环节,因此具有响应速度快、交互性强、网络通信量低、易于处理大量数据等特点,而且,通过网络用户可以对文件进行在线操作。
1 系统简介及平台搭建
1.1 系统整体架构
图1 系统整体架构图
本文设计实现了一种基于FPGA的C/S模式网络硬盘,其系统整体框架如图1所示,主要包括用户层、内核层和硬件层。其中,用户层主要完成的是客户端与服务器通信;硬件层负责对存储硬盘的操作,可以通过ATA硬盘控制器对上层命令进行解析,对硬盘进行数据读取和存入;内核层是用户层与硬件层之间的连接枢纽,该层可以通过文件系统以及驱动程序对用户层发送的请求进行处理并对硬件层硬盘进行调用访问。
1.2 系统硬件平台搭建
系统是在XUPV5_LX110T开发板上外接ATA硬盘以及网线实现的,结构组成如图2所示。平台是以Xilinx公司的XUPV5_LX110T FPGA开发板为基础搭建的,通过对开发板内嵌的各个模块进行选择,然后连接DDR2_SRAM、Hard_Ethernet_MAC、RS232_Uart_1 等 基 本外部设备,最后添加硬盘控制器IP核,完成系统整体平台的搭建。其中,核心处理器选择的是Microblaze软核处理器。
图2 硬件平台
2 系统设计
2.1 硬件层设计
由于选用的XUPV5_LX110T FPGA开发板可以提供图2中的大部分模块,因此,系统的硬件层主要是对ATA硬盘控制器IP核[1]的设计。本文通过对ATA/ATAPI-6协议进行分析,用VHDL语言设计实现对硬盘数据进行扇区读写操作,其具体模块结构图3所示。
图3 硬盘控制器模块图
硬盘控制器按照功能模块共划分为BRAM接收和发送模块、指令解析模块、硬盘访问控制模块、CRC校验模块以及差错处理模块。其中,指令解析模块负责对上层发送的请求进行监控解析,并触发硬盘访问控制模块从而对硬盘操作;硬盘访问控制模块在接收到触发命令后,对基本控制时序进行设置,包括硬盘硬件复位、硬盘模式设置、扇区读写等;CRC校验模块对读写的数据进行校验;差错处理模块是对错误指令或指令执行异常的情况进行处理。以上所有模块均是用VHDL语言实现的,并通过仿真调试及测试。
系统中内核层与硬盘之间是以PLB总线挂载的方式互连的,挂载后,可以通过硬盘驱动程序[2],以寄存器的方式访问硬盘数据,因此在以上功能模块设计以后,要对硬盘控制器按照自定义IP核的方法进行IP核封装来作为外接设备。
2.2 内核层设计
本系统采用FAT32文件系统[3]对用户数据进行管理。为适应上层用户层的调用,本文对FAT32文件系统进行了改进:首先对文件系统信息建立全局变量struct fs_fat32 fatfs,并用 struct node_fat32初始化文件节点;然后重写对文件及目录的操作函数以适应上层NFS的调用;最后编写FAT32文件系统的Makefile文件进行测试。测试证明可以对文件以及目录进行正确读写、修改、删除等基本操作。
2.3 用户层设计
用户层设计是系统的核心部分,主要是对NFS服务器端的设计。NFS是一种分布式文件系统协议,通过网络,用户可以像访问本地文件一样访问远端系统上的文件。因此结合RPC(Remote Procedure Call,远程过程调用)和 XDR(External Data Representation,外部数据表示),就可以实现跨网络、跨操作系统、跨文件系统的访问。其中,RPC是可实现远程客户端对服务器端函数的调用。而XDR保证了数据格式的一致性。
NFS服务器端[4]设计主要是实现一次完整的NFS文件访问,通过客户端与服务器端RPC的Portmap、Mountd、NFSD 3个模块间的交互完成,其交互的具体过程如图4所示。在交互过程中,每当服务器端NFSD模块接收到客户端请求时,就会对接收到的数据进行XDR解码处理,并根据解码得到的过程号调用NFSD程序中的过程进行操作,NFSD过程会通过调用底层文件系统对请求进行处理,并将处理结果进行XDR编码后发送回客户端,其具体操作流程如图5所示。
图4 NFS时序图
图5 NFSD过程处理流程
考虑到NFS整体与内核联系紧密,可移植性低,因此本文在保持NFS功能的基础上对其进行了简化设计及改进,首先将 Portmap(RPCbind)、Mountd、NFSD 写成应用程序,采用Linux中混合多端口的异步Socket[5]编程方法。分别基于 TCP和 UDP传输协议对 NFSD、Mountd、Portmap进行套接字创建,然后设置全局变量svc_fdset、fd_set对Socket进行管理,并利用select函数选择有请求的套接字,最后用recv函数和send函数进行数据接收和发送。其中,本文对NFSD、Mountd、Portmap这三个进程用结构体svc_program进行定义,并用结构体中pg_next将各个进程加入链表,其中,链表头为NFSD程序。在接收到请求后,服务器端从链表头对链表进行顺序查找,找到需要的服务,对其按照图5所示的流程进行处理。
3 系统验证
本系统经过系统移植[6]将软硬件进行整合来完成系统的整体设计。先下载petalinux-v0.40-final内核源码到虚拟机“/root/桌面”目录下移植Petalinux操作系统,然后将硬件平台信息及硬件工程添加到操作系统中,最后将NFS服务程序以应用程序的形式添加到操作系统内核,同时将硬盘控制器封装为IP核添加到内核中。添加完成后对内核进行编译并烧写到开发板中,运行整个系统。
系统运行后,打开客户端,在客户端输入挂载命令:sudo mount-t nfs-o nolock 192.168.xx.xx://tmp/nfs,其中,192.168.xx.xx为开发板IP地址,本文中为192.168.0.10,“/tmp/nfs”为客户端挂载目录。测试结果如图6所示,图中在客户端“/tmp/nfs”中显示的文件,实际为服务器端硬盘中的文件,在客户端nfs目录下即可打开这些文件,在线对文件进行读写、修改保存等操作,而且拖动文件即可实现文件下载上传,速度可达1.3 MB/s。实验表明,设计的基于FPGA的C/S模式网络硬盘具有以下优势:(1)交互性强,支持用户在线操作文件;(2)实用性广,可进行硬盘阵列扩展,扩大内存;(3)兼容性强,C/S模式网络硬盘具有与本地硬盘相同的兼容性,不限制存储文件的格式、大小及存储时间;(4)安全性高,采取账号密码映射IP的方式,存储文件仅登录用户可见。
图6 客户端访问图
4 结论
本文设计了一种基于FPGA的C/S模式网络硬盘,在XUPV5_LX110T开发板搭建了系统并验证通过。结果表明该种网络硬盘具备很好的可行性,可以实现远程访问,而且传输速度快,支持在线编辑,具有广泛的应用前景及参考价值。
[1]彭维.基于PLB总线的用户IP核接口技术研究[D].合肥:合肥工业大学,2011.
[2]宋宝华.Linux设备驱动开发详解(第二版)[M].北京:人民邮电出版社,2010.
[3]杨明极,陈方县,吴学君.嵌入式系统中 SD卡的 FAT32文件系统的设计[J].电声技术,2010,34(4):36-39.
[4]刘荣胜.一种基于异步回调机制的NFS服务端设计与实现[J].苏州市职业大学学报,2013(1):41-43.
[5]STEVENS W R.Linux network programming——Socket[Z].2011.
[6]薛慧敏,武传华,路后兵.MicroBlaze处理器的 PetaLinux操作系统移植[J].单片机与嵌入式系统应用,2011,11(4):67-69.