<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 手機與無線通信 > 設(shè)計應用 > SOHO路由器的設(shè)計與實現(xiàn)

          SOHO路由器的設(shè)計與實現(xiàn)

          作者: 時間:2010-08-17 來源:網(wǎng)絡 收藏

          在圖1所示的中,其核心處理器就選用88E6218。該芯片提供了4個LNA口,可連接到10/100M以太網(wǎng),另一個WAN口連接到廣域網(wǎng),各端口之間有交換功能。根據(jù)操作系統(tǒng)的存儲和運行需要,芯片還設(shè)置了SDRAM存儲器和FLASH存儲器,SDRAM存儲器由一片4×2 Mxl6 B的HY57V281620組成,是操作系統(tǒng)、應用程序運行和一些數(shù)據(jù)緩存的空間。FLASH存儲器由一片512Kx8BIT的AM29LV040B組成,用于存放啟動程序二進制的B00TLEADER文件、操作系統(tǒng)以及應用程序。20針的ARM JTAG口用于調(diào)試程序和燒寫FLASH。RS232接口用于提供配置管理功能和反映信息運行情況。時鐘電路由一個25 MHz的晶振和濾波電容組成,RESERT電路由一塊DSl708TESA芯片加一個手動按扭組成低電平復位。電路的輸入為5 V,通過DC變壓后,可在調(diào)整引腳偏壓下提供1.5 V、1.25 V、2.5V、3.3 V電壓給處理芯片,以供芯片順利工作。此外,電路中還有大量的濾波和穩(wěn)壓電容。為了讓使用者能清楚工作狀態(tài),系統(tǒng)連接了LED指示燈,可通過LED來判斷SOH0的連接狀態(tài)和工作狀態(tài)。

          本文引用地址:http://www.ex-cimer.com/article/157180.htm

          3 軟件
          SOH0路由器的軟件結(jié)構(gòu)如圖3所示。本硬件平臺以不含MMU (內(nèi)存管理單元)的88E6218處理器為核心,因此,整個軟件的開發(fā)可采用不帶MMU的ARM微處理器的嵌入式操作系統(tǒng)uclinux為平臺。uclinux是專門針對沒有MMU單元的微處理器而的,它在標準linux基礎(chǔ)上去除了MMU支持,并進行了適當緊縮、裁減和優(yōu)化,再加上CGI(圖形用戶界面),因而可TCP/IP協(xié)議以及眾多網(wǎng)絡協(xié)議和路由交換功能,可滿足路由器網(wǎng)絡通信功能要求。UClinux采用romfs文件格式,它比Linux的ext3文件格式需要的空間更小,其代碼加起來不超過900KB,可放
          在ROM、RAM、FLASH中啟動。由于uclinux本身是免費的,這些源代碼可以直接從網(wǎng)上獲得,只需相對應用系統(tǒng)的需求作必要的修改即可,因而可以大大減少開發(fā)成本。


          圖3所示是路由器的軟件平臺體系結(jié)構(gòu)。圖中的這些協(xié)議基本上覆蓋了所有路由器交換協(xié)議,并在管理模塊方面加入通過SNMP、WEB,故可方便地對路由器進行設(shè)置。這些交換協(xié)議可基本滿足SOHO路由器的網(wǎng)絡通信要求。
          該SOHO路由器的軟件平臺由系統(tǒng)引導程序Bootloader、uCLinux內(nèi)核、應用文件系統(tǒng)等組成。其中嵌入式系統(tǒng)引導程序bootloader的作用類似于PC機的BIOS的作用,但它比PC機的BIOS運行任務更多的地方是還要將內(nèi)核映像從硬盤上讀到RAM中,然后跳轉(zhuǎn)到內(nèi)核的入口點去運行,即啟動操作系統(tǒng)。
          3.1 系統(tǒng)引導
          系統(tǒng)引導程序主要執(zhí)行以下三個步驟:
          首先是讓PC指向復位地址入口處,即Ox200000處的Bootloader代碼。由Bootloader初始化硬件設(shè)備,建立內(nèi)存空間的映射圖,以將系統(tǒng)的軟硬件環(huán)境帶到一個合適的狀態(tài),為最終調(diào)用操作系統(tǒng)內(nèi)核準備好正確的環(huán)境。
          其次由Bootloader將控制權(quán)交給操作系統(tǒng)內(nèi)核的引導程序,并在設(shè)置好uCLinux內(nèi)核的啟動參數(shù)后,開始uCLinux內(nèi)核的加載;
          最后在uCLinux內(nèi)核加載引導完成后啟動init進程,以完成系統(tǒng)的引導過程。
          3.2 對系統(tǒng)源碼的修改
          由于Bootloader依賴于具體的嵌入式板級設(shè)備配置,所以,通常需要修改Bootloader的源程序。本例在廠方提供的Bootloader源碼里,對mvFlash.h中的static unsigned int mvFlashTypes[]函數(shù)的設(shè)置進行了修改,并將FLASH的型號換成上述硬件平臺中的FLASH,同時重新設(shè)置了INTEL_FLASH。其三個初始化、讀、寫功能模塊,即對應函數(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ù)也相應進行了修改,只有使Bootloader初始化的硬件和具體硬件平臺的器件對應起來,才能正確的驅(qū)動硬件。
          3.3 uCLinux內(nèi)核的編譯和生成
          在uCLinux內(nèi)核編譯之前,首先要對內(nèi)核進行配置。目錄的修改一般都是在config里面進行的,可以用make menuconfig進入編譯界面進行選擇編譯選項的配置。可根據(jù)硬件平臺的構(gòu)造參數(shù)將必要選項選中,并將沒有必要的選項去掉。系統(tǒng)類型的配置應選擇相應的內(nèi)核然后是塊設(shè)備選擇和配置以及在塊設(shè)備選擇和配置之上的文件系統(tǒng)配置。一旦串口驅(qū)動和uCLinux文件系統(tǒ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個步驟,最終在image目錄下生成2個文件zImage和romfs,(分別為內(nèi)核映象文件和文件系統(tǒng)的映象文件)。這就是最后要燒錄到硬件平臺里FLASH中的文件。這樣就完成了uCLinux的移植。

          4 結(jié)束語
          本文較為具體地介紹了基于嵌入式ARM9SOHO路由器的設(shè)計和方法,并詳細闡明了它的硬件結(jié)構(gòu),重點敘述了該路由器的軟件設(shè)計思路和方法(包括操作系統(tǒng)的移植)。當然,路由器具有很多相應的功能,都需要通過軟件開發(fā)來,現(xiàn)在最新的uclinux已經(jīng)是2.6內(nèi)核了,可以用它實現(xiàn)更多網(wǎng)絡功能。


          上一頁 1 2 下一頁

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();