把Fon的韌體刷新為DD-WRT

市面上的無線分享器很多,許多產品雖然品牌不同,但內部卻大同小異,差別只是flash裡面的韌體不同而已。不過,可別小看韌體的差異,不同的韌體往往帶來天差地別的表現。再加上廠商為了區隔高階與低階市場,就算是差不多的硬體,也得被封印住部份功能。因此,只要改刷成DD-WRT第三方韌體,不但可以解除封印,同時還多出不少原廠韌體沒有的功能。

那有些人會問,什麼是DD-WRT? DD-WRT是Open WRT Project的一個分支,官網為http://openwrt.org/,Open WRT是以Linux為基礎寫成的無線分享器韌體,基於GPL的精神當然是開放原始碼的。而目前DD-WRT是由BrainSlayer這位實力高深的德國駭客來維護,官網是http://dd-wrt.com/dd-wrtv3/,以下是我拿Fon來刷DD-WRT韌體的過程,也將本人所使用到的軟體打包,請點此下載

一、準備檔案─用於刷新韌體的檔案
(1)openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma
(2)out.hex 
(3)DD-WRT的韌體檔案:linux.bin (也可以直接上官網找自己想要的版本,我是用090425的測試版) 

二、準備工具─用於傳輸韌體檔案以及連線操作的工具
(1)PuTTY:用來做 ssh 連線用的工具。
(2)tftpd:用來做 tftp 服務的 server(請把linux.bin放在tftpd的目錄底下)
(3)HFS:作為檔案傳輸時的 server(請開啟後自行設定分享openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma 與 out.hex 兩個檔案)

三、重置Fon─讓Fon韌體回復到0.7.1 r1以方便開啟ssh連線
(1)拔掉網路線。
(2)插上電源並開機,請注意”POWER”燈號應呈現恆亮,請稍後直到WLAN燈號正常亮起並閃爍。(注意,通常兩分鍾後WLAN燈號才會閃爍)
(3)您可以用迴紋針或筆壓下無線基地台機器背面的黑色小孔(reset),按下時 WLAN 燈號熄滅,只剩POWER電源燈號燈亮著。請持續按壓30秒後才放開。
(4)放開reset黑色小孔後,約需等數分鍾後WLAN燈會再度開始閃爍。此過程中間請不要中斷Fon的電源。
(5)reset完成。

四、連接Fon的Myplace無線網路─讓我們可以利用無線網路來控制Fon 

五、開啟ssh連線─讓我們有辦法連線進入Fon並輸入刷新韌體的指令
(1)產生一個step1.html檔,內容如下:
—————————————————————————————–
<html>
<head>
</head>
<body>
<center>
<form method=”post” action=”http://192.168.10.1/cgi-bin/webif/connection.sh” enctype=”multipart/form-data”>
<input name=”username” value=”$(/usr/sbin/iptables -I INPUT 1 -p tcp –dport 22 -j ACCEPT)” size=”68″ >
<input type=”submit” name=”submit” value=”Submit” onClick=”{this.form.wifimode.value=’”;’ + this.form.wifimode.value +’;”‘}” />
</form>
</body>
</html>

—————————————————————————————–
(2)產生一個step2.html檔,內容如下:
—————————————————————————————–
<html>
<head>
</head>
<body>
<center>
<form method=”post” action=”http://192.168.10.1/cgi-bin/webif/connection.sh” enctype=”multipart/form-data”>
<input name=”username” value=”$(/etc/init.d/dropbear)” size=”68″ >
<input type=”submit” name=”submit” value=”Submit” onClick=”{this.form.wifimode.value=’”;’ + this.form.wifimode.value +’;”‘}” />
</form>
</body>
</html>

—————————————————————————————–
(3)在本機電腦上執行step1.html,按下submit按鈕後,會跳出視窗要輸入帳號密碼,請輸入帳號admin以及密碼admin。
(4)接著執行step2.html,也是一樣按下submit按鈕後,等到瀏覽器出現Fon的管理視窗即可。

六、修改Fon機器的內部設定值─讓Fon重新啟動之後也能利用SSH連線
(1)執行PuTTY,連線到192.168.10.1,輸入帳號root以及密碼admin。
(2)利用vi,將/etc/firewall.user的第22、23行註解拿掉。
         # vi /etc/firewall.user
(3)把Fon的sshd設定為開機即啟動
         # mv /etc/init.d/dropbear /etc/init.d/S50dropbear

七、啟動HFS─讓Fon可以抓取本機的檔案
(1)將openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma以及out.hex 加入HFS中。

八、在Fon上加載刷新韌體的前制檔案─讓Fon可以刷DD-WRT的韌體
(1)執行PuTTY,連線到192.168.10.1,輸入帳號root以及密碼admin。
(2)接著依序執行以下指令:
—————————————————————————————–
# cd /tmp
# wget http://169.254.255.2:8080/openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma
# mtd -e vmlinux.bin.l7 write openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma vmlinux.bin.l7
# reboot

