話說知名製作人阿怪 (aguai)兄前陣子拿了一台 ASUS WL-700gE,說是閒置著所以打算刷成其他版本的軔體,借給我一段時間研究。謝阿怪恩准玩弄他的寶貝。

事先調查在 OpenWrt Wiki 及阿怪的機器上調查了硬體規格,WL-700gE 的 SoC 速度是 BCM3302 v0.6 at 266 MHz, 2M flash 以及 64MB DDR-SDRAM。除了內建 IDE controller 與硬碟外,還有三個 USB 2.0 接頭 (VIA Vectro VT6212)。若想玩硬體修改,板子尚留有一個 Mini PCI 腳位,只要再想辦法焊接接頭即可。不愧是當動物園養寵物的好物。

剛拿到的時候,自然先從它的官方軔體研究起。阿怪機器的出廠值是 1.0.4.6,內建的 udhcpc 0.9.8 有點老舊,以至於與某些 DHCP Server 有些相容的問題。(像是我家的小 ISP,就一直無法取得 IP。)

於是就換到 ASUS 官方下載頁面的最新版軔體,1.0.7.8。udhcpc 還是基於 0.9.8,不過原始碼中倒是加了 patch (by Arthur, Chan-I, Joey, JYWeng ?) 來修正相容的問題,於是總算可以連上網路沒問題。

ASUS 的官方軔體中,我比較感興趣的是它所提供的網路攝影機與 P2P 下載功能,以及較少人使用的 DAAPDLNA Digital Media Server 功能。

網路攝影機的部份,ASUS 只載入了兩個驅動程式,分別是 ov51x v1.65-1.10-mark 與 pwc 8.11,若要測試相機功能,必須找到相容的硬體才行。我的 Webcam 是 UVC 介面,無法在 WL-700gE 上使用。

至於 P2P,WL-700gE 內建了 ctorrent (ctorrent-1.3.4.700gE.3.3, ctorrnet 已停止維護,新版可於 dholmes 的網站下載)。據我所知,ctorrent 1.3.4 尚未支援 Super-seeding, DHT, Peer exchangeEncryption特色,這些缺乏的功能將會嚴重影響上、下傳效能。

ASUS 倒是為 ctorrent 補強些功能,最明顯的是加了檔名的多國語言處理 (雖然只是用 /shares/bin/iconv 來轉),因此就算下載內含不同編碼方式的檔案,儲存後也不會變成亂碼,WL-700gE 仍然可以正確儲存讓使用者存取使用。

不過 ASUS 並未釋出修改過後的 ctorrent 原始碼,而只提供了二進位檔案。由於 ctorrnet 是 GPLv2 授權,說起來是 ASUS 違反了 GPL 授權。除了可以下載 BitTorrent 外,ASUS 還擺了 giFT 0.11.8.1,giFT 是支援數種不同的 Peer to Peer 檔案分享協定的軟體,包含了 FastTrack, OpenFTGnutella 等數種不同的協定。giFT 這麼好用的東西也是採用 GPLv2 授權,ASUS 當然也沒有提供原始碼。

DAAP 的功能,則是用以將硬碟中的音樂檔案分享給 iTunes,在 WL-700gE 是採用 mt-daapd 0.2.4 (現稱為 Firefly Media Server), ASUS 並未釋出相容是 GPLv2 授權的原始碼。至於 Digital Media Server 則是採用 Intel® Digital Home Device Code Wizard (原 Intel® Authoring Tools for UPnP Technologies) 的 SDK,採 Intel 私有授權。

雖說上述幾個 GPL 授權軟體,ASUS 並未釋出原始碼。但是 ASUS 其實已經在網頁上提供了 GPL 相關授權的壓縮檔,可以讓使用者自行下載。相較於行為更某些糟糕的廠商,ASUS 已經相當有誠意的放出了大部分的程式碼,包含用以編譯系統的原始碼(Build system and Makefile),甚至連私有軟體都放出函式庫或執行檔,包含了網頁管理介面所使用的函式庫。因此使用者有機會可以自行重新編譯與官方相同的軔體。就誠意來講,應該大大鼓勵。

