[Openwrt項目開發筆記]系列文章傳送門:http://www.cnblogs.com/double-win/p/3888399.html
正文:
昨晚上熬夜寫了[Openwrt項目開發筆記]:Openwrt平台搭建(一),雖然洋洋灑灑地寫了不少東西,但我還是感覺忽略的一些東西。在本文中,我試着將我能想到的一些點列出來:
一、關於Openwrt版本的選擇
Openwrt官方wiki:http://wiki.openwrt.org/about/history 列出了Openwrt的版本演變歷史。
(1)可以看到我所選擇的Attitude_adjustment為目前最新的穩定版本。
(2)由於我還有一台Netgear Wndr3700路由器,所以我也嘗試過編譯backfire10.03。
(3)主干版本trunk,是持續變化的一個版本,對於開發者來說,是一個既愛又恨的版本。一則,trunk版本往往對新出的硬件是最早提供支持的,開發者可以針對新出的硬件做開發;二則,trunk版本變化較大,往往在上一個版本支持的路由產品,在下一個版本中可能由於Bug較多而被舍棄,對開發者造成困擾。
(4)需要特別的指出的是,在國內也有一個團隊在做基於Openwrt的開源項目,其內部開發版本為Openwrt-DreamBox,大家如果有興趣可以參與一下https://dev.openwrt.org.cn/wiki/WikiStart。
官方給出的Openwrt的版本路線圖如下,有興趣的朋友可以關注一下:
(圖片轉自Openwrt官方wiki http://wiki.openwrt.org/about/history )
二、關於Openwrt的編譯
1. feeds機制
傳統的Linux系統在安裝或者編譯某一個軟件的時候,會檢查其依賴庫是否安裝,如果沒有安裝,則會報錯,安裝或編譯退出。
這種機制使得開發者在安裝一個軟件之前,不得不查找該軟件所需的依賴庫,並手動去安裝這些軟件,有時候碰到比較嬌貴的軟件時,嵌套式的安裝依賴文件,會使得開發者頭昏腦漲。
好在Openwrt通過引入feeds機制,較好的解決了這個問題。下文是Openwrt的官方wiki對於feeds的表述:
"In OpenWrt, a "feed" is a collection of packages which share a common location. Feeds may reside on a remote server, in a version control system, on the local filesystem, orin any other location addressable by a single name (path/URL) over a protocol with a supported feed method." Feeds are additional predefined package build recipes for OpenWrt Buildroot.
我個人的理解是: 在Openwrt系統中,“feed”是一系列的軟件包,這些軟件包需要通過一個統一的接口地址進行訪問。“feed”軟件包中的軟件包可能分布在遠程服務器上、在svn上、在本地文件系統中或者其他的地方,用戶可以通過一種支持feed機制的協議,通過同一個地址進行訪問。(有些繞,簡單來說,就是系統將一系列的軟件包進行了地址映射,只能通過同一個接口進行訪問)。
這樣做有什么好處呢?我們下載的Openwrt源碼是較為純凈的系統,feeds提供了我們在編譯固件時所需的的許多額外擴展軟件。
當我們下載了Openwrt對應源碼之后,進行如下操作:
$ ./scripts/feeds update -a
$ ./scripts/feeds install -a
上述操作,就是從feeds提供的接口地址將Openwrt所需的一些擴展軟件先行下載。
2. Openwrt在編譯的過程中,系統會根據Makefile自動的去判斷和下載軟件的依賴庫。
在Makefile文件中,設置了自動查找軟件依賴。如果某個依賴文件在本地文件系統中不存在,那么系統就會根據feeds所示下載路徑去下載對應的依賴文件。在首次編譯的過程中,之所以耗時比后續編譯時間長,其中一個原因就是系統需要下載很多的依賴文件。特別地,在TC編譯Openwrt的時候,會出現有些依賴文件所在的url無法訪問,從而報錯。那么,沒有別的辦法了,要么在網上查找對應的替代源,要么就FQ吧。。。
三、關於Openwrt的固件燒寫
這個部分呢,沒有統一的標准,針對不同的路由硬件環境,其燒寫的方式不同。
有些設備可以通過web的方式進行升級,有些則沒有提供相應的接口。
有些設備可以通過tftp的方式進行升級,而有些不能。
此處,我就不細講了,僅把我所使用的Netgear Wndr3700v1固件燒寫的方式列一下,如果有對應Wndr3700 v2,v3以及Wndr3800設備的朋友可以參考一下:
1. 原裝官方系統刷Openwrt
這個過程極為簡單
(1)下載對應路由型號的Openwrt映像文件,我的設備Wndr3700 v1,因此固件為 “openwrt-ar71xx-wndr3700-squashfs-factory.img”
(2) 將PC用無線連接到路由器;
(3) 通過瀏覽器輸入“192.168.1.1”進入路由器的管理界面。
進入“高級”》》“管理”》》“路由器升級”,點擊“瀏覽”,從本地文件夾中找到Openwrt固件,點擊上傳。之后就是大概4~5分鍾的等待,當電源變成綠燈,並且不再閃爍時,路由已經成功啟動了。
(p.s. 此過程設備不能斷電,否則可能發生未知的情況)
(4)若成功刷入Openwrt,將PC與路由器通過網線直連的方式(將網線與路由器連接一端插入4個LAN口中任意一個即可)連接。
將PC的本地網卡IP設置為“192.168.1.X” X可以為2~254 任意一個數字。
在瀏覽器中輸入“192.168.1.1”,如果能進入Openwrt歡迎界面,則成功輸入Openwrt。
2.通過TFTP的方式刷回原版官方固件
對於Netgear Wndr3700來說,該設備背面有一個紅色圓孔“Restore Factory Settings”,我們需要通過該按鈕進行回刷操作。
進入restore factory settings的步驟是這樣的: 1. 關閉路由器 2. 按住Reset鍵,打開路由器(reset鍵即為紅色圓孔,使用較細的筆尖或者牙簽,伸進該圓孔,進行按壓,在下一步完成前請勿松手)
該步驟的功能是擦除Flash,為后續TFTP傳入數據做准備。 3. 直到power燈開始閃綠色,松開reset鍵(大約45秒)
首先在netgear的官網上下載對應固件版本,我以“WNDR3700-V1.0.16.98.img”為例。
然后將改固件放入C:或者D:的根目錄下,打開cmd,進入對應的盤符分區:(WNDR3700-v1.0.16.98.img放在D盤根目錄下)
輸入如下命令:
具體命令的內容如下: (1)使用 win+R組合鍵,輸入cmd進入Windows Shell。 (2)進入固件存放位置,我將固件放在D盤根目錄下,因此輸入下面的命令,跳轉到D盤下面: C:\Users\Administrater>D: (3)輸入tftp命令上傳固件: tftp -i 192.168.1.1 put XXXX.bin ; 其中XXXX.bin 為固件的名稱
之后呢,就是默默的等待了(大概1~2分鍾),之后路由器會重啟。之后進行1中步驟(4)操作。
從下一篇開始,就進入Openwrt軟件設置,開始一步一步搭建物聯網網關!
轉載請注明出處: http://www.cnblogs.com/double-win/ 謝謝!