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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于路由器的開(kāi)源嵌入式操作系統(tǒng)學(xué)習(xí)平臺(tái)

          基于路由器的開(kāi)源嵌入式操作系統(tǒng)學(xué)習(xí)平臺(tái)

          作者: 時(shí)間:2013-04-23 來(lái)源:網(wǎng)絡(luò) 收藏

          2.3 嵌入式的編譯與移植
          的移植和完整的移植一樣,涉及從交叉編譯工具環(huán)境構(gòu)成到鏡像生成及部署的一系列工作,下面作簡(jiǎn)要介紹。
          2.3.1 構(gòu)建MIPS交叉編譯環(huán)境
          移植Linux需要專門(mén)的交叉編譯環(huán)境,選擇Linux環(huán)境構(gòu)建基于MIPS架構(gòu)平臺(tái)的交叉編譯工具鏈,如果采用Windows的環(huán)境也可基于Cygwin來(lái)構(gòu)建類似的交叉編譯工具鏈,下面的操作需要擁有ROOT權(quán)限。
          首先下載binutils,現(xiàn)在可以得到的較新版本是2.2.2,命令如下:
          ./configure -prefix=/usr/local/project/mipsel-dev-target=mipsel
          make
          make install
          由于這里采用的Linux開(kāi)發(fā)環(huán)境是ubuntul2.04操作系統(tǒng),它的安全管理會(huì)把警告也強(qiáng)制轉(zhuǎn)化為錯(cuò)誤處理,這就可能造成編譯錯(cuò)誤。因此,還需要為configure添加“-disable-werror”選項(xiàng),或者待配置完后修改Makfile中的對(duì)應(yīng)選項(xiàng)。
          第二步是為include目錄建立鏈接。
          有自己的小型庫(kù)用于編譯,并不需要完整的UNIX交叉編譯器環(huán)境,但是因?yàn)镚CC在編譯時(shí)需要關(guān)聯(lián)相應(yīng)的頭文件,所以這里還需要建立一個(gè)鏈接,將目標(biāo)平臺(tái)相關(guān)的include和宿主PC機(jī)的include目錄鏈接起來(lái)。
          mkdir-P/usr/local/project/mipsel-dev/mipsel/usr
          In-S/usr/include/usr/local/project/mipsel-dev/mipsel/usr/in-clude
          第三步是安裝GNU C Compiler編譯器,設(shè)計(jì)中采用的GCC是最新版本的4.7.2,下載解壓后進(jìn)行編譯安裝。由于ubuntul2.04的環(huán)境,安裝4.6版本以上的GCC需要GMP、MPFR、MPC這三個(gè)庫(kù),所以還需要從網(wǎng)上下載三個(gè)庫(kù)的壓縮包。需要注意的是,由于MPFR依賴GMP,而MPC依賴GMP和MPFR,所以要先安裝GMP,其次MPFR,最后才是MPC。這里三個(gè)庫(kù)在本設(shè)計(jì)實(shí)際使用的版本分別是gmp5.0.1、mpfr2.4.2和mpc 0.8.1。限于篇幅僅對(duì)安裝gcc-4.7.2作簡(jiǎn)要敘述。
          b.JPG
          當(dāng)以上步驟都完成,就在宿主機(jī)上構(gòu)建了基于littleendian的MIPS架構(gòu)的gcc cross—compiler??梢钥吹剑痷sr/local/project/ mipsel —dev/bin/mipsel—gcc,表明安裝成功。
          2.3.2 構(gòu)建Xinu鏡像
          下載并解壓相應(yīng)的壓縮包,可以看到類似這樣的目錄結(jié)構(gòu):device、lib、loader、system、compile、include、mailbox、shell、test。
          和交叉編譯相關(guān)的主要是compile下的相關(guān)文件,由于采用的嵌入式Xinu是最新版本的xinu_mips-2.01,它支持三種不同平臺(tái)wrt54gl、wrt160nl和虛擬器版本的mipsel—qemu。因此根據(jù)我們的硬件平臺(tái),進(jìn)入xinu mips2.01/compile/platforms/wrt54gl目錄,對(duì)其中的文件platformVars作對(duì)應(yīng)修改,去除CFLAGS的-Werror選項(xiàng),目的依然是防止把警告當(dāng)成錯(cuò)誤。另外最重要的一個(gè)設(shè)置是MIPS_ROOT變量,它指出了交叉編譯工具所在的目錄,如MIPS_ROOT=/usr/local/project/mipsel-dev/bin,這需要根據(jù)前面的交叉編譯工具的路徑相應(yīng)調(diào)整。然后在compile/目錄下運(yùn)行make clean和make這兩個(gè)命令,就可以獲得相應(yīng)的鏡像文件xinu.boot。
          2.3.3 部署Xinu鏡像
          部署并運(yùn)行編譯好的Xinu鏡像的第一步是在PC機(jī)上運(yùn)行TFTP服務(wù)器,它可以將鏡像文件通過(guò)網(wǎng)絡(luò)連接傳輸?shù)?a class="contentlabel" href="http://www.ex-cimer.com/news/listbylabel/label/路由器">路由器上。Linux上安裝TFTP服務(wù)器相當(dāng)簡(jiǎn)單,只要下載tftp—server軟件包后安裝即可,這里不再詳述。
          安裝完TFTP服務(wù)后,還需簡(jiǎn)單的設(shè)置以使服務(wù)運(yùn)行起來(lái),xinetd是一個(gè)服務(wù)器守護(hù)程序,可以運(yùn)行許多不同類型的服務(wù)器上。當(dāng)tftp服務(wù)正常運(yùn)行,且xinu.boot文件也正確復(fù)制后,就可以進(jìn)行最后的引導(dǎo)工作了。由于默認(rèn)的IP地址是192.168.1.1,所以還需要把PC機(jī)的IP也設(shè)在相同的網(wǎng)段,如192.168.1.2。
          這時(shí)已經(jīng)在物理上通過(guò)串口將作為后端的和作為宿主機(jī)的PC機(jī)連接起來(lái)了,通過(guò)相應(yīng)的串口通信程序就可實(shí)現(xiàn)兩者的數(shù)據(jù)交互。如果一切正常,將可以看到路由器的命令提示符CFE>。
          命令格式為boot—elf[host ip]:xinu.boot,其中[hostip]就是鏈接了作為后端的路由器的PC機(jī),如CFE>boot—elf 192.168. 1.2:xi nu.boot。
          這樣就可以在路由器上將Xinu引導(dǎo)起來(lái),順利的話將看到xsh$提示符。Xinu提供了一些最基本的命令,可以用help來(lái)查看。
          至此已經(jīng)完成了基本的嵌入式Xinu部署的整個(gè)流程,進(jìn)一步的工作就是修改Xinu的源代碼,重新生成鏡像文件,用boot—elf[host ip]:xinu.boot命令重新引導(dǎo)運(yùn)行新的系統(tǒng)。

          結(jié)語(yǔ)
          本文詳細(xì)闡述了將WRT54GL路由器改造為適合于學(xué)習(xí)開(kāi)源與Xinu操作系統(tǒng)的平臺(tái)的過(guò)程。整個(gè)改造過(guò)程簡(jiǎn)單、易行,可以貫穿整個(gè)的學(xué)習(xí)過(guò)程。

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

          路由器相關(guān)文章:路由器工作原理


          路由器相關(guān)文章:路由器工作原理



          上一頁(yè) 1 2 3 下一頁(yè)

          評(píng)論


          相關(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); })();