HG255D[OpenWrt]刷機

原文地址: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固件不是原生爲這款路由設計的,而是華碩RTN13UDD固件,因爲硬件大致相同,所以可以混用
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編輯,那麼學會用WinSCPPCOpenWRT間傳送文件吧。

仍舊以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)開發環境的搭建

 這裏網上教程很多很詳細,我就自己實踐過的文章推薦給大家

1OpenWrt完整平臺的搭建

 

 環境:

Ubuntu 10.04subversionVMware 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 (輸出調試信息模式下進行)

  注:第一次編譯由於要下載大量的軟件包,慢慢的等吧,快則半小時,慢則23小時如果下載過慢,建議您中斷編譯過程,然後用迅雷去主動下載,放到./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.下載適合自己路由器平臺的相關SDKToolChain 

如: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,不然各種奇葩的錯誤等着你,而且官網上沒有文檔說明這點。

2src下面的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/  文章中的模版(注意CC++的區別)

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

移植開源項目h3cclientOpenWrt平臺

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,編譯時:ERRORplease 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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章