施鳴
摘要:OpenWrt是一個針對嵌入式設(shè)備的Linux發(fā)行版,有非常高的可擴展性,可以非常容易地從零開始構(gòu)建出全功能的智能路由或服務(wù)器設(shè)備。通過本文所寫的配置方法,大家可以快速的搭建OpenWrt系統(tǒng)開發(fā)環(huán)境。
關(guān)鍵詞:OpenWrt;Linux;嵌入式智能路由
一、OpenWrt簡介和優(yōu)缺點
現(xiàn)在主流的路由器固件主要有 dd-wrt;tomato;openwrt;padavan四大類。對比一個單一的、靜態(tài)的系統(tǒng),OpenWrt的包管理提供了一個完全可寫的文件系統(tǒng),從應(yīng)用程序供應(yīng)商提供的選擇和配置,并允許您自定義的設(shè)備,以適應(yīng)任何應(yīng)用程序。OpenWRT是一個高度模塊化、高度自動化的嵌入式Linux系統(tǒng),擁有強大的網(wǎng)絡(luò)組件和擴展性,常常被用于工控設(shè)備、電話、小型機器人、智能家居、路由器以及VOIP設(shè)備中。 同時,它還提供了100多個已編譯好的軟件,而且數(shù)量還在不斷增加,而 OpenWrt SDK 更簡化了開發(fā)軟件的工序。
優(yōu)點:如果對 Linux 系統(tǒng)有一定的認識,并想學(xué)習(xí)或接觸嵌入式 Linux 的話,OpenWRT很適合。而且OpenWRT支持各種處理器架構(gòu),無論是對ARM,X86,PowerPC或者MIPS都有很好的支持。其多達3000多種軟件包,囊括從工具鏈(toolchain),到內(nèi)核(linux kernel),到軟件包(packages),再到根文件系統(tǒng)(rootfs)整個體系,使得用戶只需簡單的一個make命令即可方便快速地定制一個具有特定功能的嵌入式系統(tǒng)來制作固件。
缺點:由于CPU內(nèi)核體系不同,造成很多應(yīng)用程序移植到OpenWrt上的時候經(jīng)常崩潰,而且ADSL硬件模塊的驅(qū)動程序沒有開放源代碼,造成很多ADSL一體無線路由的ADSL模塊不能工作而造成功能缺失(RG100A和DB120除外)。由于OpenWRT并不是官方發(fā)布的路由器固件,所以要使用(刷入該固件)有困難,而且其基于Linux,導(dǎo)致OpenWRT的入門門檻較高。
二、環(huán)境搭建方法
本次實驗使用到虛擬機VMware;10及Ubuntu系統(tǒng)的ISO鏡像,這些軟件工具在各軟件的官網(wǎng)下載,下面介紹安裝好VMware及Ubuntu系統(tǒng)后軟件的使用方法。
進入Ubuntu Linux系統(tǒng)
編譯OpenWrt系統(tǒng)固件
1.安裝編譯環(huán)境
安裝編譯所需的工具,在終端輸入
#sudo apt-get update
#sudo apt-get install git-core build-essential
libssl-dev libncurses5-dev unzip
#sudo apt-get install subversion mercurial
#sudo apt-get install gcc g++ binutils patch bzip2 flex bison make a
utoconf gettext texinfo unzip sharutils subversion libncurses5-dev ncurs
es-term zlib1g-dev
2.下載OpenWrt源碼
需準備12GB左右的空間,源碼體積百兆左右,但是編譯過程中會產(chǎn)生大量文件,會使文件夾體積非常大。# git clone -b chaos_calmer git://github.com/openwrt/openwrt.git
3.更新軟件包
下載安裝可用的“feeds”:上述步驟會產(chǎn)生一個名為openwrt的目錄,在終端輸入#cd openwrt
#./scripts/feeds update -a
#./scripts/feeds install -a
4.配置
在終端輸入make menuconfig
對編譯目標進行配置
TargetSystem -> Ralink RT288x/Rt3xxx
Subtarget->MT7628 based boards
“Package the OpenWrt-base Toolchain”是為了有搭建交叉編譯環(huán)境方便,不是必選的。
此外,勾選LuCI(網(wǎng)頁形式的控制臺)還是非常必要的。要勾選(前面出現(xiàn)*號):
LuCI-->1.Collections-->luci
別忘記勾選中文:
LuCI-->2.Modules-->Translations-->Chinese(zh-cn)
最后Save,退出。
以上是基本的固件編譯,如果需要其他功能,要再勾選或添加。
5.編譯固件
在終端中輸入命令:make V=s -j2
V=s 代表顯示編譯信息,一定要勾選,否則出錯的話無法看到錯誤信息。
-j8代表使用的CPU線程數(shù)量,4C8T的CPU可是使用8個線程提高速度,使用時有時會出錯,可以改成-j1或者不加這個參數(shù)。
6.固件目標
當OpenWrt編譯完成后,生成的固件位于源碼目錄下的
bin/bin/ramips/openwrt-ramips-mt7628-xxx-squashfs-sysupgrade.bin
三、搭建交叉編譯環(huán)境
交叉編譯,簡單的說就是,就是在一個平臺上生成另一個平臺上的可執(zhí)行文件,舉個例子,我用我的電腦(x86_64平臺)編譯出路由器(mips-mt76XX)上可以執(zhí)行的二進制文件,要進行交叉編譯首先就要有對應(yīng)平臺的編譯器,下面介紹如何搭建編譯環(huán)境。
1.自己編譯生成工具鏈(toolchain)
進入OpenWrt源碼目錄,并執(zhí)行make menuconfig命令,并選中如下選項[*] Build the Openwrt SDK
選中,保存退出,然后執(zhí)行make V=99命令生成工具鏈。編譯成功后,工具鏈位將在bin/ramips/
OpenWrt-SDK-ramips-mt7628_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64.tar.bz2壓縮包下。
2.設(shè)置環(huán)境變量
需要設(shè)置兩個環(huán)境變量,一個為工具鏈中的bin文件夾加入到PATCH中,另一個為STAGING_DIR變量,將其指向放toolchain的文件夾。其操作步驟如下:
將OpenWrt-SDK-ramips-mt7628_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64.tar.bz2
目錄解壓到/opt目錄,sudo tar xvf OpenWrt-SDK-xx.tar.gz -C /opt
執(zhí)行如下命令,打開~/.bashrc文件,將環(huán)境變量添加到該文件中。
vim ~/.bashrc
在末尾處添加如下代碼:vim ~/.bashrc
OPENWRT_GCC=/opt/OpenWrt-SDK-ramips-mt7628_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/bin
export
STAGING_DIR=/opt/OpenWrt-SDK-ramips-mt7628_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir
export PATH=$PATH:$OPENWRT_GCC
編輯完成后保存退出,然后執(zhí)行如下命令,使能環(huán)境變量#source ~/.bashrc
3.測試交叉編譯工具
在終端下執(zhí)行如下命令,查看是否有輸出# mipsel-openwrt-linux-gcc -v
如果輸出如上圖的數(shù)據(jù),表示安裝成功。
參考文獻
[1]Linux應(yīng)用服務(wù)器架設(shè)[M].於岳2014年11月第一版.人民郵電出版社.
[2]跟老男孩學(xué)Linux運維:web集群實戰(zhàn)[M].老男孩 2016年第一版
[3]基于虛擬機的計算機公共機房多系統(tǒng)實驗環(huán)境的構(gòu)建[J].姜莉.中國現(xiàn)代教育裝備.2009(01)
[4]社大鵬《Red hat Linux因特網(wǎng)服務(wù)器》中國水利水電出版社.2004.2.
[5]林慧琛《Red hat Linux服務(wù)器配置與應(yīng)用》人民郵電出版社.2006.1.