—————————————————————————————–
(3) 等待Fon重新開機後,大約一、兩分鐘,再以PuTTY連入192.168.10.1並執行下列指令:
—————————————————————————————–
# cd /tmp
# wget http://169.254.255.2:8080/out.hex
# mtd -e “RedBoot config” write out.hex “RedBoot config”
# reboot

—————————————————————————————–
(4)等待Fon重新開機後,將您的電腦區域網路的ip改為192.168.1.166,或是任何一個皆可,不要是192.168.1.254就行了,遮罩為255.255.255.0。

九、啟動tftpd─讓Fon可以用預設連線方式抓取DD-WRT的韌體來更新
(1)將linux.bintftpd執行程式放在同一個目錄中。

十、開始刷新DD-WRT韌體─把Fon的韌體更新為DD-WRT
(1)執行PuTTY,利用telnet連線到192.168.1.254,port 9000。
(2)確認提示符號為 RedBoot>
(3)接著請依照紅字來輸入:
—————————————————————————————–
RedBoot> ip_address -l 192.168.1.254/24 -h 192.168.1.166
IP: 192.168.1.254/255.255.255.0, Gateway: 0.0.0.0
Default server: 192.168.1.166
RedBoot> fis init
About to initialize [format] FLASH image system – continue (y/n)? y
*** Initialize FLASH Image System
… Erase from 0xa87e0000-0xa87f0000: .
… Program from 0x80ff0000-0×81000000 at 0xa87e0000: .
RedBoot> load -r -b 0×80041000 linux.bin
Using default protocol (TFTP)
Raw file loaded 0×80041000-0x806a0fff, assumed entry at 0×80041000
RedBoot> fis create linux
—————————————————————————————–
(4)接下來會等個十多分鐘,可能更久,在這期間請勿輸入任何文字,否則會造成斷線,必須拔除電源重開機後重新來過。如果在 load -r -b 0×80041000 linux.bin 之後等了很久,那可能是你忘了啟動tftpd,如果是這樣,那得退出 telnet視窗,重新來過。
(5)十幾分鐘後會看到下面畫面,在繼續依照紅字輸入:
—————————————————————————————–
… Erase from 0xa8030000-0xa8690000: …………………………………………………………………………………………
… Program from 0×80041000-0x806a1000 at 0xa8030000: …………………………………………………………………………………………
… Erase from 0xa87e0000-0xa87f0000: .
… Program from 0x80ff0000-0×81000000 at 0xa87e0000: .
RedBoot> fconfig
Run script at boot: true
Boot script:
.. fis load -l vmlinux.bin.l7
.. exec
Enter script, terminate with empty line
>> fis load -l linux
>> exec
>>
Boot script timeout (1000ms resolution): 10
Use BOOTP for network configuration: false
Gateway IP address:
Local IP address: 192.168.1.254
Local IP address mask: 255.255.255.0
Default server IP address:
Console baud rate: 9600
GDB connection port: 9000
Force console for special debug messages: false
Network debug at boot time: false
Update RedBoot non-volatile configuration – continue (y/n)? y
… Erase from 0xa87e0000-0xa87f0000: .
… Program from 0x80ff0000-0×81000000 at 0xa87e0000: .
RedBoot> reset
—————————————————————————————–

十一、完成─進入DD-WRT的設定介面設定網路

Tags: ,

4 Responses to “把Fon的韌體刷新為DD-WRT”

  1. Lion 說道:

    感謝分享..已完成修改..
    但有一事要詢問 現在的版本 04/25/09
    如要更新到較新的版本 以上的動作還要再來一次嗎..
    還是用DD-WRT裡的更新來執行…問題多多 還請見諒.

  2. 冰戀物語 說道:

    不用在重新來一次,用DD-WRT裡的更新韌體就行了。

    假如不幸刷掛了,可以從RedBoost那邊在重新來一次~

  3. CHCOOBOO 說道:

    感謝這篇教學, 不過中間也遇到不少問題就是了…
    像第一個遇到的問題就是開SSH通道的那兩個html檔
    直接COPY下貼到筆電本的話, 「”」會變成全型的「”」, 導致網頁不正確…小弟的html知識也不算很好…看了半天才看出問題點, 把所有的”取代成”就解決了, 我也順便將改好的檔案貼出來吧 http://cid-20694e61f329dbc4.skydrive.live.com/self.aspx/%E5%85%AC%E9%96%8B/FON%5E_ssh.zip

    然後遇到的

  4. CHCOOBOO 說道:

    然後遇到的第二個問題, 就是我不懂unix的指令…
    上網東問西問才問到…

    要先按i進入編輯模式
    才能把上面說的22行及23行刪掉
    然後再按esc離開編輯模式
    之後再按shift+;
    再輸入w q
    再按enter才能存檔離開

Leave a Reply