之所以說有機會可以自行編譯,是因為 ASUS 送出的檔案似乎曾經受過某些工程師的無意修改,因此不少 Makefile 都必須再稍加調整後才能正確編譯。我稍微修改了一版 1.0.7.8 可完全編譯的版本。尚需找個地方擺原始碼才行。

不過非常可惜的是,ASUS 刻意保留了部份加強過的 GPL 軟體原始碼,雖說應該是商業上的考量,但是還是違反了授權。不管你是自有品牌、或 OEM/ODM 硬體廠,若使用 GPL 授權之相關軟體, 建議出貨前應該參考GPL 軟體授權適法訣竅檢查一遍為妥。

另外一個值得一提的是,這兩版軔體預設都開啟了 utelnetd,於是你可以直接連入一探究竟。若你對官方軔體的內容感興趣,相關軔體版本都可於官方下載。此外,這是 1.0.4.6 的 (disk) 軔體檔案列表,1.0.7.8 的列表於

另外,網路上也有人提到 ASUS 無意中於 www.asus.ru 釋出的 2.0.0.7 版本。功能似乎類似,但是網頁管理介面倒是用 Java Script 加強了不少,外觀看起來先進多了啊。

(本文是事後才整理,由於記憶不佳及缺乏測試,某些資訊可能有誤)

Have you experienced that the useful ScribeFire (a nice WYSIWYG blog tool for firefox extenstion) crashed, and you lost the latest post which you just wrote for a few hours ?

If the answer is yes, and you are using ScribeFire 2.3.2 and restart the Firefox and visit this blog for searching how to recover your hard work.

I am sorry to tell you, it’s too late, your work is overwritten.

If you did not restart the browser and lunch the ScribeFire, then you got luck. Backup the performancing-notes.xml file in your firefox/profile/extensions as soon as possible, it’s your latest chance to save it.

The problem is because the ScribeFire editor does not save the editor state by autosave, when the firefox crashed. And it will use the old content in editor state to overwrote your latest ‘saved work‘.

This is a small but very annoying issue, which break your hard work. Hope it will be fixed very soon. You can find a workaround patch in Issue 714 of ScribeFire’s issue list system.

上週末的 COSCUP 2008,由於第一天現場網路斷線,臨時跟幾位長輩借用了 3G SIM Card/Modem/AP 來擋一下。感謝 Custom Wu, ik, in2, Kinght Feng, Lloyd Hung (sort by letters) 的大德大力相挺。

為了能夠讓 3G 轉成無線網路 (802.11b/g) 訊號,連忙將有 USB Ports 的 ASUS WL-HDD2.5 與 FON2202 改裝含撥接工具新的 OpenWrt 版本。特意將先前未安裝的 kmod-usb-serial、kmod-ppp、comgt 等套件再補裝進新編譯的軔體。

華為 (Huawei) 的 E220 先前曾經試用過,這張卡的行為頗為詭異,它會提供 Virtual CD 與 USB serial 介面,Virtual CD 裡面擺的是驅動程式、手冊、設定檔 (for Windows) 等。

麻煩的是,大約是 Hotplug 或某種 race condition 的問題,有時 Linux 不會偵測到 serial interface,有時可抓到介面,可是在卸載 Virtual CD 前是無法使用的,很多時候就算卸載或不載入 Virtual CD 也無法使用! 所幸 bobovsky 做了一個初始化程式,執行後可以確保 USB Modem 被正確啟用。(顯然是用 USB sniffer 之類的工具做出來的)

因此我唯一需要做的是將程式編譯成 MIPS (LSB) 給 WL-HDD2.5, MIPS (MSB) 給 FON2202,丟到機器上並稍加設定。

必須先為系統添加一組 hotplug script /etc/hotplug.d/usb/20-usg-3g,目的在於判斷 E220 被插入時,自動執行初始化指令,讓 Modem 變成可撥接的狀態。

#!/bin/sh

# Copyright (C) 2006 OpenWrt.org

