更換 WL-700gE 軔體的方法相當容易,不過還是花了些時間測試。

剛取得機器的時候,透過出廠內建的 Bootloader CFE,在開機時按下 ezsetup 鈕,即可讓 CFE 進入 ‘Rescue mode‘ 接受 TFTP 上傳新的軔體,並自動燒入 nvram 中。

只要正確設定上傳方的 IP 與使用 TFTP Client,就可輕易的將軔體換成其他版本,細節可參考 OpenWrt Wiki 上的 HowTo。燒錄過程相當迅速,稍微計算一下,Flash 寫入 1.6M 的軔體,大約只需要 16 秒。

製作給 ASUS WL-700gE 的 OpenWrt 軔體也相當容易,由於開發者已經寫好 WL-700gE 的 Profile,你可以在 make menuconfig 時,直接選用 Broadcom BCM947xx/953xx [2.4],Profile 選 WL-700gE 即可。OpenWrt Buildroot 會為你建一個基本的軔體出來。

之所以選擇 2.4 核心的原因,是 WL-700gE 的無線網路驅動程式 broadcom-wl 目前只能在 2.4 上跑。而另外一組開放原碼的 b43 目前暫時只有 STA 模式,由於 mac80211 與 hostapd 的支援問題,Access Point mode 還無法使用。

困難的地方在於一開始測試時,並沒有外接 Console。於是時常碰到燒入後無法開機,或者開機後可使用,卻在一段時間或重開機後就無法連接的問題。

瞎子摸象了一段時間後,認命的參考 Adding a Serial Console to an Asus WL-700gE 一文,把機器拆解,拔掉內建的變壓器,並接上 Serial Console。拔除時,發現變壓器外裝只是用紙片隔離,感覺實在有點簡陋。

上圖腳位由上而下順序是 VCC(?), TX, RX, GND,電壓是 3.3V,終端機設定為 115200 bps 8N1。如此,就可以讀到所有的 Console Messages, 包含 CFE  等開機訊息

