- 移植開放原始碼程式到 OLPC 上 □ 文/Mat
近來竄紅的 OLPC 是個很有意思的硬體平台,想讓小朋友在 OLPC 上跑你最酷的開放原始碼軟體嗎?可以的!讓筆者在這篇文章中以移稙 PCManX 到 OLPC 作例子,簡單地介紹開發和測試的流程。
近來竄紅的 OLPC 是個很有意思的硬體平台,想讓小朋友在 OLPC 上跑你最酷的開放原始碼軟體嗎?可以的!讓筆者在這篇文章中以移稙 PCManX 到 OLPC 作例子,簡單地介紹開發和測試的流程。
拜 QEMU 優良的模擬器技術之賜,即使我們沒有 OLPC 的實機,依然可以透過模擬軟體的方式來試用和開發。在進一步嘗試之前,我們先來認識一下 OLPC 的軟硬體規格如下:
OLPC 的外觀元件為:
硬體規格如下(引用 Jouston 於 Engadget 的 文章):
中央處理器
AMD Geode GX2-500,耗電 1 瓦,時脈 366MHz。
記憶體
DDR266 (133MHz) 128MB。
儲存媒體
無硬碟,只有內建 512MB SLC NAND 快閃記憶體,以及高速快閃記憶體控制器 。
螢幕
7.5吋 雙模式 1200 x 900 LCD 液晶螢幕
單色模式:高解析度,反射式顯示模式
彩色模式:標準解析度、quincunx-sampled(五角取樣),穿透式顯示
特製「DCON」晶片,可以使螢幕上的資料繼續顯示但暫停 CPU 運作。
無線網卡
Marvell Libertas 88W8388+88W8015, 802.11b/g compatible
擴充埠
USB 2.0 x3
網路埠
Marvell 88W8388 802.11b/g WiFi,雙可調式天線。
音效
Analog Devices AD1888 AC'97 codec、內建麥克風,還有一個 Analog Devices SSM2211 音效放大晶片。
鍵盤
70 鍵的特製鍵盤,內建游標控制鍵。1.2mm 鍵距、封閉薄膜式鍵盤。
滑鼠
螢幕內建觸控板,電容/壓感雙模式,可手寫輸入。
電力
內建 5 cell 充電電池及人力發電機,二針式 DC 輸入變壓器 10 - 25 V/-23 - -10 V,最大電流 500mA
指示燈
AC Power、電池、無線網路,蓋子打開或關閉都可以看到。
軟體規格:
作業系統
Fedora Linux 特製版,但可選擇不包含此選項出貨。
使用者介面
Sugar OS,「為了孩子們重新設計的」作業系統
啟動管理程式
Linux BIOS,1MB SPI 介面 flash ROM。
OLPC 和 PC 系統很類似,也是 x86 平台,加上使用的 Fedora Linux 系統,除了桌面視窗外觀看起來比較不一樣之外,其他方面跟泛 Linux 系統幾乎都一模一樣的。以下我們就來看如何把 PCManX 移植到 OLPC 吧!
在開始之前,先假設你手邊已俱備下列幾個主要的工具:
QEMU i386 (OLPC 的平台是 x86)
GTK Libraries
ZIP, BZIP2 tools
操作步驟如下:
基本的設定
1. 首先要取得 OLPC 的映像檔
在這個網址下有放置開發中的各個版本的映像檔。每個 build 的穩定度不一,為了穩定起見,這次先選擇 LATEST-STABLE-BUILD 的版本來測試,筆者用的是 Build 406。下載完後,請解壓縮
-
bzip2 -d olpc-redhat-stream-development-devel_ext3.img.bz2
2. 啟動 qemu
-
qemu -redir tcp:2222::22 olpc-redhat-stream-development-devel_ext3.img
其中 "-redir tcp:2222::22" 的意思是將 QEMU 中的 OLPC 的 :22 Port 和本機端的 :2222 Port 接在一起。
3. 取得終端機和 root
進入到 OLPC 視窗環境後,在 OLPC 的模擬環境按 “Ctrl-Alt-3”,就會進到 console 模式(要回到視窗模式請按 “Ctrl-Alt-1” )。接著用 root 登入(預設沒有密碼),就可以順利取得 root console。記得順便設定一下 root 的密碼。
4. 下一步?
根據官網上的說明,下一步應該就可以直接連線進去,但是實際上卻不行,為什麼呢?因為這時候的 OLPC 還沒有將網路啟動,需要先設定網路才行。
5. 設定網路
在 root console 下執行
-
ifup eth0
或再加上執行
-
echo ifup eth0 >> /etc/rc.local
設成開機會自動啟動
6. 啟動 sshd
請執行下列指令:
-
/etc/init.d/sshd start
執行到這裡,我們已經有能力可以連線到 QEMU 中的 OLPC 了。
7. 連線到 OLPC
-
ssh -o NoHostAuthenticationForLocalhost=yes -p 2222 root@localhost
進行到這裡,我們已經有操控整個 OLPC 系統的能力,可以像使用一般 Linux 的方式去使用。如果希望能有視窗轉送的機制(將原先顯示在 OLPC 裡的視窗程式,轉送到本機端的 X Window 來顯示)的話,請執行
-
ssh -X -o NoHostAuthenticationForLocalhost=yes -p 2222 root@localhost
其中 "-X" 是設定視窗轉送的參數。這時候可以執行 xterm 看看,所產生的視窗將會從原本的 OLPC 改送到本機端來。
製作 PCManX 執行檔
目前 OLPC 並沒有內建 gcc 等開發工具。不過在 OLPC 查一下系統資訊(執行 uname -a),可以發現 OLPC 的平台是 i686。也就是說,我們可以先在本機端開發好程式,編譯好執行檔再上傳執行即可。唯一要小心處理的就是執行環境的函式庫相依性。我們得確保執行檔在執行的時候,需要的函式庫 OLPC 都有提供,才能保證正確執行。
PCManX 主要需要的函式庫是 GTK,還有一些像是 fontconfig、xft 等相依性在 OLPC 上剛好都有提供。加上 PCManX 都是遵循主流的標準來架構,在相依性上遇到的問題不多。
1. 首先得先取得 PCManX 的原始碼,筆者用的是 0.3.5 版,並解壓縮到某暫存目錄。
-
tar -zxvf pcmanx-gtk2-0.3.5.tar.gz
2. 製作執行檔
進到主程式的目錄後執行
-
./configure --prefix=/tmp/usr/ && make && make install
其中 “--prefix=/tmp/usr/” 這個選項的用意是將 PCManX 的執行檔安裝到 /tmp/usr/ 下的各個子目錄,而不是預設的 /usr/ 下的子目錄。
3. 製作壓縮檔
檢查一下 /tmp/usr/ 下各個地方,應該會有 /tmp/usr/bin/pcmanx, /tmp/usr/lib/libpcmanx_core.so,…等檔案。然後執行下列指令將目錄作成壓縮檔
-
zip -r pcmanx.zip /tmp/usr/
到這裡,我們就得到一個簡單的 PCManX 程式的包裝。
在 OLPC 上執行 PCMan
1. 如何上傳?
最直接的方式就是透過 scp 的方式上傳。
-
scp -o NoHostAuthenticationForLocalhost=yes -P 2222 ./pcmanx.zip root@localhost:/home/olpc/pcmanx.zip
2. 將程式安裝到 OLPC 裡
-
unzip -d / /home/olpc/pcmanx.zip
執行後,將會把 PCManX 的相關檔案,裝到 OLPC 下的 /usr 程式目錄。
3. 如何執行
由於 OLPC 的 XWindow 是用 olpc 這個使用者的身份執行。所以在執行前記得切換成 olpc 這個使用者
-
su - olpc
之後用視窗轉送的方式來執行
-
DISPLAY=:0.0 pcmanx
就可以看到 PCManX 的畫面了
如何?又簡單又酷吧?我們將在這個禮拜四在魯米爺咖啡舉辦 OLPC Hacking Night,歡迎有興趣的朋友報名參加!詳情請見本期的社群動態。
shrink this item