基于MPC860和VxWorks的硬件防火墻設(shè)計及實現(xiàn)
本方案所使用的器件大部分是嵌入式開發(fā)中最經(jīng)常使用的器件,所有的器件都具有一定的通用性,稍加改動即可應用到其他設(shè)計中。并且在該系統(tǒng)的基礎(chǔ)上能很容易地開發(fā)出適用于其他方面的網(wǎng)絡(luò)控制及通信系統(tǒng)。
1 系統(tǒng)硬件結(jié)構(gòu)及工作原理
1.1 系統(tǒng)結(jié)構(gòu)及特點
整個系統(tǒng)由核心板底板組成,核心板主要包括:核心CPU(MPC860)、Flash存儲器、SDRAM存儲器、標準的SODIMM接口、電源監(jiān)控及復位電路、時鐘驅(qū)動電路以及與底板相連的連接器。底板主要包括:100M網(wǎng)絡(luò)接口電路、10M網(wǎng)絡(luò)接口電路、BDM調(diào)試接口電路、系統(tǒng)供電電路、實現(xiàn)控制和監(jiān)控功能的RS232接口電路和與核心板相連的連接器。方案設(shè)計中將整個系統(tǒng)分為核心板和底板兩部分,分別設(shè)計實現(xiàn),既降低了整個系統(tǒng)的開發(fā)難度又使系統(tǒng)易于維護、升級和和擴展。
1.2 系統(tǒng)的功能框圖及工作原理
核心板的功能框圖如圖1所示。系統(tǒng)上電后,核心板通過連接器將電源從底板引上來。電源監(jiān)控及復位電路開始工作,產(chǎn)生復位信號。在復位信號產(chǎn)生后,核心板的核心CPU(MPC860)開始啟動。此時MPC860開始讀取數(shù)據(jù)線(D0~D15)上的值,并通過讀出的設(shè)置值來初始化CPU,主要包括存儲器初始化、中斷向量初始化、調(diào)試寄存器初始化等。當所有的硬件環(huán)境(主要指CPU中所有與操作系統(tǒng)相關(guān)的一些特殊功能寄存器,如SRR0、SRR1、CR等)初始化完畢后。系統(tǒng)會將控制權(quán)交給存儲在Flash中的操作系統(tǒng)(如Linux、vxWorks等),通過操作系統(tǒng)管理系統(tǒng)中的所有硬件及任務(wù)。通過操作系統(tǒng)的調(diào)度來實現(xiàn)核心板管理、控制底板,并通過底板的硬件實現(xiàn)硬件防火墻的路由、網(wǎng)關(guān)及內(nèi)容過濾等功能。
此外為提高核心板的適用范圍,在核心板上增加了一個標準的SODIMM插槽和總線復用電路,SODIMM插槽可通過跳線支持16MB、32MB、64MB及128MB內(nèi)存??偩€復用電路支持外部總線仲裁(即在同一系統(tǒng)中可以將多塊核心板加在同一總線上而不會產(chǎn)生沖突),本核心板可以不加任何改動即可用于其他系統(tǒng)中,包括多個核心板用于同一個系統(tǒng)[1][2]。
底板的功能框圖如圖2所示。當操作系統(tǒng)完全接管系統(tǒng)(包括對核心板底板所有硬件的管理)后,由操作系統(tǒng)發(fā)起任務(wù)控制底板上的資源,從而實現(xiàn)硬件防火墻的功能,包括路由功能、網(wǎng)關(guān)功能和內(nèi)容過濾的功能。同時連接器將核心板所有的引腳引出用于擴展設(shè)計。這樣設(shè)計的優(yōu)點是當系統(tǒng)進行局部更新或設(shè)計時,只要更改底板的設(shè)計即可,并極大降低了開發(fā)難度,同時也提高了本系統(tǒng)復用率。
2 關(guān)鍵器件和關(guān)鍵技術(shù)
2.1 系統(tǒng)核心CPU MPC860
MPC860是由基于Motorola的MC68360嵌入式通信控制器演變而來的。PowerPCTM結(jié)構(gòu)處理器由三個模塊組成,即PowerPCTM內(nèi)核、系統(tǒng)接口單元(SIU)及通信處理器模塊(CPM)。這三個模塊均采用32位內(nèi)部總線。MPC860的主處理器是32位的PowerPCTM內(nèi)核,能夠?qū)崿F(xiàn)內(nèi)存管理(MMU)以及指令與數(shù)據(jù)的緩存;MPC860的系統(tǒng)接口單元中,存儲器控制單元可支持多種高性能的存儲器,包括SDRAM和Flash,還增加了PCMCIA控制器及實時時鐘電路。MPC860采用了類似于MC68360的通信處理器模塊(CPM),并增加了I2C通道。MPC860的CPM贈加了DSP功能。詳細介紹見參考文獻[1][4]。
LXT972是Intel公司推出的符合IEEE標準的快速網(wǎng)絡(luò)物理收發(fā)器驅(qū)動芯片。適合于在100BASE-TX和10BASE-T標準的介質(zhì)連接中應用。除此之外,它還提供一種非常易于應用在10/100M介質(zhì)訪問控制器(MACs)的獨立介質(zhì)獨立接口(MII)。詳細介紹見參考文獻[2]。
LXT905是Intel公司生產(chǎn)的一款低電壓通用10Base-T收發(fā)器,適合于IEEE 802.3標準的物理層應用。LXT905的功能包括曼徹思特編碼/解碼,接收器壓制和發(fā)送脈沖波形休整、模糊識別、連接完整性測試和反極性探測和校正。LXT905驅(qū)動10Base-T雙絞線僅用單一3.3V或者5V供電的隔離變壓器。詳細介紹見參考文獻[3]。
3 設(shè)計方案的實現(xiàn)
3.1 硬件部分
由于篇幅有限,本文僅對系統(tǒng)的幾個具有代表性的電路進行分析。
3.1.1 核心板部分
由于本系統(tǒng)的最終設(shè)計目標是設(shè)計出一臺標準的嵌入式設(shè)備,所以在Flash存儲器電路上選用了兩片富士通生產(chǎn)的型號為MBM29LV160BT 16MB(2M×8/1M×16)位)的Flash存儲器,使用方式為2MX8位,在電路連接上,它占用了MPC860的存儲空間管理器的兩塊。兩片F(xiàn)lash存儲器的片選分別與MPC860的片選CS0#和CS1#相連。CS0接啟動Flash,一般將系統(tǒng)的啟動代碼燒錄進去。CS1接文件系統(tǒng)Flash,一般將操作系統(tǒng)和文件系統(tǒng)存儲在該Flash中。
本系統(tǒng)所使用的SDRAM存儲器為現(xiàn)代公司生產(chǎn)的型號為HY57V641620HG 4Banks×1M×16位Synchronous DRAM,使用的方式為將兩片SDRAM通過字擴展構(gòu)成4M×32位SDRAM,即共16MB的存儲器空間。在物理連接上該兩片SDRAM與MPC860的片選CS2#相連,占用MPC860的存儲空間管理器的一塊。除此之外該片選可通過跳線禁用。MPC860與SDRAM的接口電路如圖3所示。
為了提高本系統(tǒng)的應用范圍,增加系統(tǒng)的存儲器空間,系統(tǒng)設(shè)計在核心板上增加了一個144pin的標準SODIMM插槽,通過跳線可以支持16MB、32MB、64MB、128MB的標準內(nèi)存。與MPC860的片選CS5#和CS6#物理連接。
硬件設(shè)置字電路如圖4所示。
在上電復位和硬件復位時,CPU除了讀取時鐘的缺省設(shè)置外,還會從數(shù)據(jù)總線上讀取硬件復位設(shè)置字(HRCW),如圖4所示。這個16位的HRCW字必須用上拉電阻進行設(shè)置,若未加上拉電阻,各數(shù)據(jù)位的值缺省為0。
在本系統(tǒng)中,硬件復位設(shè)置字用三個總線驅(qū)動器244加到數(shù)據(jù)總線上實現(xiàn)。硬件復位的設(shè)置字如下:
上電復位時,MODCK1=1、MODCK2=0,選則EXTCLK為OSCCLK的輸入。
D0=0,即EARB=0,本系統(tǒng)采用內(nèi)部總線仲裁機制。
D1=0(可通過跳線設(shè)置成1),即IIP=0,本系統(tǒng)復位中斷向量的地址為0XFFF00100,可通過跳線設(shè)置成0X00000100。
D2=1,即BBE=1,本系統(tǒng)的啟動設(shè)備不支持突發(fā)模式。
D3=0,即BDIS=0,啟動禁止位禁止,硬件復位后內(nèi)存控制器將所有的地址都映射到BANK0區(qū)。從CS0#連接的Flash啟動。
D4=0,D5=1,即BPS=01,系統(tǒng)啟動后數(shù)據(jù)總線工作在8位模式。
D6=0;系統(tǒng)保留位。
D7=1,D8=0,即ISB=10,系統(tǒng)復位后內(nèi)部內(nèi)存的起始地址為0XFF000000H。
D9=1,D10=1,即DBGC=11,對MPC860的一些復用引腳進行設(shè)置。使系統(tǒng)復位后MPC860的一些復用引腳工作在確定的引腳狀態(tài)。以滿足系統(tǒng)的需求。
D11=0,D12=0,即DBPC=00,MPC860的調(diào)試端口BDM調(diào)試端口管腳設(shè)置。
D13=0,D14=0,即EBDF=00,總線工作在全速模式下。
D15=0,即CLES=0;數(shù)據(jù)存儲模式為大端模式。
在本系統(tǒng)中為減少PCB板尺寸提高系統(tǒng)的可靠性,采用Cadence Allego SPB15.1軟件,布成8層板。在提高電磁兼容性方面。除了在PCB板上增加地層外,在PCB板的上下表面層板的周圍增加貫穿孔以增加整個PCB板的抗干擾性和電磁兼容性。
3.1.2 底板部分
本系統(tǒng)中100M網(wǎng)絡(luò)驅(qū)動電路為主要部分,是本系統(tǒng)與外網(wǎng)相連的接口,所有的網(wǎng)絡(luò)數(shù)據(jù)都通過100M網(wǎng)口進入硬件防火墻,將核心板分析及處理后的數(shù)據(jù)通過10M網(wǎng)絡(luò)驅(qū)動電路接口送入內(nèi)網(wǎng),所有的算法(如查找算法、IP數(shù)據(jù)包內(nèi)容還原、甚至于高級的內(nèi)容替代算法等)都在核心板實現(xiàn)。
本系統(tǒng)共有兩路10M網(wǎng)絡(luò)驅(qū)動電路。10M網(wǎng)絡(luò)驅(qū)動電路是硬件防火墻與內(nèi)網(wǎng)相連的惟一路徑,硬件防火墻將處理過的數(shù)據(jù)通過該接口送入內(nèi)網(wǎng)。同理,內(nèi)網(wǎng)訪問外網(wǎng)的數(shù)據(jù)也要通過它進入硬件防火墻。數(shù)據(jù)經(jīng)硬件防火墻處理后,通過100M網(wǎng)絡(luò)驅(qū)動電路送到外網(wǎng)。同時本系統(tǒng)所設(shè)計的兩路10M網(wǎng)絡(luò)電路還可以同時監(jiān)管兩個10M帶寬的局域網(wǎng),完成一些高級功能(如網(wǎng)絡(luò)流量檢測、內(nèi)網(wǎng)監(jiān)控、網(wǎng)關(guān)及路由功能等)。
由于功能和開發(fā)需要,系統(tǒng)在設(shè)計中采用了雙串口方案。在開發(fā)中,一個串口可以作為與宿主機超級終端相連的調(diào)式串口,另一個可以作為與上位機通信的端口。
由于MPC860支持片上調(diào)試,且為降低開發(fā)成本,所以在本系統(tǒng)開發(fā)時所采用的調(diào)試手段是MPC860所支持的BDM 調(diào)試。
3.2 軟件部分
主要包括啟動代碼編寫、操作系統(tǒng)移植、硬件驅(qū)動編寫以及應用程序等。由于篇幅有限,本文僅對BSP移植進行簡單介紹。
3.2.1 BSP移植的步驟及建立BOOTROM的方法
(1)閱讀手冊,了解WINDRIVER的BSP模板編寫規(guī)范、文件的組織,找到適合于目標處理器的模板。
(2)找到BSP模板以后,針對不同的CPU類型,確定基本BSP中所有寄存器配置是否適合當前的硬件(包括SDRAM、Flash)。如果不適合則做相應的改動,這主要是指rominits,config.h中的修改。
(3)如果有網(wǎng)絡(luò)設(shè)備,則需要配置confignet.h。如果有串口,則需要修改sysSerial.c。修改sysLib.c中的硬件相關(guān)部分。
建立BOOTROM的方法:
(1)進行BSP定制,主要是修改bootline,配置configAll.h,config.h和Makefile。
(2)選擇VxWorks的加載方式,然后配置target server,通過“build bootrom”圖形對話框或者命令行建立bootrom,然后通過visionprobe將bootrom下載到目標機RAM中運行,或者將成功的bootrom用專門燒寫器燒寫到Flash中。
3.2.2 根據(jù)硬件修改BSP
在本課題中,將ads860目標板的BSP拷貝到目錄installDir/target/config/ncut860t下,同時將all目錄下的所有文件都拷貝到installDir/target/config/ncut860t/all目錄下,之后針對本系統(tǒng)的硬件環(huán)境對BSP進行修改,同時修改相應的makefile。
注意:應將BSP拷貝到相應目錄下后再啟動Tornado,否則在Tornado的BSP列表中可能看不到新添加的BSP。
(1)config.h文件需要修改的配置(部分代碼)
#define DEFAULT_BOOT_LINE
″motfec(0,0)host:vxWorks h=219.224.61.102 e=219.224.61.202 u=ncut pw=ncut″
#define CRISTAL_FREQ 50000000 /*50MHz*/
#define LOCAL_MEM_LOCAL_ADRS 0x00000000
/*Base of RAM*/
#define LOCAL_MEM_SIZE 0x02000000
/*32MB memory available*/
#define ROM_BASE_ADRS 0x02800000
/*base address of ROM*/
#define ROM_TEXT_ADRS ROM_BASE_ADRS+0x100
#define ROM_SIZE 0x00200000 /*2M ROM space*/
#define RAM_HIGH_ADRS (LOCAL_MEM_LOCAL_
ADRS+0x00500000)
#define RAM_LOW_ADRS (LOCAL_MEM_LOCAL_
ADRS+0x00010000)
#define USER_RESERVED_MEM 0x00000000
/*user reserved memory size*/
(2)makefile文件修改(部分代碼)
TARGET_DIR =ncut860t
VENDOR=Motorola
BOARD=fw860t
ROM_TEXT_ADRS=02800100 # ROM entry address
ROM_SIZE=00400000 # number of bytes of ROM space
RAM_LOW_ADRS=00010000 # RAM text/data address
RAM_HIGH_ADRS=00500000 # RAM text/data address
HEX_FLAGS=-a $(ROM_TEXT_ADRS)
MACH_EXTRA=motFecEnd.o
CONFIG_ALL=F:workSetUpPpCTornado2.2targetconfig
ncut860tall
3.2.3 BSP常用的調(diào)試方法
開發(fā)調(diào)試BSP有兩種方法,一種是使用仿真器通過BDM的方式一步步地跟蹤調(diào)試;另一種是通過點燈的方式進行所謂的“黑”調(diào)。這里主要介紹“黑”調(diào)的方法?!昂凇闭{(diào)的方法是通過 “燈”閃或用示波器測片選等,根據(jù)外部現(xiàn)象和所編的測試代碼進行比較分析來調(diào)試程序。進行黑調(diào)的首要條件是串口部分代碼已經(jīng)調(diào)通,宿主機可以通過串口與目標機的通信,然后再調(diào)試BSP的其他部分。
BSP調(diào)試流程分成兩部分。首先是位于BootRom中的Boot代碼,它的作用是實現(xiàn)配置硬件和啟動VxWorks下載程序;接下來是下載后跳轉(zhuǎn)到VxWorks的入口地址運行操作系統(tǒng)和應用程序。
ROM中的啟動代碼部分:
RomInit:在文件romInit.s中,它是程序運行的開始,實現(xiàn)判斷啟動類型,配置內(nèi)核和非內(nèi)核寄存器以及內(nèi)存和外圍設(shè)備的讀寫時序,因此可以在此處加入內(nèi)存檢測功能。閃燈功能函數(shù)也要在此加入。判斷啟動類型和配置寄存器的部分不需要改動。配置內(nèi)存和外圍設(shè)備讀寫時序部分要進行改動,這一部分的SDRAM、ROM、Flash、FPGA有相應的模板可以參考,是通過使用宏定義來實現(xiàn)的。一般是改動空間大小的屏蔽位,讀寫位數(shù)以及片選寄存器OR和BR。內(nèi)存檢測在這里實現(xiàn)較復雜,它根據(jù)相應的內(nèi)存檢測算法實現(xiàn)。主要是對地址線和數(shù)據(jù)線的檢測,通過寫入數(shù)據(jù)再讀出數(shù)據(jù)來判斷,使用“走步1”和“走步0”算法。閃燈在這一部分是強烈推薦的,因為閃燈才能定位程序的運行位置。
在RomInit函數(shù)結(jié)尾處,指針跳入RomStart(),RomStart()在BootInt.c文件中。它是系統(tǒng)運行的第一個C函數(shù)。這一部分是Wind River公司提供的標準程序,一般不需改動。該函數(shù)是C的入口函數(shù),由匯編程序調(diào)用,主要完成清內(nèi)存,將ROM中的程序拷貝到RAM,解壓并跳至解壓后的程序運行。
UsrInit在BootConfig.c文件中,主要實現(xiàn)硬件的初始化。其中涉及到串口、網(wǎng)口的初始化及CONSOLE的配置等。其中串口和網(wǎng)口的配置是BSP的重要部分。UsrRoot在BootConfig.c文件中,它主要是實現(xiàn)vxworks文件的下載,并且跳轉(zhuǎn)到vxworks的入口地址,從而進入操作系統(tǒng)。
VxWorks文件中的代碼部分:
SysInit在sysAlib.s中。它是VxWorks的啟動代碼,與RomInit的作用相同。對于這個文件,一般不需要改動。UsrInit在Usrconfig.c中,其作用與Boot中UsrInit的作用相同。他們都調(diào)用SysLib.c中的子函數(shù)實現(xiàn)相同的硬件初始化功能。UsrRoot在UsrConfig.c中,它的作用與Boot中的UsrRoot的作用類似,但是這里的UsrRoot最終是進入到應用程序中。
該硬件防火墻的特點是高性能、高穩(wěn)定性和強兼容性,除了可以實現(xiàn)網(wǎng)關(guān)、路由、上位機監(jiān)控的功能外,在硬件防火墻的功能上通過軟件可實現(xiàn)典型的性能參數(shù)、1000個并發(fā)聯(lián)接數(shù)、實現(xiàn)吞量20M、實現(xiàn)10M的安全過濾帶寬、實現(xiàn)對VPN、IDS、Dos等的支持。
同時,本系統(tǒng)作為一種嵌入式開發(fā)的典型設(shè)計,核心板可以不作任何改動即可應用于其他嵌入式應用中。充分體現(xiàn)了嵌入式開發(fā)在后續(xù)開發(fā)中電路重復應用的優(yōu)勢。此外在設(shè)計中所采用的一些擴展性設(shè)計,如為增加系統(tǒng)存儲器所加的標準SODIMM插槽、不同封裝的晶振驅(qū)動電路,不但增加了該核心板電路的應用范圍,而且在實際使用中也增強了該電路的穩(wěn)定性。
參考文獻
[1] Freescale semiconductor Co.Ltd.MPC860 PowerQUICC Family User′s Manual.Rev.3,2004,7.
[2] Intel Co.Ltd.LXT972A 3.3V Dual-Speed Fast Ethernet Transceiver Datasheet.2001,1.
[3] Intel Co.Ltd.LXT905 Universal 10Base-T Transceiver with 3.3v Support Datasheet.2001,1.
[4] 謝斌.MPC860/850嵌入式系統(tǒng)開發(fā)入門與指導.西安:西安電子科技大學出版社,2004.
[5] Freescale semiconductor Co.Ltd.Application Note《SDRAM and the MPC860》 03-19-98 Revised,01-11-00.