[Openwrt項目開發筆記]系列文章傳送門:http://www.cnblogs.com/double-win/p/3888399.htmlhtml
正文:web
最近開始着手進行Openwrt平臺的物聯網網關設計,思路有些亂,經過筆記的方式進行記錄和整理。shell
聲明: 在本文中,有些內容摘自網上,我進行了整合,所以出處不明,在此對原文做者致歉!網絡
-----------------------------------------------------(分割線)-------------------------------------------------------svn
一. 選擇Openwrt平臺的理由工具
傳統的路由器固件是由官方提供的。這些固件是不開源的,並且這些路由器的功能也比較單一,很難知足日益變化的智能家居需求。所以,在構建物聯網核心時,須要考慮第三方固件平臺。性能
Openwrt、DD-Wrt以及Tomato是三個最爲著名的第三方路由器固件平臺。固然還有其餘一些更加小衆的版本,和不少從這三大固件衍生出來的修改版固件,在此我就不贅述了。測試
選擇Openwrt而不選擇DD-Wrt或者Tomato的理由以下:flex
1. DD-WRT:是三個固件平臺中第三方軟件支持最爲豐富一個平臺。優化
對於新的路由器的支持也是很是迅速的。然而,正是因爲各類豐富的軟件或工具的加入,致使DD-WRT的系統不穩定,常常會出現Bug,使得用戶體驗不友好。每每在一個版本中修改過的Bug,在下一次版本check的時候,又會出現,對於開發者來講比較頭疼。
此外,DD-WRT對於無線信號處理方面能力較弱,Qos功能更是被許多玩家吐槽。(因爲智能家居須要多設備同時接入,而且不一樣設備之間會存在流量的衝突,所以Qos顯得比較重要,基於該緣由)
2. Tomato:官方的Tomato固件是三個平臺中最爲穩定的。
Tomato較爲封閉,對於新的路由器支持力度不夠,特別是對於Atheros主控支持力度很小。因而, 我果斷放棄了Tomato。
3. Openwrt:三大固件中擴展性最好的。
對於版本的控制較爲嚴謹,一般以往出現的bug在新的版本中極少出現,在穩定性上較之DD-WRT有了很大的提高。
Openwrt對於Qos的功能作了優化,其性能能夠媲美Tomato。
Openwrt是基於Linux的,適合開發者進行二次開發。(此外,Openwrt的固件有許多功能是遠超過路由器自己的功能的,例如samba局域網文件共享,transmission脫機下載,ushare,uPnP等),這正是我想要的!!
固然,Openwrt自己的web,luci界面是比較醜的,系統設置也沒有DD-WRT方便,易用性不是很好。(這個問題嘛,能夠經過第三方軟件進行改進,對於我來講就不是問題了)
4. 其餘平臺的固件,我就沒有深究了(在此聲明一下,並不是其餘平臺的固件很差,只是開發方便,通用固件的使用率高一些,在開發中遇到問題也更方便查找)。
2、Openwrt平臺搭建
1. 在平臺搭建以前,有幾點須要說明一下的:
所謂的平臺搭建,不只包括固件的燒寫,還包括開發,編譯和調試的環境搭建。
Openwrt平臺是基於Linux的,其支持虛擬機安裝,對於手邊沒有設備的親們,能夠經過安裝虛擬機感覺一下(木有圖形界面,須要命令行控制)。
2. Openwrt開發環境搭建流程(僅列出我本人所搭建的環境,以Atheros 9344爲例):
(1)操做系統: Ubuntu12.04。(版本有點老,推薦使用更行的版本)。
(2)在Ubuntu下搭建Openwrt開發環境:
安裝依賴庫:
apt-get install g++ apt-get install libncurses5-dev apt-get install zlib1g-dev apt-get install bison apt-get install flex apt-get install unzip apt-get install autoconf apt-get install gawk apt-get install make apt-get install gettext apt-get install gcc apt-get install binutils apt-get install patch apt-get install bzip2 apt-get install libz-dev apt-get install asciidoc apt-get install subversion下載官方源碼(以Atheros9344爲例):
cd /home/XXX# XXX: user name mkdir attitude_adjustment svn co svn://svn.openwrt.org/openwrt/tags/attitude_adjustment_12.09
上述命令,會將svn上的源碼check到本地attitude_adjustment目錄下.
我使用的是attitude_adjustment版本,這個版本較爲穩定,且
進行源碼版本更新:
cd attitude_adjustment/ svn up ./scripts/feeds update -a ./scripts/feeds install -a到目前爲止,Openwrt的開發環境已經搭好了.
(3)Openwrt系統的首次編譯(p.s. 在編譯過程當中,程序會自動經過feed機制,在網上下載相應的依賴文件,這要求編譯者所在網絡環境良好!):
進行環境檢查,查看編譯所需依賴庫是否都安裝:
make defconfig
若提示有某個依賴庫沒有安裝,請按照提示按照對應的依賴庫. 直到上述檢查無返回。
進行編譯配置:
make menuconfig對目標固件進行配置. 因爲首次編譯時間會較長,所以我建立一個無外加軟件的固件:(下面三幅圖,分別對應於Target System,Subtarget和Target Profile)
最後保存設置:
以後就是漫長的編譯的時間了:
make #默認安裝,無提示 make V=99 #顯示編譯日誌,並打印在shell中等待漫長的時間以後,若是成功,可在編譯目錄下 bin/
能夠看到多個.bin文件,這些.bin文件中
openwrt-ar71xx-generic-db120-kernel.bin:對應於只燒寫內核固件
openwrt-ar71xx-generic-db120-rootfs-squashfs.bin:對應於文件系統固件
openwrt-ar71xx-generic-db120-squashfs-sysupgrade.bin:對應於完整的固件
至此,一個能夠燒寫的固件就編譯好了。固然,能夠看出這個系統只能將路由器啓動,可以正常加電運轉,可是其沒有任何功能。(在後面,咱們須要對其添加各類軟件支持,甚至是經過編譯內核的方式添加軟件應用)
(4) 固件燒寫
對於固件燒寫呢,有多種方式,我僅將我所使用過的方式列出來:
++Web在線固件升級,這個通常適用於原廠固件升級,或者Openwrt鏡像燒寫。此方法難度低,若是固件沒有問題而且少些過程當中沒有斷電的話,都能成功燒寫。
++tftp方式升級,本人使用的Atheros9344路由,機身自帶有console口,能夠經過網線直連的方式,直接經過PC進行燒寫。
此過程難度較高,須要有必定的開發基礎。
此外,還有好多方法,在網上都能找到,因爲暫時不須要,我就不一一列出了。
(5) 路由重啓,測試
進入這一步,整個開發、編譯、調試和燒寫的過程就到最後了。
在後續的文章中,我將會把Openwrt基本設置、USB掛載、USB啓動、Samba局域網文件共享、ftp server、Transmission脫機下載等功能一一整理。
轉載請註明出處: http://www.cnblogs.com/double-win/ 謝謝!