CFE version 1.0.37 for BCM947XX (32bit,SP,LE
Build Date: 四 12月 29 20:36:58 CST 2005 ([email protected]
Copyright (C) 2000,2001,2002,2003 Broadcom Corporation.

Initializing Arena
Initializing Devices.
et0: Broadcom BCM47xx 10/100 Mbps Ethernet Controller 3.90.23.0
rndis0: Broadcom USB RNDIS Network Adapter (P-t-P)
CPU type 0x29006: 264MHz
Total memory: 67108864 KBytes

Total memory used by CFE:  0x80800000 - 0x8089BA00 (637440)
Initialized Data:          0x80831B70 - 0x80834250 (9952)
BSS Area:                  0x80834250 - 0x80835A00 (6064)
Local Heap:                0x80835A00 - 0x80899A00 (409600)
Stack Area:                0x80899A00 - 0x8089BA00 (8192)
Text (code) segment:       0x80800000 - 0x80831B70 (203632)
Boot area (physical):      0x0089C000 - 0x008DC000
Relocation Factor:         I:00000000 - D:00000000

Device eth0:  hwaddr 00-17-31-A4-22-59, ipaddr 192.168.1.1, mask 255.255.255.0
 gateway not set, nameserver not set
Null Rescue Flag.
Null Rescue Flag.
10 seconds to Rescue mode...
Null Rescue Flag.

於是,終於讀到幾個小問題。這些問題是 OpenWrt 並未處理或提醒的

第一個編譯出來的 openwrt-brcm-2.4-squashfs.trx 必須小於 1802240 bytes。由於 WL-700gE 的 Flash 只有 2M,加上留給 CFE, configs 的空間。若超過大小,CFE 就會拒絕接受,下次重新開機會自動進到 Rescue mode

另外一個問題在於,squashfs 格式軔體,預設會試著找出 Flash 中的空餘空間,並利用 mini_fo 格式化為 jffs2、載入給系統使用。這在 Flash 夠大的機器上相當好用,因為你可以保持原本的軔體檔案,所有的設定修改都會被另存到額外的空間。

但是由於 WL-700gE 的 Flash 太小, 所以 mini_fo 根本沒有足夠的空間無法正確初始。以至於系統因此停滯/當機。系統會出現如下的錯誤訊息

mini_fo: build_sto_structure: failed to create storage dir [1].
mini_fo: get_neg_sto_dentry: ERROR building sto structure.

解法是關掉 firstboot / preinit / mount_root 中初始化 mini_fo/jffs2 的相關指令。

另外一個問題是 IDE 硬碟的初始化問題,由於 WL-700gE 的硬碟必須透過 GPIO 驅動,因此你必須先載入 diag.o 模組後,才能載入 IDE 相關模組與掛載檔案系統。這些也必須透過調整模組載入的優先值來修正問題。

最後是由於 Flash 根本太小,所以你得把主程式裝進硬碟中,並在 preinit 中作檔案系統掛載,並利用 pivot_root 或 chroot 來切換系統目錄。

當你都解決以上問題後,就終於可以開始使用 OpenWrt 了。:D

大約任何一個軟體開發者都可能碰到詭異的 undocument API 、噁爛的架構,或者碰到設計有問題的硬體,大約都會情不自盡的爆粗口。偶爾,你甚至會被其他莫名其妙的開發者惹火,例如未充分溝通就擅改程式碼包成套件的情境。

前些時候,quodlibet 的 Debian 套件維護者 Sebastian Dröge 因為誤解了 quodlibet 所使用 GStreamer 中的一個 API 相容問題,於是直接擅改程式碼中的一段,以便可以於新版的 GStreamer 中使用。但是這樣的行為卻未事前於 quodlibet 開發者 Joe Wreschnig 溝通,而那其實算是 GStreamer 的問題,並非 quodlibet 的錯誤。

於是,Joe Wreschnig 惱怒之下,身為一個上游開發者,就在 quodlibet 中也改了一段因應 GStreamer API 更改的措施。而且順便戳了 Sebastian Dröge 一下,要他去死一死吧。於是身為一個 Debian Developer,自然的解決方式當然是發一個 Bug Report。而且解決的討論很自然就往 DFSGDebian Policy 發展。所幸,最後 Tristan Seligmann 另外改了程式碼,並做了一份新的壓縮檔,算是解決了這個幼稚問題。

有趣的是 Joey Hess 在討論中,順便彙整了過去 Debian 修改紀錄中,曾經出現的粗口表,非常好笑,只能說 Software 真是 Sucks。XD

另外一個好玩的研究是 Vidar Holen 研究了 Linux 核心中有多少詛咒粗口,Linux kernel swear counts。我們可以拿程式碼中的髒話平均數量當作判斷品質的一個參考值嗎? :-p

The software is updated at 2010/10/05.

It’s nice to see that people still like to use the small piece of software which been wrote for 20 months without updated. Thanks for feedback from

  • Uwe, g021030 (at) gmx.net
  • Keith Refson, K.Refson (at) rl.ac.uk

And the others how left the messages on the blog, especially patch from Hank Hampel and encouragement from Dick Dunbar. 😉

The new release is now handling in-line attachment as well, and it’s autotoolized and debianized.

You can download the tarball and deb file for Debian sid from

evolution-remove-attachments_0.0.2.tar.gz
evolution-remove-attachments_0.0.2_i386.deb
evolution-remove-attachments_0.0.2.dsc
evolution-remove-attachments_0.0.2_i386.changes

They are tested on Debian Sid with Evolution 2.22.

Ok, 我們看過了 Mobile Device 上應用 accelerometer technology 的應用,若是我們想實做同樣的技術在 Laptop, UMPC 或是 MID 上該如何作 ?

在 Thinkpad 上有個特色功能稱為 Active Protection System,基本上就是利用偵測加速度來達到保護硬碟的功能。透過這個功能,我們可以用來偵測筆記型電腦的傾斜狀態,在 Linux 上可以透過 HDAPS 驅動硬體並取得資料。

你可以透過 Yoni Rom, Patrick Kilian 與 Robert Love 所寫的 hdaps-gl 來動態顯示筆記型電腦的傾斜狀態。

雖說 Thinkpad 的加速度偵測只有二維 (BTW, 我的 Thinkpad X60 不知為什麼 X 軸, Y 軸是相反地),但是也足以玩很多把戲,像是防盜系統 (有人碰的電腦就自爆硬碟?!) 藉由搖晃切換桌面,或者像是 iPhone 一樣旋轉畫面為橫向、直向。甚至拿來玩滾小球遊戲 neverball 、或者直接把 X60 變成絕地武士的光劍!上回 Tatsuhiko Miyagawa 來台灣的時候也見過它展示透過 Thinkpad 使用 Google Maps 的 lighting talk,非常逗趣。

若是要在其他系統上實做這樣的功能,恐怕是得外加 acceleration sensing device 才行。極強的 hacker Till Harbaum (Twonky, NanoVM, LCD2USB, BlueZ 等開發者) 自己做了兩個版本的 USB TiltStick,可以分別偵測二維與三維的加速度。透過 USB 介面,可以接到 Nokia N8XX 系列設備或是個人電腦上,同時他也將軟體與驅動程式移植到 Maemo 平台。如此就可以在 Maemo 上玩些 Enigma 的小遊戲。

非常有趣是吧,雖然 Till Harbaum 提供了完整的電路圖,不過要自己找到元件跟焊接成功對我這種電子大外行實在困難。所以比較簡單的方法大概是直接買像是 Phidgets 提供的 Accelerometer 元件 了吧。:-)

華碩選擇接近 4/1 釋出 Eee PC SDK 真是一個好時機阿,雖說 Sourceforge 上在 3/18 時就可以下載,這個 SDK 包含了

  • Open Circulation Edition of the Xandros Desktop OS
  • Eclipse development environment
  • Qt4 toolkit
  • Developer’s guide
  • Sample applications
  • Multilingual VMware testing and debugging environment.

晤,其實整組 SDK 並沒有對於開發 Eee PC 上的軟體有特別幫助阿。開發者比較需要的是 Software packaging framework 的說明吧,至少是關於選單系統的說明等。至於開發環境裝 Debian 就可以了嘛。:-)