前幾篇文章提到硬體廠商在做產品出貨前,可以檢閱 GPL 軟體授權適法訣竅 中的 Tips,確保自己沒有違反授權。但授權適法訣竅中的綱要非常精簡,若你在出貨時才驚覺 GPL 的授權問題,想從訣竅中找到保全的方法,大概也已經來不及趕在出貨前重新檢查所有的細節。

比較好的作法,就是在日常產品開發中,就將 GPL 相關授權問題納入公司執行規章中,如此便可避免相關的法律問題。

若你的公司才剛開始注意到 GPL 相關事宜,不妨參考 Software Freedom Law CenterGPL 遵守實務。這份文件中廣泛的說明一些容易造成授權問題的公司體制,例如允許大神級的工程師 (Build Guru) 製作最後的出貨版本,而非定義一個出貨程序。文件中也說明了違反授權的類型、收到律師函的因應措施以及其他的類似授權所產生的問題。值得參考。

若你照著前幾篇文章,不小心真的把 WL-700gE 刷成 OpenWrt。一時後悔想換回來的話,這裡是一些技巧與方法。不過既然刷成功了,能夠享用更多的「自由」,何必後悔
😉

首先,機器上的 Reset 鈕是沒有用的。請不要浪費時間照的手冊試圖 “Reset” 你的機器。凡是透過 tftp 上傳軔體到 CFE 上,你就已經蓋掉官方軔體。既然都已經覆蓋了,就沒有 Reset 的可能性。

要復原軔體最簡單的作法莫過於直接使用 ASUS 所提供的 Firmware Restoration Tool 來重裝所有的軔體。

但是 Firmware Restoration Tool 只能在 Windows 上使用,若你像我一樣只使用 Linux,以下是復原的程序。

WL-700gE 的軔體分成兩個部份,一部分是給 flash 所使用的核心與基本的開機設定工具,一部分則是存在 IDE 硬碟的應用軟體與檔案系統。你在官方網站所下載的軔體都會包含這兩部份。

首先,你該做的是先 flash 部份的軔體從下載的 NAS 軔體檔案中抽出。你需要 nasunpack (uasunpack.exe) 或社群所開發的 AsusTrxExtract (AsusTrxExtract_1.0.0.1.zip),這些工具可以讓你將軔體解出。其中 AsusTrxExtract 是使用 C# 所開發,作者尚提供了原始碼,你可以於網路上搜尋下載。而 nasunacpk 則內含於 ASUS 所提供下載的 GPL 檔案中。

nasunacpk 使用方式很簡單,除了用 nasunpack 解開外,你尚必須去除檔案中的標頭,最後取出的檔案才是我們所需的原始檔

$ nasunpack --sections WL700gE_1.0.7.8.nas
section headers ---
00: type = 0x15 (BRCM_NAS_SECTION_TYPE_TAG  ), length =      126 bytes
01: type = 0x12 (BRCM_NAS_SECTION_TYPE_FLASH), length =  1691648 bytes
02: type = 0x13 (BRCM_NAS_SECTION_TYPE_DISK ), length = 16560128 bytes
$ nasunpack --extract=0,tag WL700gE_1.0.7.8.nas
dumping section 0 into tag...
$ cat tag
BroadNAS System Software
Version: 2.2.1
unknown
Build date: 三  7月 25 15:30:01 CST 2007
Build by: [email protected]
$ nasunpack --extract=1,flash WL700gE_1.0.7.8.nas
dumping section 1 into flash...
$ dd if=flash of=piggy.gz bs=1 skip=28
1691620+0 records in
1691620+0 records out
1691620 bytes (1.7 MB) copied, 8.40643 seconds, 201 kB/s
$ file piggy.gz
piggy.gz: gzip compressed data, was "piggy", from Unix, last modified: Wed Jun 27 21:42:29 2007, max compression
$ nasunpack --extract=2,disk WL700gE_1.0.7.8.nas
dumping section 2 into disk...
$ dd if=disk of=crom bs=1 skip=28
16560100+0 records in
16560100+0 records out
16560100 bytes (17 MB) copied, 81.0496 seconds, 204 kB/s
$ file crom
crom: Linux Compressed ROM File System data, little endian size 65536 CRC 0x911b22f7, edition -1278167390, 138541296 blocks, 1226466058 files

其中 crom 是 WL-700gE 會安裝於 disk 上得應用軟體,若你想研究內含的軟體,可以用 mount -o loop 將檔案掛載起來查看。而 piggy.gz 就是我們所需的 Linux kernel 核心檔案,接下來可以利用重新開機並按下 “Ez Button” 的方式,透過 CFE 重新燒錄舊版軔體。細節請參考 Wl-700gE Reflash HowTo

