[Openwrt項目開發筆記]系列文章傳送門:http://www.cnblogs.com/double-win/p/3888399.html
正文:
最近開始着手進行Openwrt平台的物聯網網關設計,思路有些亂,通過筆記的方式進行記錄和整理。
聲明: 在本文中,有些內容摘自網上,我進行了整合,因此出處不明,在此對原文作者致歉!
-----------------------------------------------------(分割線)-------------------------------------------------------
一. 選擇Openwrt平台的理由
傳統的路由器固件是由官方提供的。這些固件是不開源的,而且這些路由器的功能也比較單一,很難滿足日益變化的智能家居需求。因此,在構建物聯網核心時,需要考慮第三方固件平台。
Openwrt、DD-Wrt以及Tomato是三個最為著名的第三方路由器固件平台。當然還有其他一些更加小眾的版本,和很多從這三大固件衍生出來的修改版固件,在此我就不贅述了。
選擇Openwrt而不選擇DD-Wrt或者Tomato的理由如下:
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. 其他平台的固件,我就沒有深究了(在此聲明一下,並非其他平台的固件不好,只是開發方便,通用固件的使用率高一些,在開發中遇到問題也更方便查找)。
二、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/ 謝謝!