TP-Link TL-WR703N折騰筆記
PS. 本文是iddmx的《一個程序員的世界》(原名一個程序員的世界觀)的更新。作者是iddmx的同學,一個實驗室,坐在他旁邊~
緣起:可惡的校園網
應該有很多大學都在用銳捷認證,銳捷這個東西。。誰用誰知道。不是一般的坑。在我們學校,固定IP,綁定Mac,就不說了,而且更坑爹的是還沒有Linux的客戶端,於是乎各種解決方案都出現了。
大學三年我們嘗試過各種方法來解決這個問題。對於Windows系統,我們的解決方案是利用一款叫Connectify的軟件; 在Linux系統,用的是Mentohust來認證。
但這些方法都有幾個不足:在某一個時間,一個帳號只能有一台電腦在線。在晚上斷電之后,即使有多個帳號,因為交換機沒有電(我們寢室的小UPS只能挺20分鍾)只能有一台電腦連接主線上網。
在大一的時候我北大的一個同學就告訴過我可以用路由器刷OpenWRT系統,在路由器里跑Mentohust,然后用無線來共享網絡。由於他一開始沒有說明是哪個型號,買了一個路由器之后上網一查,說不支持這個型號。后來再問北大同學,他告訴我他知道最方便的就是TL-WR703N。由於剛買完一個,資金有點緊張,就放在一邊了。這一放就是三年。
21號的時候跟ZTY去電子大世界,尋思買盒炭粉給實驗室打印機換點墨粉。順道就去二樓轉了一圈,偶然間發現了竟然有賣這個型號的。於是就買了一個回來研究。結果,這四天,我就沒再消停過。
刷機,走起~
自己配置過路由的同學都應該知道,其實路由器固件升級並不是什么困難的事。通過192.168.1.1 admin admin進入路由器管理界面之后,在系統管理一項中就有一個固件升級。只要在輸入框中選擇事先下載好Openwrt固件(帶factory那個),然后點擊升級,再等幾分鍾,只要中間沒斷電,基本上就沒什么問題。(如果不幸斷電,想找解決方案的話,請看TTL刷機部分)很順利的就刷到了OpenWRT系統。OpenWRT是一種嵌入式Linux系統。心想憑借着8年多的Linux使用經驗,這點問題肯定難不倒我咯。於是,插上網線,把IP地址改成192.168.1.X,或者直接自動獲取也行。順利的利用SSH進入了路由器中。這其中有幾點需要補充:
首先是有些同學可能會發現刷好OpenWRT之后,搜不到路由器無線,這是正常現象,OpenWRT默認沒打開無線。可以利用網線連上之后進入192.168.1.1 Luci界面 Network ->Wifi進行開啟,然后就可以拔掉網線,利用無線操作了。
還有的同學可能會刷好之后就迫不及待的用SSH進行連接,會發現連接不上。這是因為路由器的密碼沒有設置。只要進入192.168.1.1把root密碼設置一下就OK了。
在進入到路由器之后,編輯/etc/config/network文件,改成如下內容:
config interface 'loopback' option ifname 'lo' option proto 'static' option ipaddr '127.0.0.1' option netmask '255.0.0.0' config interface 'lan' option ifname 'eth1' option type 'bridge' option proto 'static' option ipaddr '192.168.1.1' option netmask '255.255.255.0' config interface 'wan' option ifname 'eth0' option _orig_ifname 'eth0' option _orig_bridge 'false' option proto 'static' option ipaddr '222.27.243.64' option netmask '255.255.255.0' option gateway '222.27.243.1' option dns '202.97.224.68' option macaddr 'XX:XX:XX:XX:XX:XX'
由於要進行銳捷認證,所以wan口改成了靜態獲取。如果想用DHCP的話,那只要把proto那行后面改成‘dhcp’,在往后的不用寫就好了。最后一行表示進行mac地址克隆,如果需要,改成自己要克隆的mac就好,否則刪掉就可以。
然后在/etc/rc.local中加入如下代碼:
ip link add link eth0 eth1 type macvlan ifconfig eth0 hw ether 60:EB:69:8D:82:2A ifconfig eth0 up
這樣就實現了wan口和lan口自動切換。(因為WR703N只有一個有線口,既是WAN又是LAN)
其實這段代碼花費了我兩天的時間,之前在PC上雖然配過很多次,但都是本身就有多塊網卡。這種只有一個口的是第一次配置。
在這之間又重刷了好多次系統。其中好幾次感覺應該是固件有些問題,相同的代碼,但在有的固件上就是不好使。
更悲催的是中間有一次忘了配置Lan口,保存重啟路由之后,無線連接不上,有線獲取不到IP地址。。在這糾結了半天。在網上查了半天之后知道了解決方案:
在路由器啟動的時候指示燈會先亮一下,然后滅,過幾秒之后開始閃。在開始閃的同時,用一根牙簽或其他東西捅一下路由器的菊花(RESET鍵)。路由器指示燈開始狂閃,路由器進入維護模式。這時插上網線,就可以輸入telnet 192.168.1.1進到路由器,再輸入firstboot就可以將路由器恢復到初始狀態。之后就可以進行重新設置。
在配置好網絡屬性之后,就可以安裝mentohust進行認證了。有兩種方法,第一個,也就是比較簡單的方法,就是google小標wr703n固件,里面集成好了Mentohust、打印服務器等功能,刷好了之后,就可以直接在web界面進行配置。第二種方法就是自己進行交叉編譯一個mips的mentohust然后利用scp之類的拷到路由中去。如果不想自己配置交叉編譯環境也可以上網找個已經編譯好的mentohsut。 我對兩種方法都進行了實驗,最后我用了第一種方法,理由很簡單:可以通過web頁面進行配置。
配置好mentohust之后,ssh進入路由器,輸入mentohust,啟動的時候,提示“客戶端完整性校驗失敗”。這種問題的處理已經很有經驗了。只要把windows下銳捷的8021x.exe SuConfig.dat W32N55.dll 拷貝到/etc/mentohust/目錄下就OK了。
路由器成功連上網之后,就需要配置一下無線,共享網絡連接。。。正在配置的時候。發生了如下對話:
ZTY:“你這個配置好之后,我拿到大連還能用么”
我:“肯定能用啊。。現在這個就是一個功能擴展版的路由器,可以直接在web界面進行相關配置的,要是實在不行我可以給你刷回去,幾條命令的事,要么現在試試給你刷回去?”
ZTY:“刷吧”
於是乎我就把剛改好的配置文件備份了一下(我是直接用tar打包之后,放到了/www目錄,然后在電腦上用瀏覽器直接輸入192.168.1.1/1.tar下載下來的)。
把官方的bin用scp拷貝到了路由器/tmp目錄
使用cat /proc/mtd查看路由支持的升級命令
root@OpenWrt:~# cat /proc/mtd
dev: size erasesize name
mtd0: 00020000 00010000 "u-boot"
mtd1: 000d9ebc 00010000 "kernel"
mtd2: 002f6144 00010000 "rootfs"
mtd3: 00100000 00010000 "rootfs_data"
mtd4: 00010000 00010000 "art"
mtd5: 003d0000 00010000 "firmware"
解釋一下上面中的幾個:(網上找的)
uboot就像電腦的bios,是底層的管理系統;
fw就像電腦的操作系統,實現路由器的各種功能;
art就像電腦的無線驅動程序,是無線校驗碼;
uboot的長度為128KB(0x20000);
art為64KB(0x10000);
fw有4M和8M的區別,4M的為3840K(0x3c0000),8M的為7936KB(0x7c0000)
根據上面的升級參數執行升級命令
mtd -r write wr703nv1.bin mtd5
然而。。運行結果並沒有想象那么順利。。。。。。。。。。。。。。。。。。。。。。
我擦。。。悲劇了!!!
應該是下的固件不對,報錯了
在報錯之后,我毫無經驗的拔下了電源,期待重啟能好使。或者用捅菊花的方法能重置。。。。。。
結果仍然不好使!!!
無線——————沒有!
有線——————沒有!
瞬間感覺腦袋發脹,眼前的所有東西開始晃。。晃。。晃。。我看着手中的WR703N。它在慢慢的變化,變化,慢慢的,它變成了一塊磚。。。這他母親的逗我玩呢!!磚還能用來砸人呢!這么點個玩意,砸人也不疼啊。。。。
進階:拆!
在上網查了一通之后,發現之前看的刷機教程中有這么一句話:“刷機過程一定不能掉電,否則就只能上TTL了。”
瞬間我又看到了希望。。當即我就做了一個決定:
TTL刷機走起~
根據網上的教程:http://www.unxmail.com/read.php?227 和 http://blog.chinaunix.net/uid-16979052-id-3414635.html 進行拆機TTL刷機
由於我是一個學軟件工程的,里面需要的TTL轉USB線沒有,所以計划第二天再去一趟電子大世界。前一天晚上主要工作就是把TP_IN 和 TP_OUT兩個觸點焊出兩根線來。