燒錄好原本的核心後,另外一個麻煩的是要重建原本存在 IDE 硬碟的應用軟體。若你沒有手賤的去亂刪除 /dev/mtdblock/2 的資料,核心應該在重新開機後會載入存於 /dev/mtdblock/2 (/dev/mtdblock/2 只是另外一個 MTD block) 的基本工具,其中包含了復原與重新格式化硬碟的機制。

第二個階段是比較妙的,由於 WL-700gE 在接受第二階段的 disk image 上傳時,會作檢驗,系統必須接受某種 UDP 的認證協定後,才會接受新的 disk image. 因此你沒辦法單純的用 tftp 上傳,這時可以用 nasload (一樣內含於 ASUS 所提供下載的 GPL 檔案中) 使用檔案進行上傳。

用法如下

$ nasload /U /P /a /1 /f WL700gE_1.0.7.8.nas

如此就可以將 WL-700gE 完全復原到出廠的狀態了!

在安裝過 OpenWrt 到 WL-700gE 上後,你得作個抉擇。是要持續使用 OpenWrt,或者選用其他的自由軟體套件系統,如 Debian GNU/Linux。若要繼續使用 OpenWrt,你可以將裝好的 OpenWrt Image 再倒入硬碟中,之後就可以以 ipkg 的機制安裝軟體。

也可以選擇安裝其他的套件系統,如已經被移植數千種軟體的 Debian 系統。且 Debian 是少數支援 mipsel 的套件系統之一。

安裝方式很簡單,你可以利用 cdebootstrap 造一個給 mipsel 使用的基礎系統 (base system),操作方式如下

# cdebootstrap -v --foreign --arch=mipsel lenny debian-distro http://ftp.tw.debian.org/debian
P: Retrieving Release
P: Retrieving Release.gpg
P: Validating Release
I: Good signature from "Debian Archive Automatic Signing Key (4.0/etch) <[email protected]>"
P: Parsing Release
P: Validating Packages.gz
P: Parsing Packages
P: Validating gcc-4.3-base
P: Validating libgcc1
...
...
...
P: Writing hosts
P: Writing resolv.conf
W: Creation of /dev/console failed
I: Second stage installer is available as /sbin/cdebootstrap-foreign or /sbin/init

上述指令,會為你建立一個 lenny 版本的 Debian 系統。若想擺入核心或其他套件的話,可加入額外參數如 –include=linux-image-2.6-sb1a-bcm91480b

你可以將上述 debian-distro 目錄壓縮後,丟到 WL-700gE 上再解到 IDE 硬碟的分割區中。然後透過修改 flash 中的 OpenWrt 之 preinit 等指令,預先載入該分割區,並利用 pivot_root 或 chroot 來更換系統目錄。待正確切換入系統後,再以 root 執行 /sbin/cdebootstrap-foreign 即可完成所有安裝程序。

開機的流程將會是 CFE -> OpenWrt -> Debian. 不過若使用 pivot_root 或 chroot 都會使系統使用 OpenWrt 的核心系統。

若想於 Debian 中使用不同的核心,不妨使用 kexec ,mipsel 平台的版本也已經被移植好。當然,你也得修改 OpenWrt 軔體中的 /sbin/init,讓系統自動搜尋你想使用的核心,並透過 kexec 線上重新載入新的核心系統。目前這個技術尚未有標準的設定檔作法或範例,戲法巧妙不同,就看你如何應用了。

趁著前陣子 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,不妨試著觀看這些教學影片吧。

若你時常觀看 Google Video 或 Youtube 上的影片,Miro 是推薦的好物。

Miro (was Democracy Player) 是由 Participatory Culture Foundation 發起,主程式是由 XULRunner, Python 所組成,授權是 GPL。軟體支援了 Podcasts, Video Blogs, Bittorrent 等 RSS Feeds 訂閱、下載功能。也可以透過內建的搜尋功能,搜尋網路上幾個熱門的影音網站。

特別的是 Miro 下載時,會試著下載高解析度的影片,如從 Youtube 上下載的影片格式就會是 H.264/MPEG4 格式。於是,可以先指定下載影片,然後再離線享受高畫質的影音效果。更詳細的介紹請參考電腦玩物Miro 重量級桌面影片中心應用指南

Screenshot of Miro

我透過 Miro 訂閱的影音頻道有

你可以在網站上找到其他熱門被推薦的頻道 (podcast)。或者到 Youtube 上訂閱預設的 RSS Feeds。或是利用 Youtube 的標籤訂閱功能,訂閱特定的頻道,如 http://www.youtube.com/rss/tag/tagname.rsstagname 可以自行代換成自拍、性感、情色。