引言
近年來,隨著嵌入式系統(tǒng)的飛速發(fā)展和廣泛應(yīng)用,裸機(jī)模式已無法適應(yīng)日益復(fù)雜的系統(tǒng)開發(fā),嵌入式操作系統(tǒng)已經(jīng)成為開發(fā)中不可或缺的核心軟件,對其進(jìn)行學(xué)習(xí)研究的需求也日益突出。
嵌入式操作系統(tǒng)的學(xué)習(xí)平臺雖然多種多樣,但選擇一個合適的平臺卻并不簡單。商業(yè)系統(tǒng)通常有著完善的支持,但復(fù)雜的架構(gòu)、昂貴的價格和不公開的源代碼使得它們難以成為初學(xué)者學(xué)習(xí)的對象。主流的開源操作系統(tǒng),雖然可以獲得源代碼實現(xiàn),但龐大的代碼行,使得系統(tǒng)的機(jī)理被復(fù)雜的細(xì)節(jié)掩蓋,依然令人望而卻步。專門的教學(xué)操作系統(tǒng),有針對地簡化了代碼實現(xiàn),但又因為缺乏應(yīng)用實例而缺乏公信力。
此外還存在硬件平臺成本過高造成的軟硬件脫節(jié)的問題,完全脫離硬件平臺的軟件學(xué)習(xí)使人難以全面掌握嵌入式系統(tǒng)?;谔摂M環(huán)境進(jìn)行仿真雖然一定程度上解決了這個問題,但是缺少硬件平臺的實踐終究無法獲得較深的感性認(rèn)識,極易忽視很多真實環(huán)境的注意事項。
針對這些問題,本文提出了一種基于路由器設(shè)計嵌入式操作系統(tǒng)學(xué)習(xí)平臺的思路,以LinKsys WRT54GL路由器作為硬件平臺,選擇開源OpenWrt作為主操作系統(tǒng)用于高級實踐開發(fā)的學(xué)習(xí),嵌入式Xinu作為從操作系統(tǒng)用于基礎(chǔ)理論的學(xué)習(xí)。把兩個優(yōu)秀的嵌入式操作系統(tǒng)集中到同一個硬件平臺,比較好地解決了當(dāng)前嵌入式操作系統(tǒng)學(xué)習(xí)平臺存在的功能繁簡不當(dāng)、軟硬件容易脫節(jié)的問題,同時大大降低了學(xué)習(xí)成本。
1 平臺的架構(gòu)設(shè)計
1.1 硬件平臺選擇
現(xiàn)在,市面上常用的無線路由器大多采用的是ARM或MIPS的處理器,這些產(chǎn)品本身就是嵌入式系統(tǒng)的典型應(yīng)用。更為重要的是有很多產(chǎn)品不僅有著強(qiáng)大的運(yùn)算能力和豐富的板載資源,而且支持眾多第三方固件,可以通過升級固件豐富功能,擴(kuò)展能力極佳,作為嵌入式操作系
統(tǒng)的硬件平臺非常合適。
LinKsys公司的WRT54GL是一個極易采購的經(jīng)典無線路由器,它擁有200 MHz的處理器,板載4 MB Flash和16 MB Ram完全勝任嵌入式開發(fā)的學(xué)習(xí)、研究和開發(fā)。更為重要的是,在網(wǎng)絡(luò)上已有很多為它設(shè)計的開源項目,使得學(xué)習(xí)資源唾手可得。
1.2 軟件平臺架構(gòu)
考慮到學(xué)習(xí)研究的需要,源代碼的公開與否是選擇軟件平臺的首要條件,因此確立了以開源操作系統(tǒng)為選擇目標(biāo)。同時考慮到功能的平衡——既要能夠用于操作系統(tǒng)基本原理的學(xué)習(xí),又要能夠完成進(jìn)一步的高級功能學(xué)習(xí),繁簡得當(dāng)?shù)碾p操作系統(tǒng)的軟件架構(gòu)就成為當(dāng)然的選擇。這樣的架構(gòu)使得既可以在學(xué)習(xí)初期利用代碼較為簡潔的從操作系統(tǒng)完成理論的學(xué)習(xí)和實踐,又可以在后期利用功能強(qiáng)大的主操作系統(tǒng)完成進(jìn)階學(xué)習(xí),兩者結(jié)合相得益彰,貫穿整個嵌入式操作系統(tǒng)的學(xué)習(xí)過程。
1.2.1 主操作系統(tǒng)
在選定了WRT54GL作為硬件平臺后,自然就需要為其選擇適當(dāng)?shù)拈_源路由操作系統(tǒng)。開源路由操作系統(tǒng)非常之多,常見的有Vyatta、Cle arOS、Endian、Untangle、RouterOS、HyperWRT、OpenWrt、DD—WRT等。其中OpenWrt和DD—WRT獲得了更為廣泛的支持,有著良好的社區(qū)資源,它們都可以被看作一個獨(dú)立的嵌入式設(shè)備的Linux發(fā)行版,而不僅僅是一個單一的、靜態(tài)的固件,支持的硬件相當(dāng)豐富,WRT54GL也不例外。
DD—WRT功能強(qiáng)大而且簡單易用,它重點(diǎn)關(guān)注的是Web配置方式,這使得DD—WRT的Web功能比OpenWrt強(qiáng)大得多,因此DD—WRT的用戶群很龐大。
OpenWrt的優(yōu)勢是用戶可以隨意地安裝軟件。OpenWrt的包管理提供了一個完全可寫的文件系統(tǒng),并允許自定義設(shè)備和應(yīng)用軟件包,具有完全定制的能力。
DD—WRT和OpenWrt各有優(yōu)缺點(diǎn)??偟膩碚fDD—WRT傾向于關(guān)注使用者的感受,因此較為易用,OpenWrt傾向于關(guān)注開發(fā)者的使用,因此更為開放。
但是就學(xué)習(xí)研究而言,OpenWrt的擴(kuò)展性要更勝一籌?,F(xiàn)在的DD—WRT雖然也可以自己裝軟件,但只能裝在jffs或mmc目錄中,除jffs、mmc、tmp目錄外其他的目錄是不可寫的,而OpenWrt則不存在這些限制。
此外,OpenWrt系統(tǒng)使用和Linux類似的庫文件,比如它所包含的uClibc的C庫使得開發(fā)人員通過簡單的補(bǔ)丁包即可輕松運(yùn)行現(xiàn)有的Linux程序。而且程序通過TFTP和CFE上傳到路由器后,用戶還可以使用串行口進(jìn)行通信和調(diào)試。因此我們選擇OpenWrt作為主操作系統(tǒng),便于在掌握了操作系統(tǒng)基本理論之后,進(jìn)行高階的學(xué)習(xí)研究。
1.2.2 從操作系統(tǒng)
Xinu操作系統(tǒng)20世紀(jì)80年代中期誕生于美國普渡大學(xué),目標(biāo)主要是用于操作系統(tǒng)教學(xué)。它是一種小巧、優(yōu)雅的操作系統(tǒng),支持動態(tài)創(chuàng)建進(jìn)程、動態(tài)分配內(nèi)存等操作系統(tǒng)的功能,有shell命令和I/O函數(shù)。同時支持TCP/IP協(xié)議,可以管理本地和遠(yuǎn)程文件系統(tǒng)。
除了應(yīng)用于教育領(lǐng)域以外,由于Xinu的體積很小,功能強(qiáng)大,所以也非常適用于嵌人式環(huán)境,現(xiàn)在已被移植到從8位、16位到32位嵌入式處理器平臺上,并有多個工業(yè)級的應(yīng)用,有較好的應(yīng)用價值。
美國馬奎特大學(xué)的嵌入式Xinu項目對其進(jìn)行了相應(yīng)的研究,并將其移植到嵌入式MIPS平臺。嵌入式Xinu是一個持續(xù)研究和實施的項目,當(dāng)前版本支持Linksys公司的WRT54GL和WRT160NL的路由器,以及Qemu虛擬機(jī)。因此我們選擇嵌入式Xinu作為從操作系統(tǒng)進(jìn)行基礎(chǔ)理論的學(xué)習(xí)。
2 平臺的實現(xiàn)
2.1 硬件改造
由于WRT54GL無線路由器沒有把串口外接出來,為了便于OpenWrt和Xinu的移植,并能通過控制臺對它們進(jìn)行交互調(diào)試,需要對其進(jìn)行簡單的硬件改造。
該路由器電路本身就有兩個UART接口,只是沒有從印刷電路板上用接插件引出來,因此將這兩個串口引出是平臺構(gòu)建的第一個步驟。
首先,需要將印刷電路板和路由器的外殼分離,找到Linksys公司提供的串行接頭連接,它位于電路板的右下角,有10個針腳支持兩個串行接口(UART0和UART1),可以用10-pin接插件將這10個針腳引出。
其次,由于路由器和PC機(jī)串口的電平不同,所以還要進(jìn)行相應(yīng)的電平轉(zhuǎn)換,把路由器的3.3 V電平轉(zhuǎn)換為RS-232的串口電平。這就需要制作一個轉(zhuǎn)換電路,這里采用的串行接口電平轉(zhuǎn)換芯片為ADM202,參考電路如圖1所示。
然后把引出的串口固定在前面板上,復(fù)原外殼即可,這樣就得到有兩個外接串口的路由器。使用時把UART0通過串口線和PC機(jī)的串口相連,通過任意串口通信軟件就可以進(jìn)行數(shù)據(jù)通信了。
2.2 OpenWrt的移植
由于WRT54GL路由器支持第三方固件,所以O(shè)penWrt移植并不困難,加之OpenWrt支持軟件包的定制安裝,不需完全從零開始構(gòu)建,所以可以直接利用現(xiàn)有比較穩(wěn)定可靠的鏡像資源加以改造。當(dāng)然,如果要構(gòu)建相應(yīng)的交叉開發(fā)環(huán)境,從頭做起的話,也可以參考相應(yīng)文獻(xiàn)。由于步驟和Xinu類似,這里不作展開。
2.2.1 部署OpenWrt
首先在www.openwrt.org網(wǎng)站下載WRT54Gsquashfs.bin固件,然后通過路由器管理菜單更新固件,相關(guān)步驟如下:http://192. 168.1.1→Adminisllration→Firmware Upgrade。需要注意的是,需要給PC分配192.168.1.2和192.168.1.254之間的一個靜態(tài)IP地址,以便使PC和路由器在同一個網(wǎng)段。當(dāng)路由器重新啟動后,telnet到其IP地址為192.168.1.1,并發(fā)出以下命令:
root@OpenWrt:/#nvram set boot_wait=on
root@OpenWrt:/#nvram set boot_time=10
root@OpenWrt:/#nvram commit&&reboot
如果覺得使用命令行配置路由器比較麻煩,還可以添加相應(yīng)的Web GUI包,命令如下:
root@OpenWrt:/#opkg update
root@OpenWrt:/#opkg install luci-light
root@OpenWrt:/#opkg install luci
然后用瀏覽器打開http://192.1 68.1.1,就能夠更容易地配置路由器了。
2.2.2 更新現(xiàn)有OpenWrt
OpenWrt的軟件包定制安裝和標(biāo)準(zhǔn)Linux沒什么區(qū)別,這里只介紹如何更新已經(jīng)運(yùn)行了OpenWrt操作系統(tǒng)的路由器固件的方法。
步驟和部署OpenWrt極為相似,所不同的是不需要運(yùn)行NVRAM命令,另外固件文件名不同。第一次部署路由器固件時,需要用.bin文件,更新升級已有固件時則需要用.trx文件。原因是,.bin是將路由器的相關(guān)配置信息和.trx封裝在一起而生成的鏡像,在第一次部署固件鏡
像文件時,需要提供這樣的信息,而在后續(xù)升級時則不再需要,用.trx文件即可,命令如下:
root@OpenWrt:/#cd/tmp
root@OpenWrt:/tmp#mtd-r write openwrt-XXX.trx linux
重啟后路由器就重新引導(dǎo)到新版本的固件。
2.3 嵌入式Xinu的編譯與移植
Xinu的移植和完整的OpenWrt移植一樣,涉及從交叉編譯工具環(huán)境構(gòu)成到鏡像生成及部署的一系列工作,下面作簡要介紹。
2.3.1 構(gòu)建MIPS交叉編譯環(huán)境
移植Linux需要專門的交叉編譯環(huán)境,選擇Linux環(huán)境構(gòu)建基于MIPS架構(gòu)平臺的交叉編譯工具鏈,如果采用Windows的環(huán)境也可基于Cygwin來構(gòu)建類似的交叉編譯工具鏈,下面的操作需要擁有ROOT權(quán)限。
首先下載binutils,現(xiàn)在可以得到的較新版本是2.2.2,命令如下:
./configure -prefix=/usr/local/project/mipsel-dev-target=mipsel
make
make install
由于這里采用的Linux開發(fā)環(huán)境是ubuntul2.04操作系統(tǒng),它的安全管理會把警告也強(qiáng)制轉(zhuǎn)化為錯誤處理,這就可能造成編譯錯誤。因此,還需要為configure添加“-disable-werror”選項,或者待配置完后修改Makfile中的對應(yīng)選項。
第二步是為include目錄建立鏈接。
Xinu有自己的小型庫用于編譯,并不需要完整的UNIX交叉編譯器環(huán)境,但是因為GCC在編譯時需要關(guān)聯(lián)相應(yīng)的頭文件,所以這里還需要建立一個鏈接,將目標(biāo)平臺相關(guān)的include和宿主PC機(jī)的include目錄鏈接起來。
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è)計中采用的GCC是最新版本的4.7.2,下載解壓后進(jìn)行編譯安裝。由于ubuntul2.04的環(huán)境,安裝4.6版本以上的GCC需要GMP、MPFR、MPC這三個庫,所以還需要從網(wǎng)上下載三個庫的壓縮包。需要注意的是,由于MPFR依賴GMP,而MPC依賴GMP和MPFR,所以要先安裝GMP,其次MPFR,最后才是MPC。這里三個庫在本設(shè)計實際使用的版本分別是gmp5.0.1、mpfr2.4.2和mpc 0.8.1。限于篇幅僅對安裝gcc-4.7.2作簡要敘述。
當(dāng)以上步驟都完成,就在宿主機(jī)上構(gòu)建了基于littleendian的MIPS架構(gòu)的gcc cross—compiler。可以看到/usr/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,它支持三種不同平臺wrt54gl、wrt160nl和虛擬器版本的mipsel—qemu。因此根據(jù)我們的硬件平臺,進(jìn)入xinu mips2.01/compile/platforms/wrt54gl目錄,對其中的文件platformVars作對應(yīng)修改,去除CFLAGS的-Werror選項,目的依然是防止把警告當(dāng)成錯誤。另外最重要的一個設(shè)置是MIPS_ROOT變量,它指出了交叉編譯工具所在的目錄,如MIPS_ROOT=/usr/local/project/mipsel-dev/bin,這需要根據(jù)前面的交叉編譯工具的路徑相應(yīng)調(diào)整。然后在compile/目錄下運(yùn)行make clean和make這兩個命令,就可以獲得相應(yīng)的鏡像文件xinu.boot。
2.3.3 部署Xinu鏡像
部署并運(yùn)行編譯好的Xinu鏡像的第一步是在PC機(jī)上運(yùn)行TFTP服務(wù)器,它可以將鏡像文件通過網(wǎng)絡(luò)連接傳輸?shù)铰酚善魃稀inux上安裝TFTP服務(wù)器相當(dāng)簡單,只要下載tftp—server軟件包后安裝即可,這里不再詳述。
安裝完TFTP服務(wù)后,還需簡單的設(shè)置以使服務(wù)運(yùn)行起來,xinetd是一個服務(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。
這時已經(jīng)在物理上通過串口將作為后端的路由器和作為宿主機(jī)的PC機(jī)連接起來了,通過相應(yīng)的串口通信程序就可實現(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)起來,順利的話將看到xsh$提示符。Xinu提供了一些最基本的命令,可以用help來查看。
至此已經(jīng)完成了基本的嵌入式Xinu部署的整個流程,進(jìn)一步的工作就是修改Xinu的源代碼,重新生成鏡像文件,用boot—elf[host ip]:xinu.boot命令重新引導(dǎo)運(yùn)行新的系統(tǒng)。
結(jié)語
本文詳細(xì)闡述了將WRT54GL路由器改造為適合于學(xué)習(xí)開源OpenWrt與Xinu操作系統(tǒng)的平臺的過程。整個改造過程簡單、易行,可以貫穿整個嵌入式操作系統(tǒng)的學(xué)習(xí)過程。
責(zé)任編輯:gt
-
嵌入式
+關(guān)注
關(guān)注
5150文章
19665瀏覽量
317452 -
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
7147瀏覽量
125572 -
路由器
+關(guān)注
關(guān)注
22文章
3837瀏覽量
116666
發(fā)布評論請先 登錄
嵌入式Linux的SOHO路由器電路設(shè)計

教你把廢棄的U盤用作強(qiáng)大路由器
思科Linksys WRT610N v2/E3000 無線雙頻路由器千兆/USB脫機(jī)下載
怎么實現(xiàn)基于嵌入式Linux平臺的多協(xié)議路由器的設(shè)計?
主流路由器固件有哪幾個
基于嵌入式Linux平臺的多協(xié)議路由器的設(shè)計
基于嵌入式Linux的SOHO路由器設(shè)計
基于嵌入式Linux的SOHO路由器設(shè)計
基于S3C4510B的嵌入式路由器的研究
Linksys無線路由器設(shè)置

基于嵌入式Linux的SOHO路由器設(shè)計與實現(xiàn)

如何使用OpenWRT路由器實現(xiàn)網(wǎng)絡(luò)存儲系統(tǒng)的設(shè)計

評論