【韌體】ASUS WL-HDD2.5 改刷 OpenWrt Kamikaze with X-Wrt Webif²
原先參考thx 版主發表的 "[URL="http://www.pczone.com.tw/thread/16/139626/"]compile ASUS 3.5G WL-HDD's firmware 筆記(失敗) - PCZONE 討論區[/URL]" 文章之後, 小弟於是偷懶把WL-HDD 改刷Koppel 版Oleg 韌體, 就這樣WL-HDD 變成一台支援GPRS/3G/HSDPA/UMTS USB Modem 的無線分享器, 雖然小弟並無3G 網卡, 但是這麼做只有一個字, 爽! 不過當小弟想要深入研究時, 這才發現Oleg 實在是綁手綁腳, 尤其是對於WL-HDD 而言, 所以經過一番嘗試, 小弟終於把Oleg 換成OpenWrt Kamikaze, 然而原先對於OpenWrt 的 "深度" 恐懼並未消除, 小弟向來認為OpenWrt 是給Linux 高手玩的, 必須記憶許多艱深的Linux 指令才能控制OpenWrt 這頭怪獸, 所以小弟一直停留於只研究DD-WRT 支援的分享器, 但問題是DD-WRT 並不支援WL-HDD, Oleg 又太忠於ASUS 原廠韌體, 所以只好硬著頭皮給它刷OpenWrt, 當然小弟事先做過功課, 所以知道有X-Wrt 的存在, 只不過在OpenWrt Kamikaze 功能穩定之前, 其實X-Wrt 也發展得很慢, 直到現在仍存在一些明顯的小瑕疵, 但功能和穩定性都已經達到一定的水準, 所以小弟鄭重推薦給想要學習改機, 順便學習Linux 的網友, 以下就是小弟改機的過程
X-Wrt 是一個專為OpenWrt 所設計的套件, 所以可以於安裝OpenWrt 之後再安裝X-Wrt, 不過 "聽說" OpenWrt's GUI 很陽春, 一堆功能都得靠手動完成, 所以小弟乾脆直接安裝包含X-Wrt 套件的OpenWrt Kamikaze 韌體, 這樣可以省下不少麻煩, X-Wrt 除了提供Webif² 套件之外, 還提供了預先打包好的版本, 區分成default, no_pppoe, openvpn 和extra, 小弟安裝的是openvpn 版, 網友也可以考慮extra 版, 其次得決定安裝Kamikaze 的哪個版本, 對於Broadcom CPU 來說有兩種選擇, brcm-2.4 和brcm47xx, 除了於前者採用Kernel 2.4, 後者採用Kernel 2.6 之外, 另一個很重要的差異就是Broadcom 無線驅動程式, 一般來說, 對於舊晶片Broadcom 只提供Kernel 2.4 無線驅動程式, 所以當小弟安裝brcm47xx 於WL-HDD 時, 也就發生找不到無線裝置的情形, 只好乖乖回頭安裝brcm-2.4
ASUS 分享器通常只需進入救援模式, 即可以tftp 上傳韌體, 但WL-300g, WL-500g & WL-HDD 例外, 最簡單的方式就是改用ASUS Firmware Restoration 公用程式, 請安裝ASUS WL-HDD Support CD 或上[URL="http://support.asus.com.tw/download/download.aspx?SLanguage=zh-tw"]ASUS 網站[/URL]下載, 執行Firmware Restoration 公用程式有一點必須特別注意, 小弟也因此差一點上來求助, 如果電腦主機有兩片以上網卡, 務必只啟用或連接接到ASUS 分享器的這一片網卡, 請將其他網路線拔除或停用網路卡, 否則Firmware Restoration 公用程式可能會找不到ASUS 分享器
升級之後, 請以PuTTY ssh 登入WL-HDD (192.168.1.1, 請避免和Modem's IP 衝突), 然後執行 "nvram set wan_proto=none; nvram commit", 雖然Kamikaze 已經不再利用NVRAM, 但是既然OpenWrt Wiki 有提到, 就請照辦, 接下來進行X-Wrt Webif² 設定, 需要修改的部份如下:
[INDENT]System -> System Settings -> 時區
Network -> Networks -> IP & DNS
Network -> DHCP
Network -> Wireless
Network -> Tweaks -> Maximum Connections[/INDENT]
前面提到X-Wrt Webif² 還有一些小瑕疵, 接下來進行手動修正, 回到System -> File Editor, 開啟以下檔案:
[INDENT]File: /etc/config/network -> option 'dns' #是否正確?
File: /etc/config/wireless -> option 'country' 'US'
File: /etc/config/wireless -> option 'channel' '11' #必須介於1-11, 不得為0
File: /etc/config/wireless -> option 'txpower' '14' #發射功率介於1-24 之間, 單位是dBm[/INDENT]
每個頁面改完以後, 都必續按下Save Changes, 可隨時點選Review Changes 檢查修改了哪些部份, 等全部修改完畢, 再統一按一次Apply Changes, 此時才會真正儲存於檔案系統中, 再點擊System -> Reboot, 讓修改生效, 若以X-Wrt Webif² 修改Wireless 設定, 則必須重複以上步驟
[URL="http://digiland.tw/viewtopic.php?id=930"]數位天堂 / [X-Wrt] 華碩WL-HDD 安裝X-Wrt (OpenWrt Kamikaze 8.09, r15789)[/URL]
[URL="http://wiki.x-wrt.org/index.php/Kamikaze_Installation"]Kamikaze Installation - X-Wrt[/URL]
[URL="http://wiki.x-wrt.org/index.php/User_Manual"]User Manual - X-Wrt[/URL]
[URL="http://oldwiki.openwrt.org/OpenWrtDocs(2f)Hardware(2f)Asus(2f)WL(2d)HDD.html"]OpenWrtDocs/Hardware/Asus/WL-HDD[/URL]
[URL="http://oldwiki.openwrt.org/OpenWrtDocs(2f)Hardware(2f)Asus(2f)Flashing.html"]OpenWrtDocs/Hardware/Asus/Flashing[/URL]
[URL="http://oldwiki.openwrt.org/OpenWrtDocs(2f)KamikazeHowto.html"]OpenWrtDocs/KamikazeHowto[/URL]
[URL="http://oldwiki.openwrt.org/OpenWrtDocs(2f)KamikazeConfiguration.html"]OpenWrtDocs/KamikazeConfiguration[/URL]
WifiToggle - 以Reset 按鈕當作無線開關
接下來才是小弟最關心的主題, 換掉Oleg 的原因是在Oleg 韌體之下, 除非重新編譯韌體, 否則Reset 按鈕無法挪為他用, 換成OpenWrt Kamikaze 之後, 幾乎系統的每個部份都可以修改, 都可以儲存, 不用再刻意 "flashfs save && flashfs commit && flashfs enable", 以下腳本以Reset 按鈕當作無線開關, 乃參考 "[URL="http://oldwiki.openwrt.org/OpenWrtDocs(2f)Customizing(2f)Software(2f)WifiToggle.html#head-be35551a29649f010dd5356b7e090d776045693d"]OpenWrtDocs/Customizing/Software/WifiToggle[/URL]" 改寫而成, 最大的差別在於不修改 "wireless.wl0.disabled", 當按下Reset 按鈕則可以開關無線訊號, 若無線開啟, 則PWR & WLAN LEDs 恆亮, 若無線關閉, 則WLAN LED 滅, PWR LED 閃爍, 若分享器有SES 或AOSS 按鈕, 那麼也可以把 "reset" 換成 "ses" 或 "aoss", 以下腳本僅適用於採用Broadcom CPU 且安裝OpenWrt Kamikaze 的分享器, Atheros 分享器則只能採用原來的指令 (uci & wifi), 且LED 控制似乎得透過GPIO
[B]/sbin/woggle[/B]
[CODE]#!/bin/sh
if [ "`wlc radio`" = 0 ]; then
wlc radio 1 && \
echo 1 > /proc/diag/led/power
else
wlc radio 0 && \
echo f > /proc/diag/led/power
fi[/CODE]
[B]/etc/hotplug.d/button/01-radio-toggle[/B]
[CODE]#!/bin/sh
if [ "$BUTTON" = reset ] && [ "$ACTION" = pressed ] && [ "$SEEN" -gt 2 ]; then
/sbin/woggle &
fi[/CODE]
輸入完畢請執行:
[CODE]chmod +x /sbin/woggle
chmod +x /etc/hotplug.d/button/01-radio-toggle[/CODE]
每一台分享器的LEDs 可能不同, 請執行 "ls /proc/diag/led" 以便找出哪些LEDs 可被控制, 數值可輸入 "0/1/f", 分別對應 "滅/亮/閃", 與按鈕相關的系統變數為:
[CODE]$BUTTON = [reset|ses|aoss]
$ACTION = [pressed|released]
$SEEN = [time since last event] 單位為秒, 小數以下不計[/CODE]
Enable Broadcom WiFi
[CODE]uci set wireless.wl0.disabled=0 && wifi[/CODE]
Enable Atheros WiFi
[CODE]uci set wireless.wifi0.disabled=0 && wifi[/CODE]
由於小弟尚未找到對應於 "wl assoclist" 的指令, 所以還無法做到無線閒置則自動關閉訊號
[URL="https://forum.openwrt.org/viewtopic.php?id=11903"]OpenWrt / [Howto] WiFi toggle[/URL]
[URL="http://wiki.georgweiss.de/Hardware/ASUS-WL500pg#wifi-on.2Foff-toggle_with_EZ-SETUP-button"]1.5 wifi-on/off-toggle with EZ-SETUP-button - wiki.georgweiss.de[/URL] (/etc/hotplug.d/button/01-wifitoggle & /etc/config/wifitoggle)
[URL="http://pastebin.ca/raw/687653"]原始wifitoggle 副本, 無LED 控制指令[/URL]
[URL="https://forum.openwrt.org/viewtopic.php?id=10416"]OpenWrt / wl-hdd reset button[/URL]
[URL="https://dev.openwrt.org/attachment/ticket/2855/atheros-toggle.patch"]OpenWrt - Ticket #2855: atheros-toggle.patch[/URL]
[URL="http://www.pczone.com.tw/thread/29/150684/"]【腳本】WifiToggle for DD-WRT - 以Reset 按鈕當作無線開關, 無線閒置則自動關閉訊號 - PCZONE 討論區[/URL]
WifiToggle² - 以Reset 按鈕當作無線開關
其實前一篇只以 "wlc radio 1/0" (相當於 "wl radio on/off") 管理無線開關的做法可能並不完全, 只不過原先擔心的是如果修改了 "wireless.wl0.disabled", 然後其他程式又執行 "uci commit wireless", 那麼下次啟動可能就不會啟用無線 (WLAN LED 滅), 容易被誤以為無線有問題, 但這回小弟加了一項啟動指令, 以PWR LED 代表無線狀態, 閃爍代表無線關閉以及無線開關作用中, 那就前後一致了
[B]/sbin/woggle[/B]
[CODE]#!/bin/sh
if [ "`uci get wireless.@wifi-device[0].disabled`" = 1 ]; then
uci set wireless.@wifi-device[0].disabled=0 && wifi && \
echo 1 > /proc/diag/led/power
else
uci set wireless.@wifi-device[0].disabled=1 && wifi && \
echo f > /proc/diag/led/power
fi[/CODE]
[B]/etc/hotplug.d/button/01-radio-toggle[/B]
[CODE]#!/bin/sh
if [ "$BUTTON" = reset ] && [ "$ACTION" = pressed ] && [ "$SEEN" -gt 2 ]; then
/sbin/woggle &
fi[/CODE]
[B]/etc/init.d/custom-user-startup[/B]
[CODE]#!/bin/sh /etc/rc.common
START=98
start() {
if [ "`/sbin/uci get wireless.@wifi-device[0].disabled`" = 1 ]; then
( /sbin/wifi down && echo f > /proc/diag/led/power ) &
fi
}[/CODE]
輸入完畢請執行:
[CODE]chmod +x /sbin/woggle
chmod +x /etc/hotplug.d/button/01-radio-toggle
chmod +x /etc/init.d/custom-user-startup[/CODE]
由於 /etc/rc.d/S95done 會設定PWR LED 正常狀態, 所以/etc/init.d/custom-user-startup "START" 數值必須大於95, 編輯完畢請執行:
[CODE]/etc/init.d/custom-user-startup enable
/etc/init.d/custom-user-startup start[/CODE]
以上指令會產生 /etc/rc.d/S98custom-user-startup
本篇和前一篇主要不同之處就是盡量遵循Kamikaze 所使用的組態和指令, 以便相容於不同平台和不同設定, 但是小弟並不確定Atheros 平台的LED 控制方式是否透過GPIO, 請參考 /etc/diag.sh 或 /etc/init.d/done
[URL="http://wiki.openwrt.org/doc/howto/wifitoggle"]Wifi Toggle Script - OpenWrt Wiki[/URL] (新版WifiToggle)
[URL="http://wiki.openwrt.org/doc/uci/wireless"]Wireless configuration - OpenWrt Wiki[/URL]
X-Wrt, Gargoyle & LuCI for OpenWrt
其實早先搜尋OpenWrt 相關文章之時, 偶爾會看見網友推崇一個套件, [URL="http://www.gargoyle-router.com"]Gargoyle[/URL], 其實和X-Wrt 一樣, Gargoyle 也是一個基於OpenWrt 的Front-end/webif, 同樣的道理, Gargoyle 也針對本身想完成的目標打包了一些套件, 而這些套件多半和QoS 有關, 例如:
[INDENT][TABLE]Bandwidth (1):|QoS Pie Chart:|Qos (1):|Qos (2):
[URL="http://www.gargoyle-router.com/wiki/lib/exe/fetch.php?cache=&media=screenshots:02_bandwidth.jpg"][IMG]http://www.gargoyle-router.com/wiki/lib/exe/fetch.php?w=150&h=137&media=screenshots:02_bandwidth.jpg[/IMG][/URL]|[URL="http://www.gargoyle-router.com/wiki/lib/exe/fetch.php?cache=&media=screenshots:05_qosdist.jpg"][IMG]http://www.gargoyle-router.com/wiki/lib/exe/fetch.php?w=139&h=150&media=screenshots:05_qosdist.jpg[/IMG][/URL]|[URL="http://www.gargoyle-router.com/wiki/lib/exe/fetch.php?cache=&media=screenshots:15_qos_1.jpg"][IMG]http://www.gargoyle-router.com/wiki/lib/exe/fetch.php?w=150&h=136&media=screenshots:15_qos_1.jpg[/IMG][/URL]|[URL="http://www.gargoyle-router.com/wiki/lib/exe/fetch.php?cache=&media=screenshots:16_qos_2.jpg"][IMG]http://www.gargoyle-router.com/wiki/lib/exe/fetch.php?w=150&h=141&media=screenshots:16_qos_2.jpg[/IMG][/URL][/TABLE][/INDENT]
看了以上圖表, 是否讓網友想起Tomato Firmware? 沒錯! 這也是讓小弟產生興趣最主要的原因, 同時這也讓小弟想起另一個X-Wrt 打包好的[B]extra[/B] 版, 其中包含以下套件: qos-scripts, ntpclient, bandwidthd, miniupnpd (UPnP), updatedd (DDNS)
[INDENT][TABLE]Status / Bandwidth|Network / QoS
[URL="http://wiki.x-wrt.org/images/6/69/Kp_status-bandwidth.png"][IMG]http://wiki.x-wrt.org/images/thumb/6/69/Kp_status-bandwidth.png/34px-Kp_status-bandwidth.png[/IMG][/URL]|[URL="http://wiki.x-wrt.org/images/3/30/Kp_network-qos.png"][IMG]http://wiki.x-wrt.org/images/thumb/3/30/Kp_network-qos.png/120px-Kp_network-qos.png[/IMG][/URL][/TABLE][/INDENT]
從以上可以看出QoS 套件已經具備優先權和頻寬管理, 這不就是Tomato Firmware 所被稱羨的功能嗎? 然而這些在Kamekaze 之下已經一一被實現, 而且並不侷限於Broadcom-based 硬體, Atheros-based 硬體同樣也能享受到相同的功能
如果仔細看過OpenWrt 套件列表, 或許還會注意到以 "LuCI" 開頭的套件, LuCI 也是一個OpenWrt Front-end/webif, 同時, LuCI 開發者和[URL="http://code.google.com/p/wl500g/"]Oleg Firmware 後續維護者[/URL]可能是同一個高手
至此小弟深刻體驗到一件事情, 對於一般玩家來說, DD-WRT 的便利性以及多樣化, 讓隨便一位玩家都能輕易上手, 而且不必花費許多時間就可以完成所想要的功能, 因此非常適合於沒有時間, 卻又不能滿足於原廠韌體的玩家, 然而除了DD-WRT 所提供的功能以外, 玩家若想自行拓展功能, 則可能會受到某種程度的限制, 反觀OpenWrt 雖然沒有華麗且豐富的介面, 然而OpenWrt 卻是一個真正開放的平台, 可以讓玩家完全自主, 全盤操控所有的功能, 而且OpenWrt 愈來愈趨向於Linux 標準, 這代表著OpenWrt 不再只是一個特殊的嵌入式系統, 所以將會更容易學習, 在此基礎下, OpenWrt 也愈來愈趨於穩定, 操作介面也即將趕上DD-WRT, 但擴充性卻可能讓DD-WRT 望塵莫及, 所以小弟強烈建議玩家們要善選您的第一個分享器, 雖然目前Ralink-based 低階產品非常便宜, 種類繁多, 規格漂亮, 又可能有DD-WRT 的加持, 然而若有心學習Linux, 且對於頻寬管理有興趣的話, 那麼目前最佳選擇應該是Atheros-based 支援Draft N 的硬體, 其次才是Broadcom-based 的硬體, 而韌體則應該選擇基於Linux 2.6 的版本, 才有機會全盤掌控頻寬管理
[URL="http://oldwiki.openwrt.org/TableOfHardware.html"]TableOfHardware - OpenWrt[/URL]
[URL="http://wiki.x-wrt.org/index.php/Kamikaze_Presentation"]Kamikaze Presentation - X-Wrt[/URL]
[URL="http://www.gargoyle-router.com/wiki/doku.php?id=screenshots"]screenshots [Gargoyle Wiki][/URL]
[URL="http://www.gargoyle-router.com/wiki/doku.php"]Documentation Index [Gargoyle Wiki][/URL]