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