case "$ACTION" in
	remove)
		[ ${PRODUCT} == "12d1/1003/0" ] && {
			ifdown wan
			echo 1 > /proc/diagled/usb		    		    	    	    	    	    		    		   
		}
		;;
	add)
		[ ${PRODUCT} == "12d1/1003/0" ] && {
			/bin/huaweiAktBbo
			echo 0 > /proc/diag/led/usb
		}
		;;
esac

另外,由於 usbserial 還不認得 E220,因此必須將 vendor/product id 先餵給它,如此插入設備時就可以自動產生 device file 等。作法是更改 /etc/modules.d/60-usb-serial

usbserial vendor=0x12d1 product=0x1003 maxSize=4096

上述是將硬體驅動的方法,此外就是要加入撥接工具。這件事情 comgt 可以代勞,OpenWrt 已經整合好相關的 Script,只要利用 UCI (Unified Configuration Interface) 對 /etc/config/network 進行更改如下即可

#### 3G
config interface	wan
    option device       "/dev/usb/tts/0"
    option proto        "3g"
    option apn          "internet"
    option service      "hsdpa" # or cdma, evdo, umts_only, or gprs_only
    # option pincode      "0000"
    option mtu          "1492"

由於大家的 SIM Card 都關掉了 PIN Code 檢驗機制,為了避免系統對 Modem 輸出錯誤 PIN Code 而鎖死 SIM Card,我也稍加更改了 /lib/network/3g.sh,避免系統在初始化時試圖對 Modem 設定 PIN Code.

--- ../../package/comgt/files/3g.sh	2008-04-17 09:29:56.000000000 +0800
+++ lib/network/3g.sh	2000-01-01 08:23:32.000000000 +0800
@@ -73,10 +73,12 @@
 		fi
 		# Don't assume Option to be default as it breaks with Huawei Cards/Sticks
 		
