原文地址:http://blog.csdn.net/eldn__/article/details/9707065
本文針對華爲HG255D,但同時具有一定的通用參考價值
一、刷機篇
要想放心大膽的玩學會刷機是少不了的,經過我的反覆多次的折騰總結了自己認爲穩定而且簡單的方法,最終達到刷不死的境界。
1,刷機和恢復教程(參考地址:http://itbbs.pconline.com.cn/15815647.html)
先上兩張圖:
華爲HG255d只要是電信原版的u-boot就刷不死,所以大家可以放心大膽的刷!
(類似電腦BIOS那樣,只要這個沒壞,可以裝系統換來換去,不管磚頭還是不轉頭,只要按住Reast鍵開機,登陸網頁進入刷機模式任刷)真貼心的設置
刷機固件打包下載網盤:http://l7.yunpan.cn/lk/91krrjpbvq
一、刷openwrt
1.前期固件準備:
①軟件:1102-0x20000_hg255d-squashfs-tftp.checksum2.bin
②openwrt固件:0508-openwrt-ramips-rt305x-hg255d-squashfs-By_shcl.bin
(我用的是shcl版的,感覺還不錯,你也可以刷其他版本的)
2.連接網線,設置固定IP地址
3.刷機過程
①打開IE並在地址欄輸入http://192.168.1.1/upload.html
②用牙籤頂住reset鍵後打開電源,開機後一直保持按住reset鍵。
③回到IE按回車,再以每秒一次的速度刷新網頁直到出現升級頁面,就會出現刷機畫面,這時候可以鬆開reset鍵。
(可以按F5刷新,不過我建議在地址欄按回車鍵,效果比較好……)
④出現了這個畫面,馬上上傳1102-0x20000_hg255d-squashfs-tftp.checksum2.bin,快速按Update software。上傳成功之後,網頁頁面變爲
(這個時候就慢慢等,一開始進入刷機模式,路由器有五六個燈是亮的,等它自動刷好,會自動重啓,這是電源燈一閃一閃,最後只有兩三個燈亮,就可以確定刷機完成了)
⑤ 自動重啓後不要關機,輸入192.168.1.1進入管理頁,賬號root,密碼admin,在“備份|刷機”界面中選擇:0508-openwrt-ramips-rt305x-hg255d-squashfs-By_shcl.bin固件再次刷機。
(大概等四五分鐘,這期間兩三個燈常亮,刷完後會自動重啓,電源燈會一閃一閃,之後常亮重啓完,再次進入輸入192.168.1.1進入管理頁,賬號root,密碼admin,可以設置了~~)
二、刷DD-Wrt固件
因爲固件問題,這個DD固件不是原生爲這款路由設計的,而是華碩RTN13U的DD固件,因爲硬件大致相同,所以可以混用
1.前期固件準備:
①軟件:1102-0x20000_hg255d-squashfs-tftp.checksum2.bin(和刷OpenWrt的那個是一樣的)
②固件:Asus-RTN13U-r17990.bin(聽說這是電信原版uboot最穩定少BUG的固件,當然,你也可以嘗試下RTN13U其它固件,反正這路由器只要你不改Uboot是刷不死的)
2.刷機過程,參照刷OpenWrt,過程是一個鳥樣
①將電腦本地網卡設成固定ip 192.168.1.2 網關留空。
②打開IE並在地址欄輸入http://192.168.1.1/upload.html
③網線連接路由器任意lan口,用牙籤頂住reset鍵後打開電源
④選擇1102-0x20000_hg255d-squashfs-tftp.checksum2.bin固件後點擊升級。
⑤自動重啓後不要關機,輸入192.168.1.1進入管理頁,在“備份|刷機”界面中選擇:Asus-RTN13U-r17990.bin固件再次刷機
三、刷回電信固件
刷機過程也是一樣的
①將電腦本地網卡設成固定ip 192.168.1.2 網關留空。
②打開IE並在地址欄輸入http://192.168.1.1/upload.html
③網線連接路由器任意lan口,用牙籤頂住reset鍵後打開電源
④選擇HG255d_telecom.bin固件後點擊升級【刷回電信比較簡單,刷一次就好,不用刷1102-0x20000_hg255d-squashfs-tftp.checksum2.bin】
等待2-3分鐘後原版又回來了(超管賬戶telecomadmin ---- nE7jA%5m)。
2,路由管理方法和軟件使用方法(含ipk包的上傳安裝方法)
用WinSCP在PC和OpenWRT之間傳輸文件
如果你嫌vi學起來麻煩,不喜歡用vi編輯,那麼學會用WinSCP在PC和OpenWRT間傳送文件吧。
仍舊以RT-N11+的image文件爲例。我們在《在華碩RT-N11+上運行OpenWRT +Asterisk》中提供的編譯好的image文件已經提供了對SSH-2的支持,所以可以利用WinSCP工具連接到RT-N11+上方便的實現文件傳輸。
實現了PC和OpenWRT之間的文件傳輸,需要編輯Asterisk配置文件時直接傳到PC上編輯,編輯完了再傳回去就好了,可以不必再學習相對繁複的vi編輯器。
(1)配置WinSCP聯接,注意協議選擇SCP
2)點擊Login後由於密碼未填(爲空),WinSCP要求輸入密碼,我們默認密碼爲空,直接點OK
3)WinSCP聯接成功,可以用鼠標拖動實現PC與RT-N11+之間的文件傳輸了
4)WinSCP會報個錯誤,不理它,直接點OK過
5)二、安裝使用介紹(常規的安裝方法):
1. 通過WinSCP將安裝包上傳至路由/root/ 目錄下,然後在SSH中輸入命令:
opkg install njit8021xclient_1.1-1_brcm63xx.ipk
另:
WinSCP使用方法:打開WINSCP,輸入主機名192.168.1.1,端口號22,用戶名root,密碼是你剛纔設置的,下面的文件協議選SCP。之後登陸。
二、OpenWrt平臺的搭建,含交叉編譯平臺和SDK(ToolChain)開發環境的搭建
這裏網上教程很多很詳細,我就自己實踐過的文章推薦給大家
1,OpenWrt完整平臺的搭建
環境:
Ubuntu 10.04,subversion,VMware workstation 7.1.3
、安裝好後,在左上角“系統”菜單的“首選項”中選擇“屏幕保護程序”,然後去掉左下角的“計算機空閒時激活屏幕保護程序”,然後按“關閉”,這個窗口是沒有“應用”或“確定”之類的,直接關閉它就會保存。用慣了WINDOWS的用戶注意了。爲什麼要做這步呢? 因爲整個編譯過程中有些步驟要等一段時間的,老是自動啓用屏幕保護程序,然後還要重新輸密碼才能退出,也是麻煩事。
首先是得到openwrt-dreambox的源代碼。
然後裝上各種依賴關係包:
sudo apt-get install gcc g++ binutils patch bzip2 flex bison make autoconf gettext texinfo unzip sharutils subversi-dev ncurses-term zlib1g-dev
sudo apt-get update
sudo apt-get install libncurses5-dev zlib1g-dev gawk flex patch git-core g++ subversion
(注:backfire對於HG255D絕對是最好的版本選擇,不然問題接踵而至)
然後進入home目錄,建立文件夾:
makedir /openwrt
cd /openwrt
svn co svn://svn.openwrt.org.cn/dreambox/backfire openwrt-dreambox
cd openwrt-dreambox
./scripts/feeds update -a
./scripts/feeds install -a
然後輸入make menuconfig,開始進入內核配置界面:
這裏只需選擇兩項
1. Target System : CPU型號 (RT305X)
2. Target Profile : 路由器新號(系列)(HG255D 只有backfire纔有該型號吧)
3.最後: make V=99 (輸出調試信息模式下進行)
注:第一次編譯由於要下載大量的軟件包,慢慢的等吧,快則半小時,慢則2,3小時. 如果下載過慢,建議您中斷編譯過程,然後用迅雷去主動下載,放到./dl目錄下。一個加快速度的小技巧: 本站小編已經將將一些常用的軟件包打包成dl.tar,放在http://ul.to/2y8a2w, 下載後用tar xvf dl.tar(在windows下用winrar打開即可,然後你用ftp或者samba之類傳到Linux PC上),將解包出來的東東直接放到./dl目錄下,相必會大大加快初次安裝、編譯的速度。同樣在http://ul.to/fasgus上可下載linux-2.36.30.10.tar.bz2,當然您也可以用迅雷之類的工具來下。
2、指定平臺的交叉編譯環境(SDK開發環境的構建)
Openwrt SDK是一個可再定位的,預編譯好的OpenWrt工具鏈,適用於在不從頭開始編譯整個系統的前提下,針對一個特定平臺交叉編譯單個用戶空間包。
使用SDK的原因:
爲了保證二進制和特性兼容性,針對特定的發行版編譯自定義軟件
編譯更新版本的指定包文件
使用自定義的補丁或者不同特性來重新編譯已經存在的包
0.下載適合自己路由器平臺的相關SDK和ToolChain
如:HG255D的官方下載地址爲:
http://downloads.openwrt.org/attitude_adjustment/12.09/ramips/rt288x/
其中:
OpenWrt-SDK-ramips-for-linux-i486-gcc-4.6-linaro_uClibc-0.9.33.2.tar.bz2
OpenWrt-Toolchain-ramips-for-mipsel_r2-gcc-4.6-linaro_uClibc-0.9.33.2.tar.bz2
這兩個是我們要下載的文件,(不是說SDK麼,那是應爲ToolChain裏面有我們SDK編譯是需要的lib等其他庫文件)
0. 安裝編譯環境需要的相關依賴吧(多裝總部少裝問題要好):
sudo apt-get update
sudo apt-get install gcc g++ binutils patch bzip2 flex bison make autoconf gettext texinfo unzip sharutils subversion libncurses5-dev ncurses-term zlib1g-dev
sudo apt-get install libncurses5-dev zlib1g-dev gawk flex patch git-core g++ subversion
1. 把OpenWrt-SDK-ramips複製到一個目錄,解壓
tar jxvf OpenWrt-SDK-ramips-for-linux-i486-gcc-4.6-linaro_uClibc-0.9.33.2tar.bz2
2. 進入目錄
cd OpenWrt-SDK-ramips-for-linux-i486-gcc-4.6-linaro_uClibc-0.9.33.2
3. 將自己的項目代碼目錄拷貝到本目錄的 package目錄下(下面也會講到,這裏只是提一下)
注意 Makefile 必須遵守openwrt的規則, 可參考
http://blog.chinaunix.net/uid-27194309-id-3432651.html
4. 編譯, 成功後在bin/ar71xx/packages目錄下可以看到相關的ipk文件, 可用winscp 拷貝出來
注:
#編譯所有組件 make V=99
#單獨編譯某個組件 make package/{PackageName}/compile
5. 安裝到路由器上實驗, 這個你們都懂的
注:項目的src裏的Makefile源代碼生成的目標程序名 = PackageName 根目錄(src上層目錄)下面的 Makefile 裏面定義個PKG_NAME,不然各種奇葩的錯誤等着你,而且官網上沒有文檔說明這點。
另外:千萬不要看網上說編譯完一個package後要執行下make distclean以清理之類的,要不然等着出現各種問題吧,最後不的不得重新解壓我們的SDK。
#注: SDK的目錄不要改動, 否則出現如下錯誤
xxg@xxg-desktop:~/SDK-ar71xx-gcc-4.6-linaro_uClibc-0.9.33.2$ make
/bin/sh: /home/xxg/OpenWrt-SDK-ar71xx-for-linux-i486-gcc-4.6-linaro_uClibc-0.9.33.2/staging_dir/host/bin/find: not found
/bin/sh: /home/xxg/OpenWrt-SDK-ar71xx-for-linux-i486-gcc-4.6-linaro_uClibc-0.9.33.2/staging_dir/host/bin/find: not found
三、OpenWrt下創建自己的軟件包,又稱在OpenWrt下做程序設計,或OpenWrt的嵌入式開發
1,瞭解Makefile
具體的Makefile細節規則參見一下幾篇不錯的文章:
openwrt SDK, 利用SDK生成自己的ipk安裝包:
http://blog.chinaunix.net/uid-27194309-id-3432651.html
OpenWrt增加軟件包方法
http://blog.csdn.net/niyufeng/article/details/7390755
(原版:http://wiki.openwrt.org/doc/devel/packages)
[OpenWrt] 創建軟件包
http://blog.csdn.net/sydjm/article/details/8252336
openwrt下面創建/添加package----Makefile模版
http://blog.csdn.net/hdw10/article/details/7939336
特別注意事項:
1,項目的src裏的Makefile源代碼生成的目標程序名 = PackageName 根目錄(src上層目錄)下面的 Makefile 裏面定義個PKG_NAME,不然各種奇葩的錯誤等着你,而且官網上沒有文檔說明這點。
2,src下面的Makefile也是要注意和以前的在linux下的區分一下的
$(CC) 和 $(CXX) 是openwrt 的特定交叉編譯器,在編譯openwrt 時候創建的,在此直接使用即可。$(LDFLAGS) ,$(CFLAGS) 是用交叉編譯器鏈接和編譯文件時必須要加的標誌。很多編譯出錯的原因都是處在此!!
參見:
http://blog.csdn.net/han_dawei/article/details/7939336 文章末尾
http://fleshandmachines.wordpress.com/2011/08/22/openwrt-cc-programing/ 文章中的模版(注意C和C++的區別)
3,這樣的錯誤:
“makefile tab Makefile:2: *** missing separator (did you mean TAB instead of 8 spaces?). Stop.”
那是應爲:
在每個命令前面要有一個tab字符。
但有些編輯器會自動將tab轉爲四個或八個空格。
如:
set tabstop=4 # 四個空格。
set shiftwidth=4 # 自動縮進的寬度。
check your editor!
參見:http://hi.baidu.com/xmuwubo/item/4f504d55dfaa28dbd48bacc3
4,程序依賴的動態庫PackageName/Makefile裏的 DEPENDS 選項要寫
,並且在PackageName/src/Makefile 裏的編譯選項後面也要寫
如:
define Package/PackageName
..............................................
DEPENDS:=+libpcap +libopenssl
Endef
2,兩個實例幫你瞭解OpenWrt平臺下程序設計
2.1 hellowrld C語言版
2.2 hellowrld C++ 版
參見(老外做學問真的很認真):
http://fleshandmachines.wordpress.com/2011/08/22/openwrt-cc-programing/(需翻牆)
http://www.gargoyle-router.com/wiki/doku.php?id=openwrt_coding
注意:其中作者解決C++程序中使用STL庫函數而我們的OpenWrt默認又不集成STL庫的解決 辦法,作者是按OpenWrt的兩個版本( Kamikaze版和White Russian 版,作者說他文章中的解決辦法是針對White Russian 版的可能對Kamikaze版沒效果),說實話我百度了半天Kamikaze版和White Russian 版的區別也沒搞出個所以然:-(,我就知道我的0508固件。
另外:我的是編譯的時候就報錯了:Package memwatch is missing dependencies for the following libraries: libstdc++.so.6 ,這時我們前面下載的:
OpenWrt-Toolchain-ramips-for-mipsel_r2-gcc-4.6-linaro_uClibc-0.9.33.2.tar.bz2
就用上了,解壓之,然後
1,Copy"OpenWrt-Toolchain-ramipsXXX/usr/lib/libstdc++.so.6.0.16"
到"OpenWrt-SDK-ramipsXXX/staging_dir/target-i386_uClibc-0.9.33.2/usr/lib"
2.cd OpenWrt-SDK-ramipsXXX/staging_dir/target-i386_uClibc-0.9.33.2/usr/lib
執行:
ln -s libstdc++.so.6.0.16 libstdc++.so.6" (注:後面的那個你想得到的)
也就是複製ToolChain裏的庫文件的SDK裏,然後創建連接(兼容使用)
參考:https://forum.openwrt.org/viewtopic.php?id=42098 (末尾壇友的回覆)
對於路由器運行環境那端:
去官網下載了個:libstdcpp_4.3.3+cs-43.32_ramips.ipk 裝上就OK了,那麼照作者的意思我的0508的固件就是基於Kamikaze版做的了(只是猜測),作者給的方法是在線安裝,我想說呵呵,對於我這種苛刻的校園環境路由器直接聯網不是那麼容易的,所以下載,上傳,安裝 倒也來的方便。
官方下載地址:
http://downloads.openwrt.org.cn/OpenWrt-DreamBox/packages/ramips/packages/libstdcpp_4.3.3+cs-43.32_ramips.ipk
3,實戰移植開源項目到OpenWrt平臺,即把自己的符合C/C++標準規範的程序源碼修改並在OpenWrt SDK下編譯生成安裝文件(ipk)
移植開源項目h3cclient到OpenWrt平臺
1,前期準備:
找到能在自己學校認證成功上網的開源client代碼,具體的大家可以先裝個linux系統測試下,如果能在linux下認證成功的話那麼移植到OpenWrt也才就有了可能性。
2,代碼OpenWrt規範化
(前面說的Makefile說的已經很清楚了,這裏再提一下)
OpenWrt要求源代碼必須在PackageName/src目錄下面,且PackageName下和src 目錄下各有一個Makefile,要特別注意前面提到的src下面的Makefile裏編譯指令和通常寫法的區別
3,我編譯h3cclient遇到問題及解決辦法
1,看到源代碼裏用到了libpcap 那麼本機編譯環境自然也的裝個吧,另外網上有人說它還用了libgcrypt,所以就一起安裝下吧(注意是本機,電腦)
sudo apt-get install libpcap-dev
sudo apt-get install libgcrypt-dev
2,上面說說的程序用了STL缺少庫的解決辦法(含本機和路由連個運行環境)
3,還有一個就是,好像是什麼程序使用了ccache編譯時報了錯誤,google一通,這樣解決的:
apt-get install ccache
4,編譯時:ERROR:please fix package/helloworld/Makefile
解決辦法:沒什麼說的,檢查你的Makefile把騷年,參見我前面說的Makefile規範
5.複製網上的代碼的時候注意檢查Makefile 中的 Tab是否還在呢
6,想不起來了,記得當時遇到問題是挺多的
四,經驗總結篇
玩東西要有神擋殺神佛擋殺佛,兵來將擋水來土掩的勇氣。遇到問題解決問題,google,baidu少不了,翻牆那是必然。
五、其它好的文章推薦:
如何在OpenWRT環境下做開發
http://hi.baidu.com/gouooo/item/6932bfa97d23d1981410736a
OpenWrt toolchain工具鏈環境及開發程序示例
http://blog.appdevp.com/archives/64
Ubuntu 12.04安裝QQ2012
http://www.linuxidc.com/Linux/2012-05/59564.htm
openwrt下面創建/添加package----Makefile模版
http://blog.csdn.net/hdw10/article/details/7939336