文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2014)12-0030-03
0 引言
隨著網(wǎng)絡(luò)技術(shù)的不斷進(jìn)步以及網(wǎng)絡(luò)應(yīng)用程序的增加,人們對(duì)簡(jiǎn)單快捷易管理易攜帶存儲(chǔ)方式的需求愈加強(qiáng)烈,而網(wǎng)絡(luò)硬盤可以不需要攜帶任何存儲(chǔ)設(shè)備,只要通過(guò)網(wǎng)絡(luò)就能隨時(shí)隨地對(duì)目標(biāo)文件進(jìn)行訪問(wèn)。
目前,已有眾多企業(yè)推出了各類的網(wǎng)絡(luò)硬盤比如百度網(wǎng)盤、微軟Skydrive、華為網(wǎng)盤等,注冊(cè)用戶可以通過(guò)賬號(hào)密碼隨時(shí)隨地訪問(wèn)自己的已經(jīng)上傳的內(nèi)容,對(duì)文件進(jìn)行管理,實(shí)現(xiàn)了無(wú)存儲(chǔ)設(shè)備的遠(yuǎn)程訪問(wèn),并且不會(huì)損壞文件。但是,目前已有的網(wǎng)絡(luò)硬盤均是基于B/S模式的,雖然支持文件的一次性上傳下載及在線瀏覽等功能,但與操作本地文件之間有本質(zhì)區(qū)別,用戶不能在線對(duì)文件進(jìn)行編輯保存。此外,該模式的網(wǎng)絡(luò)硬盤還存在安全性能差,對(duì)服務(wù)器性能要求高、與服務(wù)器交互性差及存儲(chǔ)數(shù)據(jù)傳輸速度慢等問(wèn)題。
本文通過(guò)FPGA編程設(shè)計(jì)實(shí)現(xiàn)了一種基于C/S模式的網(wǎng)絡(luò)硬盤,與現(xiàn)有B/S模式網(wǎng)絡(luò)硬盤不同,它是通過(guò)客戶端與服務(wù)器進(jìn)行直接相連的,沒(méi)有中間環(huán)節(jié),因此具有響應(yīng)速度快、交互性強(qiáng)、網(wǎng)絡(luò)通信量低、易于處理大量數(shù)據(jù)等特點(diǎn),而且,通過(guò)網(wǎng)絡(luò)用戶可以對(duì)文件進(jìn)行在線操作。
1 系統(tǒng)簡(jiǎn)介及平臺(tái)搭建
1.1 系統(tǒng)整體架構(gòu)
本文設(shè)計(jì)實(shí)現(xiàn)了一種基于FPGA的C/S模式網(wǎng)絡(luò)硬盤,其系統(tǒng)整體框架如圖1所示,主要包括用戶層、內(nèi)核層和硬件層。其中,用戶層主要完成的是客戶端與服務(wù)器通信;硬件層負(fù)責(zé)對(duì)存儲(chǔ)硬盤的操作,可以通過(guò)ATA硬盤控制器對(duì)上層命令進(jìn)行解析,對(duì)硬盤進(jìn)行數(shù)據(jù)讀取和存入;內(nèi)核層是用戶層與硬件層之間的連接樞紐,該層可以通過(guò)文件系統(tǒng)以及驅(qū)動(dòng)程序?qū)τ脩魧影l(fā)送的請(qǐng)求進(jìn)行處理并對(duì)硬件層硬盤進(jìn)行調(diào)用訪問(wèn)。
1.2 系統(tǒng)硬件平臺(tái)搭建
系統(tǒng)是在XUPV5_LX110T開(kāi)發(fā)板上外接ATA硬盤以及網(wǎng)線實(shí)現(xiàn)的,結(jié)構(gòu)組成如圖2所示。平臺(tái)是以Xilinx公司的XUPV5_LX110T FPGA開(kāi)發(fā)板為基礎(chǔ)搭建的,通過(guò)對(duì)開(kāi)發(fā)板內(nèi)嵌的各個(gè)模塊進(jìn)行選擇,然后連接DDR2_SRAM、Hard_Ethernet_MAC、RS232_Uart_1等基本外部設(shè)備,最后添加硬盤控制器IP核,完成系統(tǒng)整體平臺(tái)的搭建。其中,核心處理器選擇的是Microblaze軟核處理器。
2 系統(tǒng)設(shè)計(jì)
2.1 硬件層設(shè)計(jì)
由于選用的XUPV5_LX110T FPGA開(kāi)發(fā)板可以提供圖2中的大部分模塊,因此,系統(tǒng)的硬件層主要是對(duì)ATA硬盤控制器IP核[1]的設(shè)計(jì)。本文通過(guò)對(duì)ATA/ATAPI-6協(xié)議進(jìn)行分析,用VHDL語(yǔ)言設(shè)計(jì)實(shí)現(xiàn)對(duì)硬盤數(shù)據(jù)進(jìn)行扇區(qū)讀寫操作,其具體模塊結(jié)構(gòu)圖3所示。
硬盤控制器按照功能模塊共劃分為BRAM接收和發(fā)送模塊、指令解析模塊、硬盤訪問(wèn)控制模塊、CRC校驗(yàn)?zāi)K以及差錯(cuò)處理模塊。其中,指令解析模塊負(fù)責(zé)對(duì)上層發(fā)送的請(qǐng)求進(jìn)行監(jiān)控解析,并觸發(fā)硬盤訪問(wèn)控制模塊從而對(duì)硬盤操作;硬盤訪問(wèn)控制模塊在接收到觸發(fā)命令后,對(duì)基本控制時(shí)序進(jìn)行設(shè)置,包括硬盤硬件復(fù)位、硬盤模式設(shè)置、扇區(qū)讀寫等;CRC校驗(yàn)?zāi)K對(duì)讀寫的數(shù)據(jù)進(jìn)行校驗(yàn);差錯(cuò)處理模塊是對(duì)錯(cuò)誤指令或指令執(zhí)行異常的情況進(jìn)行處理。以上所有模塊均是用VHDL語(yǔ)言實(shí)現(xiàn)的,并通過(guò)仿真調(diào)試及測(cè)試。
系統(tǒng)中內(nèi)核層與硬盤之間是以PLB總線掛載的方式互連的,掛載后,可以通過(guò)硬盤驅(qū)動(dòng)程序[2],以寄存器的方式訪問(wèn)硬盤數(shù)據(jù),因此在以上功能模塊設(shè)計(jì)以后,要對(duì)硬盤控制器按照自定義IP核的方法進(jìn)行IP核封裝來(lái)作為外接設(shè)備。
2.2 內(nèi)核層設(shè)計(jì)
本系統(tǒng)采用FAT32文件系統(tǒng)[3]對(duì)用戶數(shù)據(jù)進(jìn)行管理。為適應(yīng)上層用戶層的調(diào)用,本文對(duì)FAT32文件系統(tǒng)進(jìn)行了改進(jìn):首先對(duì)文件系統(tǒng)信息建立全局變量struct fs_fat32 fatfs,并用struct node_fat32初始化文件節(jié)點(diǎn);然后重寫對(duì)文件及目錄的操作函數(shù)以適應(yīng)上層NFS的調(diào)用;最后編寫FAT32文件系統(tǒng)的Makefile文件進(jìn)行測(cè)試。測(cè)試證明可以對(duì)文件以及目錄進(jìn)行正確讀寫、修改、刪除等基本操作。
2.3 用戶層設(shè)計(jì)
用戶層設(shè)計(jì)是系統(tǒng)的核心部分,主要是對(duì)NFS服務(wù)器端的設(shè)計(jì)。NFS是一種分布式文件系統(tǒng)協(xié)議,通過(guò)網(wǎng)絡(luò),用戶可以像訪問(wèn)本地文件一樣訪問(wèn)遠(yuǎn)端系統(tǒng)上的文件。因此結(jié)合RPC(Remote Procedure Call,遠(yuǎn)程過(guò)程調(diào)用)和XDR(External Data Representation,外部數(shù)據(jù)表示),就可以實(shí)現(xiàn)跨網(wǎng)絡(luò)、跨操作系統(tǒng)、跨文件系統(tǒng)的訪問(wèn)。其中,RPC是可實(shí)現(xiàn)遠(yuǎn)程客戶端對(duì)服務(wù)器端函數(shù)的調(diào)用。而XDR保證了數(shù)據(jù)格式的一致性。
NFS服務(wù)器端[4]設(shè)計(jì)主要是實(shí)現(xiàn)一次完整的NFS文件訪問(wèn),通過(guò)客戶端與服務(wù)器端RPC的Portmap、Mountd、NFSD 3個(gè)模塊間的交互完成,其交互的具體過(guò)程如圖4所示。在交互過(guò)程中,每當(dāng)服務(wù)器端NFSD模塊接收到客戶端請(qǐng)求時(shí),就會(huì)對(duì)接收到的數(shù)據(jù)進(jìn)行XDR解碼處理,并根據(jù)解碼得到的過(guò)程號(hào)調(diào)用NFSD程序中的過(guò)程進(jìn)行操作,NFSD過(guò)程會(huì)通過(guò)調(diào)用底層文件系統(tǒng)對(duì)請(qǐng)求進(jìn)行處理,并將處理結(jié)果進(jìn)行XDR編碼后發(fā)送回客戶端,其具體操作流程如圖5所示。
考慮到NFS整體與內(nèi)核聯(lián)系緊密,可移植性低,因此本文在保持NFS功能的基礎(chǔ)上對(duì)其進(jìn)行了簡(jiǎn)化設(shè)計(jì)及改進(jìn),首先將Portmap(RPCbind)、Mountd、NFSD寫成應(yīng)用程序,采用Linux中混合多端口的異步Socket[5]編程方法。分別基于TCP和UDP傳輸協(xié)議對(duì)NFSD、Mountd、Portmap進(jìn)行套接字創(chuàng)建,然后設(shè)置全局變量svc_fdset、fd_set對(duì)Socket進(jìn)行管理,并利用select函數(shù)選擇有請(qǐng)求的套接字,最后用recv函數(shù)和send函數(shù)進(jìn)行數(shù)據(jù)接收和發(fā)送。其中,本文對(duì)NFSD、Mountd、Portmap這三個(gè)進(jìn)程用結(jié)構(gòu)體svc_program進(jìn)行定義,并用結(jié)構(gòu)體中pg_next將各個(gè)進(jìn)程加入鏈表,其中,鏈表頭為NFSD程序。在接收到請(qǐng)求后,服務(wù)器端從鏈表頭對(duì)鏈表進(jìn)行順序查找,找到需要的服務(wù),對(duì)其按照?qǐng)D5所示的流程進(jìn)行處理。
3 系統(tǒng)驗(yàn)證
本系統(tǒng)經(jīng)過(guò)系統(tǒng)移植[6]將軟硬件進(jìn)行整合來(lái)完成系統(tǒng)的整體設(shè)計(jì)。先下載petalinux-v0.40-final內(nèi)核源碼到虛擬機(jī)“/root/桌面”目錄下移植Petalinux操作系統(tǒng),然后將硬件平臺(tái)信息及硬件工程添加到操作系統(tǒng)中,最后將NFS服務(wù)程序以應(yīng)用程序的形式添加到操作系統(tǒng)內(nèi)核,同時(shí)將硬盤控制器封裝為IP核添加到內(nèi)核中。添加完成后對(duì)內(nèi)核進(jìn)行編譯并燒寫到開(kāi)發(fā)板中,運(yùn)行整個(gè)系統(tǒng)。
系統(tǒng)運(yùn)行后,打開(kāi)客戶端,在客戶端輸入掛載命令:sudo mount-t nfs-o nolock 192.168.xx.xx:/ /tmp/nfs,其中,192.168.xx.xx為開(kāi)發(fā)板IP地址,本文中為192.168.0.10,
“/tmp/nfs”為客戶端掛載目錄。測(cè)試結(jié)果如圖6所示,圖中在客戶端“/tmp/nfs”中顯示的文件,實(shí)際為服務(wù)器端硬盤中的文件,在客戶端nfs目錄下即可打開(kāi)這些文件,在線對(duì)文件進(jìn)行讀寫、修改保存等操作,而且拖動(dòng)文件即可實(shí)現(xiàn)文件下載上傳,速度可達(dá)1.3 MB/s。實(shí)驗(yàn)表明,設(shè)計(jì)的基于FPGA的C/S模式網(wǎng)絡(luò)硬盤具有以下優(yōu)勢(shì):(1)交互性強(qiáng),支持用戶在線操作文件;(2)實(shí)用性廣,可進(jìn)行硬盤陣列擴(kuò)展,擴(kuò)大內(nèi)存;(3)兼容性強(qiáng),C/S模式網(wǎng)絡(luò)硬盤具有與本地硬盤相同的兼容性,不限制存儲(chǔ)文件的格式、大小及存儲(chǔ)時(shí)間;(4)安全性高,采取賬號(hào)密碼映射IP的方式,存儲(chǔ)文件僅登錄用戶可見(jiàn)。
4 結(jié)論
本文設(shè)計(jì)了一種基于FPGA的C/S模式網(wǎng)絡(luò)硬盤,在XUPV5_LX110T開(kāi)發(fā)板搭建了系統(tǒng)并驗(yàn)證通過(guò)。結(jié)果表明該種網(wǎng)絡(luò)硬盤具備很好的可行性,可以實(shí)現(xiàn)遠(yuǎn)程訪問(wèn),而且傳輸速度快,支持在線編輯,具有廣泛的應(yīng)用前景及參考價(jià)值。
參考文獻(xiàn)
[1] 彭維.基于PLB總線的用戶IP核接口技術(shù)研究[D].合肥:合肥工業(yè)大學(xué),2011.
[2] 宋寶華.Linux設(shè)備驅(qū)動(dòng)開(kāi)發(fā)詳解(第二版)[M].北京:人民郵電出版社,2010.
[3] 楊明極,陳方縣,吳學(xué)君.嵌入式系統(tǒng)中SD卡的FAT32文件系統(tǒng)的設(shè)計(jì)[J].電聲技術(shù),2010,34(4):36-39.
[4] 劉榮勝.一種基于異步回調(diào)機(jī)制的NFS服務(wù)端設(shè)計(jì)與實(shí)現(xiàn)[J].蘇州市職業(yè)大學(xué)學(xué)報(bào),2013(1):41-43.
[5] STEVENS W R.Linux network programming——Socket[Z].2011.
[6] 薛慧敏,武傳華,路后兵.MicroBlaze處理器的PetaLinux操作系統(tǒng)移植[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2011,11(4):67-69.