-		PINCODE="$pincode" gcom -d "$device" -s /etc/gcom/setpin.gcom || {
-			echo "$cfg(3g): Failed to set the PIN code."
-			set_3g_led 0 0 0
-			return 1
+		test -z "$pincode" || {
+	  		PINCODE="$pincode" gcom -d "$device" -s /etc/gcom/setpin.gcom || {
+				echo "$cfg(3g): Failed to set the PIN code."
+				set_3g_led 0 0 0
+				return 1
+		    	}
 		}
 		test -z "$mode" || {
 			MODE="$mode" gcom -d "$device" -s /etc/gcom/setmode.gcom

只要將上述所需的套件都編譯、選定,在稍加修改特定幾個 Scripts 後,就可以利用方便的 ImageBuilder 產出所需的軔體了。本次也借用了 Knight 的 BandLuxe C120,基本用法是一樣的。

上週末的 COSCUP 2008 終於結束了。報名人數超過四百餘人 (且還有眾多人員向隅),報名踴躍與出席狀況都相當良好,活動算是大成功阿。特別是今年第一個晚上的 BoF ,開了五個議程,每場都有同好參加,是第一次台灣社群活動所謂 BoF 成功的例子阿∼ 成功的會議要感謝主辦團隊跟各社群協調者的大力支持、配合。

這次活動,兼任了場地的無線網路佈建跟最後一場主持人,順便分享了一場年初到目前為止的無線網路佈建經驗。簡報檔案可於COSCUP 2008 網站上下載。


感謝 cocakl 攝影

講題的部份,由於時間只有二十分鐘,有許多東西其實沒辦法深入解釋說明,光是講到頭幾頁介紹 OpenWrt 8.08 就已經花了十五分鐘。很多可以詳細說明的細節只好略過不提,像是天線的配置與選擇技巧,以及 802.11 b/g 所使用的 DSSS, OFDM特性差異,特別是投影片的最後幾張政見宣導沒有機會講。投影片中的許多細節可以於先前 Blog 過的文章中找到深入說明。去年的簡報也可於下載。

本次活動的網路實在是非常囧。早在一個月前就已經去場勘,原則上除了需要先註冊欲使用的設備 MAC Address 外,網路直接使用台灣大學應用力學研究所的區網應該可以非常順暢。沒想到活動前一天才知道,8/23 整天台灣大學因為網路設備升級會斷線!

當下重新為 ASUS WL-HDD25 與 FON2202 重新編譯了一版可以接取 Huawei E220 的 OpenWrt Trunk 版本。前一晚幾乎都在編譯加上測試。雖然當天借用到了四、五個 3G SIM/Modem,沒想到還是不敵場內 GSM/3G 訊號不良,對外頻寬比小便撥接還慢。虧我還帶了一台 EEEPC + USB Hub 要當 Multipath-routing Gateway (後來才知道原來大廳可以收到好訊號,應該要另外想辦法弄幾台 Repeater 出來打進室內才對)

週六傍晚與週日雖然對外恢復,但是台大對外路由一直頗怪,像是接到中華電信或國外某些網段都會嚴重掉封包。且台灣大學內部的名稱伺服器反應特慢,所以大家使用大約也會感受到鈍鈍。(大家倒是很給面子的沒有嫌棄阿,感恩)

連續幾次佈建都不甚順利,下次真的要買綠色乖乖來祭拜宅神 (地基主) 了啊。

趁著前陣子 WoW 在超商特價每張遊戲主程式光碟 9 元,且可申請一個月免費試玩時,拿了一份回來。試著在 Linux 上以 Wine 安裝。

安裝過程不時有選單無法正常顯示中文,不過大致都不妨礙安裝。比較麻煩的是,由於 3D 顯示不正確的緣故,有許多選單根本無法辨識,必須稍加猜測才能成功安裝。安裝好之後,光是 WoW 整個軟體就佔了 9.2G.

軟體裝好,為了顯示卡的問題花了不少時間偵錯。我的顯示卡是 Intel Corporation Mobile 945GM/GMS, 943/940GML Express Integrated Graphics Controller [8086:27a2] (rev 03),Xorg driver 則是 xserver-xorg-video-i810 2:2.3.2-2+lenny2。

透過 glxinfo 查詢 direct rendering 是可用的。

$ glxinfo | grep rendering
direct rendering: Yes

glxgears 的速度也大約在 935 FPS.

$ glxgears
4678 frames in 5.0 seconds = 935.525 FPS
4709 frames in 5.0 seconds = 941.694 FPS
4658 frames in 5.0 seconds = 931.461 FPS

945GM 的效能本來就不特別好,光是在 Windows 下就頗吃力,何況是在 Linux/Wine. 很多人建議更改 WTF/Config.wtf,將 gxApi 設定為 OpenGL,具聞由於 WoW 預設使用 DirectX,在 nVidia 顯示卡上運作時常不正確。

不過我剛裝好,以預設 DirectX 啟動時,連登入畫面都無法顯示,馬上就退出程式。改以 OpenGL,雖然可以進入畫面,但是登入到主場景時,會有 Mesa 7.0.4 implementation error 的錯誤,並退出軟體。

Mesa 7.0.4 implementation error: i915_program_error: Exceeded max nr indirect texture lookups

最後的解決方法是改為使用 DirectX 啟動,並修改 Xorg.conf 的 Device section 將預設的顯示卡共享記憶體改大,

Option          "LinearAlloc" "65536"

於是就可以順利進行遊戲。但是效能其差無比,經過測試,遊戲下速度只有 7-2 FPS,根本不堪使用,要玩遊戲還是找張好顯卡吧。

若你曾經或正想學過 git,你肯定已經讀過不少文件。不過學習最快的方式,除了學習基本的術語外,你可能順著 Git tutorial (part 2), Git QuickStartEveryday GIT With 20 Commands Or So 甚至印了 Cheat Sheet (extended edition) 當作案邊參考,

若你遲遲未能上手,而想試過所有指令,最好的方法就是跟著前人作一遍。Scott Chacon 因此做了一個 GitCasts 網站,網站裡面循序漸進的以影片方式教授你如何使用 git。(Scott 最近的新網站是 git-scm.com。) 若你還不了解如何使用 git,不妨試著觀看這些教學影片吧。