起因...
有次在整理倉庫的時候發現之前不知道辦什麼網路送的一台 Fon AP ,第一次拿到 Fon 的時候聽他的概念其實還不錯,就是熱點共享,當你有一台 Fon 的時候你可以選擇要不要開放 Guest 給其他人使用,如果當你開放 Guset 了話相對的你也可以使用其他人的 Guest (當然只要有 Fon 你都可以用你的帳號登入並且使用網路)簡單的來說就是網路共享的概念,但很可惜並沒有真正的推廣起來,或許之後會有那麼一天吧...
回歸正題 Fon2201 刷 DD-WRT
其實會刷主要是因為發現這個韌體有 Bug 的樣子,因此很單純的就是想降版,然後官方網站好像也掛了(或是公司已經停止營運了!!)
結果意外的發現這台之前有人刷成 DD-WRT 這消息真是令人振奮,有一種不小心拿小刀砍死魔王然後升級成聖劍的感覺...(誤
接下來我記錄了我的血淚經過
事前準備
軟體:
PuTTY
TFTP Server
DD-WRT firmware for Fonera <===請至DD-WRT下載
硬體:
Fon2201
一條網路線
USB 轉 TTL <=== 據說可以用 telnet 登入,但是我的韌體不行,所以只好用這東西了
一開始我本來找到一個網站,說什麼可以用 Telnet 進去但後來發現大部分都是使用 0.7.1 r1 的韌體才有辦法去開啟 Telnet ,而我手殘升級成 1.1.2 本來想說降級到 0.7.1 r1 但是花了一個下午的時間去找 firmware 或是還原的方式都無效(還有人說可以用後面的 reset ,但我測試過還是無效),後來找到了一個方法可以很簡單的完成刷機動作
就是用 Serial 來刷機原來拆開後他有 Serial port 可以使用
開始刷機
我使用的 TFTP Server 是 TFTPD32 主要是因為設定上比較習慣而已
但在開啟之前要先將 LAN 實體網路卡設定成
IP:192.168.1.2
MASK:255.255.255.0
Gateway:192.168.1.1
然後把網路線一頭接在電腦的網孔一頭接在 Fon2201 的 WAN 上面 (PC_LAN to Fon2201_WAN)
接下來開啟TFTP,在 Current Directory 點 Browser 並指到放 DD-WRT firmware 的資料夾,然後 Server interface 選擇 192.168.1.2
首先翻過來把靠近燈號的兩個止滑墊卸下來
這邊可能要注意一下,它使用的是六角的母螺不是一般的十字母螺
拆開後找到了 Serial port 然後依序由網孔位置第一個數起來是 5VC,TX,RX,GND
接著接上 USB 轉 TTL 我用的 Chip 是 cp2102 我想其它的應該也沒問題
確認好 COM port 的號碼後開啟 PuTTY 並選擇 Serial 在 Serial line 的地方打上COM7(以我為例我的 COM 號碼是 7)
接下來必須把機器重新開一次機,我的做法比較簡單是直接把 GND 接線把起來再插一次
然後畫面就會開始進入開機程序了
當跳出 Executing boot script in 1 seconds - enter ^C to abort 的時候要按下 Ctrl+C
完成後會出現 Redboot>這時候已經進入了 CLI 模式了
接下來就按照下面的方式做就可以了
Redboot> ip_address -l 192.168.1.1 -h 192.168.1.2 (這段主要在設定這台的 IP 位置跟 TFTP Server 的IP)
Redboot> fis init (建立一個新的 partition table)
About to initialize [format] FLASH image system - continue (y/n)? y (輸入 y 就可以了)
*** Initialize FLASH Image System
... Erase from 0xa87e0000-0xa87f0000: .
... Program from 0x80ff0000-0x81000000 at 0xa87e0000: (一直到這段出現表示建立完成)
RedBoot> load -r -b 0x80041000 linux.bin (將 DD-WRT firmware 下載進來 )
Using default protocol (TFTP) (預設為TFTP)
Raw file loaded 0x80041000-0x80662fff, assumed entry at 0x80041000 (到這邊已經將 .bin 下載完成了)
RedBoot> fis create linux (建立 linux,注意 create 跟 inti 的用法不太一樣)
... Erase from 0xa8030000-0xa8652000: ...................................................................................................
... Program from 0x80041000-0x80663000 at 0xa8030000: ...................................................................................................
... Erase from 0xa87e0000-0xa87f0000: .
... Program from 0x80ff0000-0x81000000 at 0xa87e0000: (到這個步驟結束為止超久的,要耐心等候)
RedBoot> fconfig (結束後開始設定 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 (這時候出現 >> 是要你輸入 script )
>> exec (下面就會開始跳出一些設定,原則上都直接按 Enter 帶過就好了)
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-0x81000000 at 0xa87e0000:
RedBoot> reset (都結束後下重新啟動的指令就可以了)
然後...接上 LAN 打開瀏覽器輸入預設的 http://192.168.1.1 就可以順利的使用 DD-WRT 了
後記
其實寫得好像很簡單一樣,但是過程還是發生了不少事情
例如前面寫的我為了降版花了一個下午在找 0.7.1 r1 的 firmware,雖然找到了但是當我丟上機器的時候卻跟我說拒絕使用,後來發現 Fon2201 裡面有 Serial port 可以用,但這邊還是要講一下 USB 轉 TTL 真的要買好一點,我之前有一個幾十塊錢的一接上去每多久就只剩下過電的功能了...
另外,好像還有人刷成 OpenWRT 下次可以挑戰看看,openwrt 似乎可以做更多事的樣子
意外的發現其實它 5V 就可以驅動了,所以下次會改看看用 USB to Serial port 來供電,這樣在攜帶上又更簡便了 🙂