FYI
2010-05-01, 09:49 PM
網路上對於La Fonera 的改造計畫可說不勝枚舉, 大多數網友玩的是增加支援SD/MMC, 其他不妨參考DD-WRT Wiki, 不過坦白說, 4MB Flash 小弟已經暫時用不完了, 更何況La Fonera 有8MB Flash, 安裝完DD-WRT 之後至少還有1.5MB Free! 此外挖洞焊接等等會把外觀和PCB 弄得很難看, 所以還是找點別的玩玩, 於是無意間看見以下這篇:
OpenWrt / Serial port (https://forum.openwrt.org/viewtopic.php?id=13161)
雖然以前也曾經瀏覽過 "Serial to Network Proxy (ser2net) (http://ser2net.sourceforge.net)" 這個計畫, 可是一來只支援Linux, 其次沒和Router 聯想在一起, 所以並未引起小弟的注意, 但最近小弟開始把韌體從DD-WRT 轉換到OpenWrt 之後, 真可說改得正是時候, 簡直不費吹灰之力, 一切就此水到渠成, 於是當這回看到那篇文章, 立刻就聯想到就是La Fonera!
曾經有網友希望能遠端遙控Modem 重啟, 其實只要有實體IP, 那就一切好辦, 問題是Bridge Mode 的話就沒轍了, 另外有位網友希望能遙控網管型交換器, 雖然交換器直接連接Modem, 問題是交換器的IP 是虛擬IP, 所以還是無法從網際網路直接遙控, 說來說去就是得透過另一台主機來遙控, 如果有哪台電腦正開著, 那當然沒問題, 但如果只為了這個目的而讓電腦一直開著, 則似乎又有點本末倒置, 一般來說會持續開機的設備並非沒有, 除了Modem 之外, 分享器就是其中之一, 而分享器本來就是一台微電腦, 如果能擴充其他用途豈不是更好? 話說一台Serial (RS232/422/485) to Ethernet Converter 要價少則兩三仟, 多則四五仟, 支援無線則更貴, 沒辦法, 此類多半屬於工業級應用, 而且以量制價, 反正羊毛出在羊身上, 但對於升斗小民來說價格未免太離譜, 況且一般人通常用不到用於遠距離的RS422/485, 所以用分享器來改造成為Serial (RS232) to Ethernet Converter 就成為一個經濟又實惠的主意, What a brilliant idea! 其實熟悉硬體的網友都知道網通產品通常會有1-2 個Serial Console, Modem 和網管型交換器的Console 通常設計在外殼上, 而分享器和語音閘道器則藏於機殼內, 今天的主角La Fonera 也不例外, 訊號是走LvTTL RS232, 3.3V
http://www.pczone.com.tw/pictures-thumb/0/4085251cbda6b8e467ca05196a3a1cde_613.jpg?dl=1272619288 (http://www.pczone.com.tw/members/3901-albums55-picture-613.jpg)http://www.pczone.com.tw/pictures-thumb/0/eedfa80e20394009adb12566fe1386b7_610.jpg?dl=1272619288 (http://www.pczone.com.tw/members/3901-albums55-picture-610.jpg)
硬體決定之後, 下一步當然就是挑選適合的韌體, 小弟曾經大力鼓吹DD-WRT, 確實DD-WRT 是一個不需要高深知識就可以輕易上手的殺手級韌體, 甚至殺到連Buffalo 也打算和BrainSlayer 攜手合作, 在Buffalo 的HP (High Power) 系列預先安裝DD-WRT:
BUFFALO HighPower routers with DD-WRT as factory firmware | www.dd-wrt.com (http://www.dd-wrt.com/site/content/buffalo-highpower-routers-with-dd-wrt-factory-firmware)
雖然DD-WRT 功能的確夠強大, 然而對於想要自行擴充功能的DIYer 來說, DD-WRT 的自由度其實並不高, 所以結論是DD-WRT 非常適合懶人, 該有的功能都具備了, 但不適合崇尚自由的DIYer, 這時候你需要更 "開放" 的OpenWrt, 以往DD-WRT 有個非常吸引人的特色, 也就是支援的平台非常多, 所以DD-WRT 支援列表 (http://www.dd-wrt.com/wiki/index.php/Supported_Devices)就成為非常具有參考價值的選購指南, 但是如今OpenWrt 也不遑多讓, 從Backfire 起, OpenWrt 也逐漸擴大支援範圍, 除了原有的Broadcom 平台以外, Atheros 優異的硬體規格也逐漸成為另一個主要的平台, 再加上OpenWrt 架構愈來愈趨向於Linux 標準化, 以及努力擺脫嵌入式系統的限制, 這使得只要懂一點Linux 就可以很快上手, 話說本篇前言廢話如此之多, 實在是因為安裝過程簡直超乎想像的容易, 擔心吸引不了大家的目光, 所以先把事情原委敘述一番, 廢話不多說, 就此進入正題
首先當然是把DD-WRT 換成OpenWrt, 不過在此得先做一點功課, OpenWrt 雖然彈性非常大, 但是據說設定介面很陽春, 許多功能都必須透過手動輸入指令, 所以很容易讓人以為又回到了侏儸紀的DOS 時代, 不過當OpenWrt Kamikaze 趨於穩定之後, 專為OpenWrt 所設計的網頁設定套件X-Wrt Webif² (http://x-wrt.org) 也適時趕上, 讓OpenWrt 和X-Wrt 的結合成為最佳拍檔, 而X-Wrt 更推出預先打包好的韌體, 以方便網友無痛升級, X-Wrt 整合式韌體共分為default, no_pppoe, openvpn 和extra, 小弟推薦openvpn 版, 網友也可以考慮extra 版, 韌體決定好之後, 接下來就是面對令人頭痛的刷機, 不少網友都是在這一關把La Fonera 變成了磚塊 (Bricked)! 但是現在只要 "一指神功" 就可以化繁為簡, 不再把刷機視為畏途, 所使用的秘密武器就是Fon Flash:
fon_flash [Gargoyle Wiki] (http://www.gargoyle-router.com/wiki/doku.php?id=fon_flash)
Fon Flash 除了支援OpenWrt 之外, 同時也支援DD-WRT 和FON 原廠韌體, 請安照Fon Flash 介面指示操作, 第一步先選擇Gargoyle/OpenWrt, 第二步選擇連接La Fonera 的網路卡, 第三步輸入atheros-root.squashfs 的完整路徑, 第四步輸入atheros-vmlinux.gz 的完整路徑, 最後按下Flash Router Now, 等5 秒之後再開啟Lan Fonera 的電源, 接下來請留意Fon Flash 的訊息, 如果不斷重複某個Arp 訊息, 代表Fon Flash 已經錯過了攔截RedBoot 的時機, 請重新啟動La Fonera, 可以的話, 請盡可能先正常啟動, 然後登入La Fonera 設定頁面再執行Reboot, 另一個提高成功率的方法是以交換器連接La Fonera 和PC, 目的是縮短Windows 對網卡初始化所需要的時間, 以Linux 刷機則無此問題, 刷機需時25-30 分鐘, 請務必耐心等候
http://www.pczone.com.tw/pictures-thumb/0/385ef1fc4f207fefb3c816b5ee11ace1_614.png?dl=1272687214 (http://www.pczone.com.tw/members/3901-albums55-picture-614.png)
刷機成功之後, OpenWrt 預設IP 為192.168.1.1, 請自行調整以避免和Modem 衝突, OpenWrt 初始設定請參考:
【韌體】ASUS WL-HDD2.5 改刷 OpenWrt Kamikaze with X-Wrt Webif² - PCZONE 討論區 (http://www.pczone.com.tw/thread/44/150740/)
接下來要談的重頭戲就是OpenWrt 勝過DD-WRT 的地方 - 擴充套件, 如果不談套件的話, 那麼DD-WRT 基本功能確實為OpenWrt 所不及, 但是一旦談到套件, 則OpenWrt 的自由度和擴充性則遠遠勝過DD-WRT, 固然DD-WRT 也可以將套件安裝於JFF2, 但由於套件的設計都是基於OpenWrt 的架構, 因此在DD-WRT 之下裝完套件之後, 還必須針對DD-WRT 的架構進行許多繁瑣的調整, 這必須具備DD-WRT 的相關知識才能完成, 但是對於OpenWrt 來說, 套件安裝完畢, 通常只需根據不同的硬體, 調整1-2 個設定檔就完工了, 真是事半功倍, 不過話說回來, 不論是DD-WRT 或者OpenWrt, 瞭解硬體是有必要的, 因為套件的預設值通常是針對某個硬體 (Broadcom?) 而設計, 若硬體不同, 則設定可能也不同, 在DD-WRT 之下安裝OpenWrt 套件會遇上哪些困難, 請參考:
【軟體】DD-WRT v24 安裝 PPPoE Relay 套件 - PCZONE 討論區 (http://www.pczone.com.tw/thread/29/150690/)
以下示範如何安裝兩個OpenWrt 套件和一個執行檔, 操作之前請確定La Fonera 已經連上網際網路, 請登入X-Wrt Webif², 然後點選System -> Packages, 先點一下Update package lists, 作用是從網路下載最新的套件列表, 接著在Available packages 之下就可以找到setserial 和ser2net 這兩個套件, 請點選套件左方的Install, 接著就會自動安裝, 過程超乎想像得輕鬆愉快! 安裝另一個執行檔stty 則稍微複雜一點, stty 包含在coreutils 套件之中, 只有40KB, 而coreutils 套件約1.3MB, 為了40KB 而安裝1.3MB 似乎有點說不過去, 而且Flash 的可用空間有限, 變通之道就是先下載coreutils 套件至PC, 再以7-Zip 取出stty, 然後設法傳送至La Fonera, 小弟採用的方法是在Windows 安裝Tftpd32 或HTTP File Server, 然後登入OpenWrt, 再以tftp 或wget 下載至/usr/bin, 並執行:
chmod +x /usr/bin/stty
首先必須把Serial Console 的控制權釋放出來, OpenWrt 啟動之後, Busybox 會佔用Serial Console, 所以也可以從Serial Console 登入, 以下可看出Broadcom-based 分享器預設Console Port 為/dev/tts/0, 而Atheros-based 則為/dev/ttyS0, 修改/etc/inittab
::sysinit:/etc/init.d/rcS S boot
::shutdown:/etc/init.d/rcS K stop
#tts/0::askfirst:/bin/ash --login
#ttyS0::askfirst:/bin/ash --login
#tty1::askfirst:/bin/ash --login
其次針對硬體和應用程式調整上述安裝好的兩個套件, /etc/ser2net.conf
# <TCP port>:<state>:<timeout>:<device>:<options>
2001:raw:600:/dev/ttyS0:9600 NONE 1STOPBIT 8DATABITS -XONXOFF LOCAL -RTSCTS remctl
2002:raw:600:/dev/ttyS0:38400 NONE 1STOPBIT 8DATABITS -XONXOFF LOCAL -RTSCTS
2003:raw:600:/dev/ttyS0:57600 NONE 1STOPBIT 8DATABITS -XONXOFF LOCAL -RTSCTS
2004:raw:600:/dev/ttyS0:115200 NONE 1STOPBIT 8DATABITS -XONXOFF LOCAL -RTSCTS
/etc/init.d/setserial
#!/bin/sh /etc/rc.common
# Copyright (C) 2006 OpenWrt.org
START=15
boot() {
/usr/sbin/setserial /dev/ttyS0 irq 37
/usr/bin/stty -F /dev/ttyS0 speed 9600 raw -echo
/usr/sbin/ser2net -u
}
修改完畢請執行:
/etc/init.d/setserial enable
/etc/init.d/setserial start
/dev/ttyS0 所使用的IRQ 可由dmesg 找到, 由於OpenWrt 可能會發送系統訊息至Serial Console, 所以還必須進行必要的調整, /etc/config/system
config 'system' 'system'
option 'hostname' 'OpenWrt'
option 'timezone' 'UTC-8'
option 'conloglevel' '3'
option 'kconloglevel' '3'
看到這裡, DD-WRT 的玩家可能會很羨慕, 因為在DD-WRT 之下, 要想控制Serial Console 並不是一件容易之事, 就算有辦法控制, 還得避免系統訊息干擾通訊, 解決之道只有設法修改Kernel command line, 但重新編譯又未免小題大作, 不過如果分享器的Boot Loader 為RedBoot 的話, 例如La Fonera, 那麼倒是有一個變通之道, 也就是修改RedBoot 的boot_script_data, 在 "fis load" 之後加入幾行mfill 指令, 例如:
RedBoot> fis load -d vmlinux.bin.l7
Image loaded from 0x80041000-0x80279086
RedBoot> d -b 0x8024E5B0 -l 64
8024E5B0: 63 6F 6E 73 6F 6C 65 3D 74 74 79 53 30 2C 39 36 |console=ttyS0,96|
8024E5C0: 30 30 20 72 6F 6F 74 66 73 74 79 70 65 3D 73 71 |00 rootfstype=sq|
8024E5D0: 75 61 73 68 66 73 2C 6A 66 66 73 32 20 69 6E 69 |uashfs,jffs2 ini|
8024E5E0: 74 3D 2F 65 74 63 2F 70 72 65 69 6E 69 74 00 00 |t=/etc/preinit..|
RedBoot> mfill -b 0x8024E5B8 -l 5 -p 0x2f -1
RedBoot> mfill -b 0x8024E5B9 -l 1 -p 0x64 -1
RedBoot> mfill -b 0x8024E5BA -l 1 -p 0x65 -1
RedBoot> mfill -b 0x8024E5BB -l 1 -p 0x76 -1
RedBoot> mfill -b 0x8024E5BD -l 1 -p 0x6E -1
RedBoot> mfill -b 0x8024E5BE -l 1 -p 0x75 -1
RedBoot> mfill -b 0x8024E5BF -l 2 -p 0x6C -1
RedBoot> mfill -b 0x8024E5C1 -l 1 -p 0x20 -1
RedBoot> d -b 0x8024E5B0 -l 64
8024E5B0: 63 6F 6E 73 6F 6C 65 3D 2F 64 65 76 2F 6E 75 6C |console=/dev/nul|
8024E5C0: 6C 20 20 72 6F 6F 74 66 73 74 79 70 65 3D 73 71 |l rootfstype=sq|
8024E5D0: 75 61 73 68 66 73 2C 6A 66 66 73 32 20 69 6E 69 |uashfs,jffs2 ini|
8024E5E0: 74 3D 2F 65 74 63 2F 70 72 65 69 6E 69 74 00 00 |t=/etc/preinit..|
RedBoot> exec
把原先看起來像是:
console=ttyS0,9600 rootfstype=squashfs,jffs2 init=/etc/preinit
修改成:
console=/dev/null rootfstype=squashfs,jffs2 init=/etc/preinit
如此一來就可以省去重新編譯韌體的麻煩, 只要控制RedBoot 就可以控制OpenWrt 系統訊息, 由於OpenWrt 有提供單獨的vmlinux 韌體, 所以要從記憶體之中找到以上指令的位置並不困難, 但DD-WRT v24 SP1 以後把vmlinux & rootfs 包在一起又加上標頭, 所以就困難多了, 有Linux 作業系統的網友則還有另一個辦法, 也就是利用Firmware Modification Kit (http://www.bitsum.com/firmware_mod_kit.htm) 把vmlinux 解開來, 修改後再打包回去, 但Windows 用戶就只能乾瞪眼了
以上全數安裝完畢, 總得設法測試一下, 如果沒有傳輸線的話, 也可以直接利用現有的Modem, 但是請先弄清楚腳位定義, 在此只需要連接三條線, GND 直接對接, Tx/Rx 則需交錯, 小弟實驗過程是以傳輸線測試, 測試軟體為Hercules SETUP utility (http://www.hw-group.com/products/hercules/index_en.html), 或者其他支援RFC2217 的通訊軟體也可以, 測試環境如下:
PC-COMx <-RS232-> /dev/ttyS0-Fonera-eth0.0 <-Ethernet-> PC-NIC
開啟Hercules SETUP utility, 點擊Serial, 依序設定COM3, 9600, 8, none, OFF, Free, 最後點擊Open, 再開啟另一個Hercules SETUP utility, 點擊TCP Client, Module IP:192.168.1.1, Port:2001, 最後點擊Connect, 請在兩個Hercules SETUP 視窗分別輸入英數字, 下一項測試請重複以上, 但將Baud Rate 改成115200, Port:2004, 由以上測試可得知ser2net 的彈性設計, ser2net 所支援的Baud Rate 上限為115200bps, 這也是一般Linux Router Console 所設定的速率
改造La Fonera 至此還有一個關鍵未完成, 除了OpenWrt 會發送系統訊息之外, RedBoot 啟動時也會發送訊息至Serial Console, 而網友遇上刷機失敗時, 通常也會改由Serial Console 刷機, 所以RedBoot 訊息是難以避免的, 此外, 第一代La Fonera (FON2100) 還有個大問題就是開機時Rx 必須維持0V, 否則無法啟動, 固然可以先啟動La Fonera, 後啟動被控制的設備, 但只要有限制就代表可能會造成不便, 解決之道就是利用La Fonera 的GPIO (3.3V), 以簡單的電晶體開關電路控制啟動時Tx/Rx 皆為低電壓, 一來解決FON2100 的開機問題, 二來也可以彈性控制RedBoot 發送的訊息, 不過小弟認為其實最適合用來改造的應該是La Fonera 1.1 (FON2200), 除了不再有Rx 必須為Low 的問題之外, 還解決了第一代La Fonera 惱人的發熱問題, 體積小, 價格又便宜, 另一個體積也很小的產品則是ASUS WL-330gE (http://oldwiki.openwrt.org/OpenWrtDocs(2f)Hardware(2f)Asus(2f)WL330GE.html), 但是價格就很離譜了
結論:
或許網友並不認同以上過程可以稱得上 "輕鬆愉快", 但是看得懂其中關鍵的網友則心知肚明, 若改以DD-WRT 實做的話更是困難重重, 其實小弟對於Linux 也只有一知半解, 但是單憑僅有的三腳貓功夫就可以完成以上任務, 相信只要網友對於Linux 有興趣, 則必定可以從其中得到更多的樂趣
Kamikaze Installation - X-Wrt (http://wiki.x-wrt.org/index.php/Kamikaze_Installation)
install_guide [Gargoyle Wiki] (http://www.gargoyle-router.com/wiki/doku.php?id=install_guide)
OpenWrtDocs/OpenWrtDocs/KamikazeBootHowTo - OpenWrt Wiki (http://oldwiki.openwrt.org/OpenWrtDocs(2f)OpenWrtDocs(2f)KamikazeBootHowTo.html)
System configuration - OpenWrt Wiki (http://wiki.openwrt.org/doc/uci/system)
Fonera - OpenWrt Wiki (http://wiki.openwrt.org/toh/fon/fonera)
LaFonera Hardware IO (en) - DD-WRT Wiki (http://www.dd-wrt.com/wiki/index.php/LaFonera_Hardware_IO_%28en%29)
Category:LaFonera (en) - DD-WRT Wiki (http://www.dd-wrt.com/wiki/index.php/Category:LaFonera_%28en%29)
OpenWrt / Fonera 2100 serial console need urgent help (https://forum.openwrt.org/viewtopic.php?id=24078)
【FON】To Brick, or not to Brick: that is the question - PCZONE 討論區 (http://www.pczone.com.tw/thread/16/140386/)
【下載】Free Serial Port Monitor - PCZONE 討論區 (http://www.pczone.com.tw/thread/67/131934/)
贊助商連結
OpenWrt / Serial port (https://forum.openwrt.org/viewtopic.php?id=13161)
雖然以前也曾經瀏覽過 "Serial to Network Proxy (ser2net) (http://ser2net.sourceforge.net)" 這個計畫, 可是一來只支援Linux, 其次沒和Router 聯想在一起, 所以並未引起小弟的注意, 但最近小弟開始把韌體從DD-WRT 轉換到OpenWrt 之後, 真可說改得正是時候, 簡直不費吹灰之力, 一切就此水到渠成, 於是當這回看到那篇文章, 立刻就聯想到就是La Fonera!
曾經有網友希望能遠端遙控Modem 重啟, 其實只要有實體IP, 那就一切好辦, 問題是Bridge Mode 的話就沒轍了, 另外有位網友希望能遙控網管型交換器, 雖然交換器直接連接Modem, 問題是交換器的IP 是虛擬IP, 所以還是無法從網際網路直接遙控, 說來說去就是得透過另一台主機來遙控, 如果有哪台電腦正開著, 那當然沒問題, 但如果只為了這個目的而讓電腦一直開著, 則似乎又有點本末倒置, 一般來說會持續開機的設備並非沒有, 除了Modem 之外, 分享器就是其中之一, 而分享器本來就是一台微電腦, 如果能擴充其他用途豈不是更好? 話說一台Serial (RS232/422/485) to Ethernet Converter 要價少則兩三仟, 多則四五仟, 支援無線則更貴, 沒辦法, 此類多半屬於工業級應用, 而且以量制價, 反正羊毛出在羊身上, 但對於升斗小民來說價格未免太離譜, 況且一般人通常用不到用於遠距離的RS422/485, 所以用分享器來改造成為Serial (RS232) to Ethernet Converter 就成為一個經濟又實惠的主意, What a brilliant idea! 其實熟悉硬體的網友都知道網通產品通常會有1-2 個Serial Console, Modem 和網管型交換器的Console 通常設計在外殼上, 而分享器和語音閘道器則藏於機殼內, 今天的主角La Fonera 也不例外, 訊號是走LvTTL RS232, 3.3V
http://www.pczone.com.tw/pictures-thumb/0/4085251cbda6b8e467ca05196a3a1cde_613.jpg?dl=1272619288 (http://www.pczone.com.tw/members/3901-albums55-picture-613.jpg)http://www.pczone.com.tw/pictures-thumb/0/eedfa80e20394009adb12566fe1386b7_610.jpg?dl=1272619288 (http://www.pczone.com.tw/members/3901-albums55-picture-610.jpg)
硬體決定之後, 下一步當然就是挑選適合的韌體, 小弟曾經大力鼓吹DD-WRT, 確實DD-WRT 是一個不需要高深知識就可以輕易上手的殺手級韌體, 甚至殺到連Buffalo 也打算和BrainSlayer 攜手合作, 在Buffalo 的HP (High Power) 系列預先安裝DD-WRT:
BUFFALO HighPower routers with DD-WRT as factory firmware | www.dd-wrt.com (http://www.dd-wrt.com/site/content/buffalo-highpower-routers-with-dd-wrt-factory-firmware)
雖然DD-WRT 功能的確夠強大, 然而對於想要自行擴充功能的DIYer 來說, DD-WRT 的自由度其實並不高, 所以結論是DD-WRT 非常適合懶人, 該有的功能都具備了, 但不適合崇尚自由的DIYer, 這時候你需要更 "開放" 的OpenWrt, 以往DD-WRT 有個非常吸引人的特色, 也就是支援的平台非常多, 所以DD-WRT 支援列表 (http://www.dd-wrt.com/wiki/index.php/Supported_Devices)就成為非常具有參考價值的選購指南, 但是如今OpenWrt 也不遑多讓, 從Backfire 起, OpenWrt 也逐漸擴大支援範圍, 除了原有的Broadcom 平台以外, Atheros 優異的硬體規格也逐漸成為另一個主要的平台, 再加上OpenWrt 架構愈來愈趨向於Linux 標準化, 以及努力擺脫嵌入式系統的限制, 這使得只要懂一點Linux 就可以很快上手, 話說本篇前言廢話如此之多, 實在是因為安裝過程簡直超乎想像的容易, 擔心吸引不了大家的目光, 所以先把事情原委敘述一番, 廢話不多說, 就此進入正題
首先當然是把DD-WRT 換成OpenWrt, 不過在此得先做一點功課, OpenWrt 雖然彈性非常大, 但是據說設定介面很陽春, 許多功能都必須透過手動輸入指令, 所以很容易讓人以為又回到了侏儸紀的DOS 時代, 不過當OpenWrt Kamikaze 趨於穩定之後, 專為OpenWrt 所設計的網頁設定套件X-Wrt Webif² (http://x-wrt.org) 也適時趕上, 讓OpenWrt 和X-Wrt 的結合成為最佳拍檔, 而X-Wrt 更推出預先打包好的韌體, 以方便網友無痛升級, X-Wrt 整合式韌體共分為default, no_pppoe, openvpn 和extra, 小弟推薦openvpn 版, 網友也可以考慮extra 版, 韌體決定好之後, 接下來就是面對令人頭痛的刷機, 不少網友都是在這一關把La Fonera 變成了磚塊 (Bricked)! 但是現在只要 "一指神功" 就可以化繁為簡, 不再把刷機視為畏途, 所使用的秘密武器就是Fon Flash:
fon_flash [Gargoyle Wiki] (http://www.gargoyle-router.com/wiki/doku.php?id=fon_flash)
Fon Flash 除了支援OpenWrt 之外, 同時也支援DD-WRT 和FON 原廠韌體, 請安照Fon Flash 介面指示操作, 第一步先選擇Gargoyle/OpenWrt, 第二步選擇連接La Fonera 的網路卡, 第三步輸入atheros-root.squashfs 的完整路徑, 第四步輸入atheros-vmlinux.gz 的完整路徑, 最後按下Flash Router Now, 等5 秒之後再開啟Lan Fonera 的電源, 接下來請留意Fon Flash 的訊息, 如果不斷重複某個Arp 訊息, 代表Fon Flash 已經錯過了攔截RedBoot 的時機, 請重新啟動La Fonera, 可以的話, 請盡可能先正常啟動, 然後登入La Fonera 設定頁面再執行Reboot, 另一個提高成功率的方法是以交換器連接La Fonera 和PC, 目的是縮短Windows 對網卡初始化所需要的時間, 以Linux 刷機則無此問題, 刷機需時25-30 分鐘, 請務必耐心等候
http://www.pczone.com.tw/pictures-thumb/0/385ef1fc4f207fefb3c816b5ee11ace1_614.png?dl=1272687214 (http://www.pczone.com.tw/members/3901-albums55-picture-614.png)
刷機成功之後, OpenWrt 預設IP 為192.168.1.1, 請自行調整以避免和Modem 衝突, OpenWrt 初始設定請參考:
【韌體】ASUS WL-HDD2.5 改刷 OpenWrt Kamikaze with X-Wrt Webif² - PCZONE 討論區 (http://www.pczone.com.tw/thread/44/150740/)
接下來要談的重頭戲就是OpenWrt 勝過DD-WRT 的地方 - 擴充套件, 如果不談套件的話, 那麼DD-WRT 基本功能確實為OpenWrt 所不及, 但是一旦談到套件, 則OpenWrt 的自由度和擴充性則遠遠勝過DD-WRT, 固然DD-WRT 也可以將套件安裝於JFF2, 但由於套件的設計都是基於OpenWrt 的架構, 因此在DD-WRT 之下裝完套件之後, 還必須針對DD-WRT 的架構進行許多繁瑣的調整, 這必須具備DD-WRT 的相關知識才能完成, 但是對於OpenWrt 來說, 套件安裝完畢, 通常只需根據不同的硬體, 調整1-2 個設定檔就完工了, 真是事半功倍, 不過話說回來, 不論是DD-WRT 或者OpenWrt, 瞭解硬體是有必要的, 因為套件的預設值通常是針對某個硬體 (Broadcom?) 而設計, 若硬體不同, 則設定可能也不同, 在DD-WRT 之下安裝OpenWrt 套件會遇上哪些困難, 請參考:
【軟體】DD-WRT v24 安裝 PPPoE Relay 套件 - PCZONE 討論區 (http://www.pczone.com.tw/thread/29/150690/)
以下示範如何安裝兩個OpenWrt 套件和一個執行檔, 操作之前請確定La Fonera 已經連上網際網路, 請登入X-Wrt Webif², 然後點選System -> Packages, 先點一下Update package lists, 作用是從網路下載最新的套件列表, 接著在Available packages 之下就可以找到setserial 和ser2net 這兩個套件, 請點選套件左方的Install, 接著就會自動安裝, 過程超乎想像得輕鬆愉快! 安裝另一個執行檔stty 則稍微複雜一點, stty 包含在coreutils 套件之中, 只有40KB, 而coreutils 套件約1.3MB, 為了40KB 而安裝1.3MB 似乎有點說不過去, 而且Flash 的可用空間有限, 變通之道就是先下載coreutils 套件至PC, 再以7-Zip 取出stty, 然後設法傳送至La Fonera, 小弟採用的方法是在Windows 安裝Tftpd32 或HTTP File Server, 然後登入OpenWrt, 再以tftp 或wget 下載至/usr/bin, 並執行:
chmod +x /usr/bin/stty
首先必須把Serial Console 的控制權釋放出來, OpenWrt 啟動之後, Busybox 會佔用Serial Console, 所以也可以從Serial Console 登入, 以下可看出Broadcom-based 分享器預設Console Port 為/dev/tts/0, 而Atheros-based 則為/dev/ttyS0, 修改/etc/inittab
::sysinit:/etc/init.d/rcS S boot
::shutdown:/etc/init.d/rcS K stop
#tts/0::askfirst:/bin/ash --login
#ttyS0::askfirst:/bin/ash --login
#tty1::askfirst:/bin/ash --login
其次針對硬體和應用程式調整上述安裝好的兩個套件, /etc/ser2net.conf
# <TCP port>:<state>:<timeout>:<device>:<options>
2001:raw:600:/dev/ttyS0:9600 NONE 1STOPBIT 8DATABITS -XONXOFF LOCAL -RTSCTS remctl
2002:raw:600:/dev/ttyS0:38400 NONE 1STOPBIT 8DATABITS -XONXOFF LOCAL -RTSCTS
2003:raw:600:/dev/ttyS0:57600 NONE 1STOPBIT 8DATABITS -XONXOFF LOCAL -RTSCTS
2004:raw:600:/dev/ttyS0:115200 NONE 1STOPBIT 8DATABITS -XONXOFF LOCAL -RTSCTS
/etc/init.d/setserial
#!/bin/sh /etc/rc.common
# Copyright (C) 2006 OpenWrt.org
START=15
boot() {
/usr/sbin/setserial /dev/ttyS0 irq 37
/usr/bin/stty -F /dev/ttyS0 speed 9600 raw -echo
/usr/sbin/ser2net -u
}
修改完畢請執行:
/etc/init.d/setserial enable
/etc/init.d/setserial start
/dev/ttyS0 所使用的IRQ 可由dmesg 找到, 由於OpenWrt 可能會發送系統訊息至Serial Console, 所以還必須進行必要的調整, /etc/config/system
config 'system' 'system'
option 'hostname' 'OpenWrt'
option 'timezone' 'UTC-8'
option 'conloglevel' '3'
option 'kconloglevel' '3'
看到這裡, DD-WRT 的玩家可能會很羨慕, 因為在DD-WRT 之下, 要想控制Serial Console 並不是一件容易之事, 就算有辦法控制, 還得避免系統訊息干擾通訊, 解決之道只有設法修改Kernel command line, 但重新編譯又未免小題大作, 不過如果分享器的Boot Loader 為RedBoot 的話, 例如La Fonera, 那麼倒是有一個變通之道, 也就是修改RedBoot 的boot_script_data, 在 "fis load" 之後加入幾行mfill 指令, 例如:
RedBoot> fis load -d vmlinux.bin.l7
Image loaded from 0x80041000-0x80279086
RedBoot> d -b 0x8024E5B0 -l 64
8024E5B0: 63 6F 6E 73 6F 6C 65 3D 74 74 79 53 30 2C 39 36 |console=ttyS0,96|
8024E5C0: 30 30 20 72 6F 6F 74 66 73 74 79 70 65 3D 73 71 |00 rootfstype=sq|
8024E5D0: 75 61 73 68 66 73 2C 6A 66 66 73 32 20 69 6E 69 |uashfs,jffs2 ini|
8024E5E0: 74 3D 2F 65 74 63 2F 70 72 65 69 6E 69 74 00 00 |t=/etc/preinit..|
RedBoot> mfill -b 0x8024E5B8 -l 5 -p 0x2f -1
RedBoot> mfill -b 0x8024E5B9 -l 1 -p 0x64 -1
RedBoot> mfill -b 0x8024E5BA -l 1 -p 0x65 -1
RedBoot> mfill -b 0x8024E5BB -l 1 -p 0x76 -1
RedBoot> mfill -b 0x8024E5BD -l 1 -p 0x6E -1
RedBoot> mfill -b 0x8024E5BE -l 1 -p 0x75 -1
RedBoot> mfill -b 0x8024E5BF -l 2 -p 0x6C -1
RedBoot> mfill -b 0x8024E5C1 -l 1 -p 0x20 -1
RedBoot> d -b 0x8024E5B0 -l 64
8024E5B0: 63 6F 6E 73 6F 6C 65 3D 2F 64 65 76 2F 6E 75 6C |console=/dev/nul|
8024E5C0: 6C 20 20 72 6F 6F 74 66 73 74 79 70 65 3D 73 71 |l rootfstype=sq|
8024E5D0: 75 61 73 68 66 73 2C 6A 66 66 73 32 20 69 6E 69 |uashfs,jffs2 ini|
8024E5E0: 74 3D 2F 65 74 63 2F 70 72 65 69 6E 69 74 00 00 |t=/etc/preinit..|
RedBoot> exec
把原先看起來像是:
console=ttyS0,9600 rootfstype=squashfs,jffs2 init=/etc/preinit
修改成:
console=/dev/null rootfstype=squashfs,jffs2 init=/etc/preinit
如此一來就可以省去重新編譯韌體的麻煩, 只要控制RedBoot 就可以控制OpenWrt 系統訊息, 由於OpenWrt 有提供單獨的vmlinux 韌體, 所以要從記憶體之中找到以上指令的位置並不困難, 但DD-WRT v24 SP1 以後把vmlinux & rootfs 包在一起又加上標頭, 所以就困難多了, 有Linux 作業系統的網友則還有另一個辦法, 也就是利用Firmware Modification Kit (http://www.bitsum.com/firmware_mod_kit.htm) 把vmlinux 解開來, 修改後再打包回去, 但Windows 用戶就只能乾瞪眼了
以上全數安裝完畢, 總得設法測試一下, 如果沒有傳輸線的話, 也可以直接利用現有的Modem, 但是請先弄清楚腳位定義, 在此只需要連接三條線, GND 直接對接, Tx/Rx 則需交錯, 小弟實驗過程是以傳輸線測試, 測試軟體為Hercules SETUP utility (http://www.hw-group.com/products/hercules/index_en.html), 或者其他支援RFC2217 的通訊軟體也可以, 測試環境如下:
PC-COMx <-RS232-> /dev/ttyS0-Fonera-eth0.0 <-Ethernet-> PC-NIC
開啟Hercules SETUP utility, 點擊Serial, 依序設定COM3, 9600, 8, none, OFF, Free, 最後點擊Open, 再開啟另一個Hercules SETUP utility, 點擊TCP Client, Module IP:192.168.1.1, Port:2001, 最後點擊Connect, 請在兩個Hercules SETUP 視窗分別輸入英數字, 下一項測試請重複以上, 但將Baud Rate 改成115200, Port:2004, 由以上測試可得知ser2net 的彈性設計, ser2net 所支援的Baud Rate 上限為115200bps, 這也是一般Linux Router Console 所設定的速率
改造La Fonera 至此還有一個關鍵未完成, 除了OpenWrt 會發送系統訊息之外, RedBoot 啟動時也會發送訊息至Serial Console, 而網友遇上刷機失敗時, 通常也會改由Serial Console 刷機, 所以RedBoot 訊息是難以避免的, 此外, 第一代La Fonera (FON2100) 還有個大問題就是開機時Rx 必須維持0V, 否則無法啟動, 固然可以先啟動La Fonera, 後啟動被控制的設備, 但只要有限制就代表可能會造成不便, 解決之道就是利用La Fonera 的GPIO (3.3V), 以簡單的電晶體開關電路控制啟動時Tx/Rx 皆為低電壓, 一來解決FON2100 的開機問題, 二來也可以彈性控制RedBoot 發送的訊息, 不過小弟認為其實最適合用來改造的應該是La Fonera 1.1 (FON2200), 除了不再有Rx 必須為Low 的問題之外, 還解決了第一代La Fonera 惱人的發熱問題, 體積小, 價格又便宜, 另一個體積也很小的產品則是ASUS WL-330gE (http://oldwiki.openwrt.org/OpenWrtDocs(2f)Hardware(2f)Asus(2f)WL330GE.html), 但是價格就很離譜了
結論:
或許網友並不認同以上過程可以稱得上 "輕鬆愉快", 但是看得懂其中關鍵的網友則心知肚明, 若改以DD-WRT 實做的話更是困難重重, 其實小弟對於Linux 也只有一知半解, 但是單憑僅有的三腳貓功夫就可以完成以上任務, 相信只要網友對於Linux 有興趣, 則必定可以從其中得到更多的樂趣
Kamikaze Installation - X-Wrt (http://wiki.x-wrt.org/index.php/Kamikaze_Installation)
install_guide [Gargoyle Wiki] (http://www.gargoyle-router.com/wiki/doku.php?id=install_guide)
OpenWrtDocs/OpenWrtDocs/KamikazeBootHowTo - OpenWrt Wiki (http://oldwiki.openwrt.org/OpenWrtDocs(2f)OpenWrtDocs(2f)KamikazeBootHowTo.html)
System configuration - OpenWrt Wiki (http://wiki.openwrt.org/doc/uci/system)
Fonera - OpenWrt Wiki (http://wiki.openwrt.org/toh/fon/fonera)
LaFonera Hardware IO (en) - DD-WRT Wiki (http://www.dd-wrt.com/wiki/index.php/LaFonera_Hardware_IO_%28en%29)
Category:LaFonera (en) - DD-WRT Wiki (http://www.dd-wrt.com/wiki/index.php/Category:LaFonera_%28en%29)
OpenWrt / Fonera 2100 serial console need urgent help (https://forum.openwrt.org/viewtopic.php?id=24078)
【FON】To Brick, or not to Brick: that is the question - PCZONE 討論區 (http://www.pczone.com.tw/thread/16/140386/)
【下載】Free Serial Port Monitor - PCZONE 討論區 (http://www.pczone.com.tw/thread/67/131934/)
贊助商連結