這一部建議以前沒有焊過的不要輕易嘗試(可以考慮我們后來用的方法用兩個夾子,把一面改造成尖口的,另一面用膠布粘上絕緣),在三次失敗的焊接之后,我們終於成功把TP_IN的觸點焊糊了。。。。。不過沒太大問題,仔細觀察電路,可以發現C55左邊的焊點跟TP_OUT相連,C57靠上那個焊點是和TP_IN相連。
第二天,買到了PL2303 TTL線,接上,按照剛才的第一個鏈接的步驟一步一步刷。。

由於是晚上刷的。。腦袋不太靈光。一不小心,把fw.bin當成了full.bin了,在輸入:
tftp 0x80000000 fw.bin
erase 0x9f000000 +0x400000
cp.b 0x80000000 0x9f000000 0x400000
之后。。重啟路由器。。。。。。。。然后。。。。然后。。。。。。。
我了個大擦,更悲劇了。
開機之后,指示燈長亮,用TTL連接,沒有任何反映。。。得。。。看來唯一的辦法就是拆FLASH芯片上編程器了。。
就是這個片子:

於是,今天下午淘寶了個編程器,發的順豐,估計明天能到。在實驗室的旮旯找出了熱風槍、烙鐵、焊錫膏等一系列設備。
而且我作為一個學軟件工程的學生,大部分時間都是在寫程序。焊接經驗基本上為0,之前手機座充壞了,尋思自己焊,折騰了不下3回才修好。。。拿烙鐵的手非常不穩,明顯抖得厲害。而且可以里面那個flash是貼片的,每個針腳相距不到一毫米。。。
所以找了個信通學院的小美女,據說有手工焊貼片的經驗。准備讓她幫我焊。。。哈哈
剩下的就是等明后天編程器到了刷flash了。。買編程器的時候,我又帶了一個8M的新flash,一個64M的內存,等明后天到了之后讓小美女看看能不能焊,要是能焊就直接讓她幫着給換了~
今天編程器到了。。沒有想象中的那么復雜。只不過買的時候沒買SOP8轉DIP8的轉接座,用手掐着flash燒錄的。。期間燒失敗了好幾回。
把Flash吹下來以后,按照編程器說明,固定到相應位置,在編程器軟件上選擇要刷寫的bin,然后先擦除芯片,再查空,最后再燒錄就OK了~
買的編程器:

最近折騰用的設備的全家福 :

后記:
刷機有風險,折騰需謹慎啊!!!!!
