1. 程式人生 > >OpenWRT實踐1:開發環境構建

OpenWRT實踐1:開發環境構建

序言

無線路由器目前已經可以做很多的功能了,相應的擴充套件資源也越來越多。其中大部分都是直接基於OpenWRT平臺直接進行開發的。筆者之前一直介紹的都是一些協議的理論知識,目前也更新一些筆者關於SDWN(Software Defined Wireless Networking)的實現中,所總結的一些實戰類的筆記。筆者目前是採用WNDR3800作為硬體平臺,價效比比較高。


PS:由於路徑問題,一般一個ubuntu系統只能夠安裝一個OpenWRT,否則會出現路徑不匹配的問題。

開發環境構建

第一步:安裝一些依賴包
sudo apt-get install libncurses5-dev zlib1g-dev gawk flex patch git-core g++ subversion
第二步:下載OpenWRT原始碼
git clone git://git.openwrt.org/14.07/openwrt.git
第三步:修改資料夾許可權,為了編譯方便,一般直接對原始碼資料夾賦予777的許可權
sudo chmod -R 777 openwrt
第四步:修改feeds源,用以安裝所需的package以及luci介面
gedit feeds.conf.default

開啟檔案後,註釋掉一些不需要的源,一般使用前三個源即可


第五步:更新與安裝feeds包

./scripts/feeds update –a
./scripts/feeds install –a
第六步:韌體的編譯設定,我們要設定如下內容。注意,空格鍵是選擇是否安裝模組,如果是“*”的話,那麼就是預設安裝,如果是“M”的話,那麼就是要手動載入。回車鍵是用來選擇是否進入子欄的,在配置完韌體之後,需要手動儲存後再離開。

1)
Target System型別為: Atheros AR7xx/AR9xx



2)Target Profile型別為:NETGEAR WNDR3700/WNDR3800/WNDRMAC,這裡根據路由器型號進行選擇,我們採用的路由器為WNDR3800。



3)Target Images型別為:squashfs,其餘的選項不選



4)分別選中 <Advanced configuration options(for developers)>,<Build the OpenWrt SDK>,<Build the OpenWrt based Toolchain>


5)選擇<Luci—Collections--(*)luci>,如下圖(選擇時要注意是選擇了M還是*,因為這兩種不同的選擇方式編譯完的韌體是有不同的,這裡還是強調全部用 *

,否則刷機完之後,還需要手動載入Luci介面)




6)儲存退出


7)手動取消bridge,即在make menuconfig後手動執行以下指令。

echo '#CONFIG_KERNEL_BRIDGE is not set' >> .config
注意:每次 make menuconfig以後都要執行這條指令。


第七步:
在openwrt原始碼檔案中,新增編譯時候需要附加的模組。在openwrt編譯過程中,會從網際網路上自行下載一些模組,不過由於網路以及資料來源的問題,有部分資料包直接下載是存在問題的。故本文已經將該版本openwrt所需要的資料包進行整理,並整理如下:

上述檔案解壓縮以後,可以獲得一個dl.tar.gz的檔案,首先將其下載至本地,並傳入開發環境中,然後用以下命令解壓縮
tar zvxf dl.tar.gz
解壓縮之後,可以獲得一個名為dl的資料夾。此時需要將該資料夾與openwrt目錄下的內容進行合併,比如可以用以下指令(如果在圖形介面裡面,手動拖拽資料夾也行)
cp ./dl/* openwrt/dl/
在openwrt編譯過程中,如果dl目錄中已經有下載好的模組,那麼編譯的時候就不會再行下載資源。

第八步:編譯openwrt韌體。直接在openwrt根目錄下,執行以下指令即可
make V=99
編譯完的結果被儲存在目錄(openwrt/bin/ar71xx/)下,其中ar71xx路徑名與韌體配置時選擇的晶片型號有關。以本文選擇WNDR3800路由器為例,最後編譯結果為
openwrt-ar71xx-generic-wndr3800-squashfs-sysupgrade.bin
將該檔案拷出後,我們可以進行最後一步的刷機操作。