SOHO路由器的設(shè)計(jì)與實(shí)現(xiàn)
在圖1所示的SOHO路由器中,其核心處理器就選用88E6218。該芯片提供了4個(gè)LNA口,可連接到10/100M以太網(wǎng),另一個(gè)WAN口連接到廣域網(wǎng),各端口之間有交換功能。根據(jù)操作系統(tǒng)的存儲(chǔ)和運(yùn)行需要,芯片還設(shè)置了SDRAM存儲(chǔ)器和FLASH存儲(chǔ)器,SDRAM存儲(chǔ)器由一片4×2 Mxl6 B的HY57V281620組成,是操作系統(tǒng)、應(yīng)用程序運(yùn)行和一些數(shù)據(jù)緩存的空間。FLASH存儲(chǔ)器由一片512Kx8BIT的AM29LV040B組成,用于存放啟動(dòng)程序二進(jìn)制的B00TLEADER文件、操作系統(tǒng)以及應(yīng)用程序。20針的ARM JTAG口用于調(diào)試程序和燒寫(xiě)FLASH。RS232接口用于提供配置管理功能和反映信息運(yùn)行情況。時(shí)鐘電路由一個(gè)25 MHz的晶振和濾波電容組成,RESERT電路由一塊DSl708TESA芯片加一個(gè)手動(dòng)按扭組成低電平復(fù)位。電源電路的輸入為5 V,通過(guò)DC變壓后,可在電源調(diào)整引腳偏壓下提供1.5 V、1.25 V、2.5V、3.3 V電壓給處理芯片,以供芯片順利工作。此外,電路中還有大量的濾波和穩(wěn)壓電容。為了讓使用者能清楚路由器工作狀態(tài),系統(tǒng)連接了LED指示燈,可通過(guò)LED來(lái)判斷SOH0路由器的連接狀態(tài)和工作狀態(tài)。本文引用地址:http://2s4d.com/article/157180.htm
3 軟件設(shè)計(jì)
SOH0路由器的軟件結(jié)構(gòu)如圖3所示。本硬件平臺(tái)以不含MMU (內(nèi)存管理單元)的88E6218處理器為核心,因此,整個(gè)軟件的開(kāi)發(fā)可采用不帶MMU的ARM微處理器的嵌入式操作系統(tǒng)uclinux為平臺(tái)。uclinux是專門針對(duì)沒(méi)有MMU單元的微處理器而設(shè)計(jì)的,它在標(biāo)準(zhǔn)linux基礎(chǔ)上去除了MMU支持,并進(jìn)行了適當(dāng)緊縮、裁減和優(yōu)化,再加上CGI(圖形用戶界面),因而可實(shí)現(xiàn)TCP/IP協(xié)議以及眾多網(wǎng)絡(luò)協(xié)議和路由交換功能,可滿足SOHO路由器網(wǎng)絡(luò)通信功能要求。UClinux采用romfs文件格式,它比Linux的ext3文件格式需要的空間更小,其代碼加起來(lái)不超過(guò)900KB,可放
在ROM、RAM、FLASH中啟動(dòng)。由于uclinux本身是免費(fèi)的,這些源代碼可以直接從網(wǎng)上獲得,只需相對(duì)應(yīng)用系統(tǒng)的需求作必要的修改即可,因而可以大大減少開(kāi)發(fā)成本。
圖3所示是SOHO路由器的軟件平臺(tái)體系結(jié)構(gòu)。圖中的這些協(xié)議基本上覆蓋了所有路由器交換協(xié)議,并在管理模塊方面加入通過(guò)SNMP、WEB,故可方便地對(duì)路由器進(jìn)行設(shè)置。這些交換協(xié)議可基本滿足SOHO路由器的網(wǎng)絡(luò)通信要求。
該SOHO路由器的軟件平臺(tái)由系統(tǒng)引導(dǎo)程序Bootloader、uCLinux內(nèi)核、應(yīng)用文件系統(tǒng)等組成。其中嵌入式系統(tǒng)引導(dǎo)程序bootloader的作用類似于PC機(jī)的BIOS的作用,但它比PC機(jī)的BIOS運(yùn)行任務(wù)更多的地方是還要將內(nèi)核映像從硬盤(pán)上讀到RAM中,然后跳轉(zhuǎn)到內(nèi)核的入口點(diǎn)去運(yùn)行,即啟動(dòng)操作系統(tǒng)。
3.1 系統(tǒng)引導(dǎo)
系統(tǒng)引導(dǎo)程序主要執(zhí)行以下三個(gè)步驟:
首先是讓PC指向復(fù)位地址入口處,即Ox200000處的Bootloader代碼。由Bootloader初始化硬件設(shè)備,建立內(nèi)存空間的映射圖,以將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。
其次由Bootloader將控制權(quán)交給操作系統(tǒng)內(nèi)核的引導(dǎo)程序,并在設(shè)置好uCLinux內(nèi)核的啟動(dòng)參數(shù)后,開(kāi)始uCLinux內(nèi)核的加載;
最后在uCLinux內(nèi)核加載引導(dǎo)完成后啟動(dòng)init進(jìn)程,以完成系統(tǒng)的引導(dǎo)過(guò)程。
3.2 對(duì)系統(tǒng)源碼的修改
由于Bootloader依賴于具體的嵌入式板級(jí)設(shè)備配置,所以,通常需要修改Bootloader的源程序。本例在廠方提供的Bootloader源碼里,對(duì)mvFlash.h中的static unsigned int mvFlashTypes[]函數(shù)的設(shè)置進(jìn)行了修改,并將FLASH的型號(hào)換成上述硬件平臺(tái)中的FLASH,同時(shí)重新設(shè)置了INTEL_FLASH。其三個(gè)初始化、讀、寫(xiě)功能模塊,即對(duì)應(yīng)函數(shù)為unsigned int mvFlashlnit(unsigned int flashBaseAddress,unsig-ned int flashWidth,F(xiàn)LASH_DEV_MODE flashMode),unsigned int mvFlashWriteBlock(unsigned int offset,unsigned int numOfByte,char*blockAddress),unsigned int mvFlashReadBlock(unsigned int offset,unsigned int numOfByte.char*blockAddress)中的循環(huán)次數(shù)和執(zhí)行條件設(shè)置參數(shù)也相應(yīng)進(jìn)行了修改,只有使Bootloader初始化的硬件和具體設(shè)計(jì)硬件平臺(tái)的器件對(duì)應(yīng)起來(lái),才能正確的驅(qū)動(dòng)硬件。
3.3 uCLinux內(nèi)核的編譯和生成
在uCLinux內(nèi)核編譯之前,首先要對(duì)內(nèi)核進(jìn)行配置。目錄的修改一般都是在config里面進(jìn)行的,可以用make menuconfig進(jìn)入編譯界面進(jìn)行選擇編譯選項(xiàng)的配置??筛鶕?jù)硬件平臺(tái)的構(gòu)造參數(shù)將必要選項(xiàng)選中,并將沒(méi)有必要的選項(xiàng)去掉。系統(tǒng)類型的配置應(yīng)選擇相應(yīng)的內(nèi)核然后是塊設(shè)備選擇和配置以及在塊設(shè)備選擇和配置之上的文件系統(tǒng)配置。一旦串口驅(qū)動(dòng)和uCLinux文件系統(tǒng)以及應(yīng)用系統(tǒng)等設(shè)置好,就可以完成uCL-inux內(nèi)核的配置,修改好后就可以編譯內(nèi)核。接下去執(zhí)行命令make dep,make clean,make lib_only,make user onlv,make romfs,make image.共6個(gè)步驟,最終在image目錄下生成2個(gè)文件zImage和romfs,(分別為內(nèi)核映象文件和文件系統(tǒng)的映象文件)。這就是最后要燒錄到硬件平臺(tái)里FLASH中的文件。這樣就完成了uCLinux的移植。
4 結(jié)束語(yǔ)
本文較為具體地介紹了基于嵌入式ARM9SOHO路由器的設(shè)計(jì)和實(shí)現(xiàn)方法,并詳細(xì)闡明了它的硬件結(jié)構(gòu),重點(diǎn)敘述了該路由器的軟件設(shè)計(jì)思路和方法(包括操作系統(tǒng)的移植)。當(dāng)然,路由器具有很多相應(yīng)的功能,都需要通過(guò)軟件開(kāi)發(fā)來(lái)實(shí)現(xiàn),現(xiàn)在最新的uclinux已經(jīng)是2.6內(nèi)核了,可以用它實(shí)現(xiàn)更多網(wǎng)絡(luò)功能。
評(píng)論