2007年6月29日 星期五

OLPC Hacking Meet-up心得

經過十天的等待,於於完成了這次「OLPC Hack Meet-Up Day」的活動。活動期間,感謝jollen、jserv、PingYeh、 Andrew、...等人提供不少對活動的經驗和建議。這段期間也感謝BV1AL、KC、olv、 FourDollars、linanne、aguai、wesley、thinker、yungyuc、gaso、yuren...等人的幫忙,才能順利將活動完成。

活動開始,先是由Mat簡單介紹一下如何用QEMU模擬OLPC和測試程式。之後則是共同開發和交流討論。21:10-22:00 則是展示時間,首先是jserv展示了QEMU用於模擬系統開發的各個應用,也現場展示了他最新的成果「親手打造Tablet / WebPad」。接著,FourDollars也跟著和大家分享影音串流程式最新的發展,分析未來的驅勢。並同時展示了一個他參考pcman的程式而改出來的影音外掛程式。可以非常方便的點選網路廣播並收聽,並發想也能整合進OLPC,提高OLPC的娛樂性。

而在PCMan on OLPC這個主題上,由國內開發LiveCD(USB)系列的BV1AL將gcinOLPC上的成果作成LiveCD的映像檔,並設定好網路等相關部分。而PCMan X開發團隊的字型好手olv ,則是解決OLPCPCMan X中文字型顯示的問題。在經過一段時間修改,順利將兩方的成果結合起來,如下:

雖然還是有許多小缺點,但這張快照也象徵了我們用行動來實踐我們的信念,也呼應了活動發起的訴求。

在活動期間,wesley、aguai、annelin... 也嘗試利用QEMU建立多個OLPC來模擬mesh network的測試環境。而Andrew、PingYeh、BV1AL、...在Tick偶然拿到OLPC實機的root console後,也著手研究了OLPC的系統更新、開機流程,相信不久之後也能見到相關的經驗分享。

最後希望能持續將這些成果整理出來,以開放的方式回饋給upstream和社群。

2007年6月28日 星期四

親手打造Tablet / WebPad

從事嵌入式系統開發,很大層面就是想體會「親手打造」的成就感。以往最大的問題就是進入的門檻較高,不僅得有開發硬體,還得要耗費大量的時間進行驗證測試,然而,這些繁瑣的過程會讓我們失焦,是的,最重要的部份,還是賦予硬體生命的軟體,這才是具備長遠價值的產物,一旦有了足夠的經驗與系統軟體,要在相容的硬體移植或加強功能設計,那就如魚得水了。

之前選定一個用以「練功」的題目「構想:Embedded Linux + Mozilla」,作法可有很多種,不過筆者嘗試以系統模擬的途徑,驗證「視覺化系統模擬與偵錯」一文中提出的概念:引入針對嵌入式裝置的基礎建設,作以system prototype、進階分析,以及快速軟體開發之用。上個月則於討論群組提出具體的想法「RFC: Tablet/WebPad 參考設計」,目前已稍有成果,在Google Code Hosting上申請了新專案「mind - MIND stands for "Mind Is Not a Device"」,可透過OpenEmbedded的迷你子集合去建構整個Embedded Linux作業系統,並調整為Tablet / WebPad的系統組態,以Xscale與x86作為參考開發的硬體平台,本階段已可使用Qemu為基礎的系統模擬進行驗證 (GNU Toolchain、Emulator,與Debugger均移植到Win32),以下是運作中的展示畫面:

這呈現了我們Embedded Linux平台的應用程式,即精簡版的Mozilla web browser,輔以XUL打造進階的使用者介面。這個系統主要是作概念性呈現,所以其他應用程式則相對單純,程式主畫面如下:
待作事項:
  • 針對ARM平台規範新的虛擬硬體組態,加入Wifi / Bluetooth裝置模擬
  • 加入網路管理程式,如Linetconf
  • 透過內建的OProfile進行深入的效能調校
  • 提供x86 LiveCD

2007年6月27日 星期三

在Ubuntu / Debian上啟動kqemu加速OLPC的執行

Mat 已經寫了一篇簡單的文件「Hello World for OLPC」,只要照著做就可以很容易的把 OLPC 利用 qemu 模擬跑起來了。不過如果可以先把kqemu的kernel module裝起來的話,那麼執行OLPC的模擬會更加的快速順暢。以下簡單介紹Debian/Ubuntu上啟動kqemu的方法:

1. 首先把相關的套件裝好

# sudo aptitude install module-assistant
2. 然後利用module-assistant編譯出kqemu的kernel module並且安裝到系統中
# sudo module-assistant auto-install kqemu-source
3. 最後載入模組並建立裝置節點
# sudo modprobe kqemu major=250
# sudo mknod /dev/kqemu c 250 0
# sudo chmod 666 /dev/kqemu
然後就可以照著Mat寫的文件跟著做即可。

另外~ 目前OLPC底層的作業系統是Fedora Core 6 (zod),所以啦,知道FC6怎麼玩的,基本上OLPC也是一樣地玩。

2007年6月25日 星期一

模擬Linux on Palm 5

Palm產品家族自第五代開始,部份採用Intel Xscale處理器,日前qemu的CVS tree也正式納入支援,於是熱血的hackers又開始鑽研是否可模擬Palm 5的硬體,並在其上運作Linux。在一番嘗試後,Alex很高興跟大家宣佈這個訊息,請見「Testing Linux4Palm on qemu」一文。他在 Hack&Dev計畫 (目標即是將Linux移植到原本運作PalmOS的硬體環境) 的程式碼加入以qemu為基礎的Palm 5的硬體模擬器,目前支援的硬體列表如下:

  • palmtc - Palm Tungsten|C (PXA255)
  • palmz72 - Palm Zire72 (PXA270)
  • palmtx - Palm TX (PXA270)
  • palmld - Palm LifeDrive (PXA270)
取得與編譯方式如下:
# svn co https://hackndev.svn.sourceforge.net/svnroot/hackndev/qemu/trunk qemu-hnd
# cd qemu-hnd
# ./configure --target-list=arm-softmmu --cc=gcc-3.4
# make -j2
預先取得必要的核心與檔案系統影像檔,假設解開壓縮檔後位於./palm/0.0.3-fnw目錄,則可透過以下方式執行: (其中一個hardware model)
$ cat RUN.sh
#!/bin/sh
BASE_DIR=`pwd`/palm/0.0.3-fnw
./arm-softmmu/qemu-system-arm \
-M palmld \
-kernel $BASE_DIR/zImage \
-sd $BASE_DIR/Angstrom-opie-image-palmld-0.0.3-alpha.rootfs.ext2 \
-append "root=/dev/mmcblk0 psplash=false"
啟動畫面如下:
過程中可透過qemu作LCD panel與終端機顯示 (serial) 的切換,也就是 Ctrl-Alt-[13]。以下是終端機操作畫面:
系統模擬越來越多元了。

2007年6月21日 星期四

Hello World for OLPC

許多朋友好奇前天的螢幕快照怎麼來的,其實過程並沒有想像中的那麼難。小弟就以作一個Hello World的程式作範例。

在開始之前,先假設你手邊已俱備下列幾個主要的工具:

  • QEMU i386 ( OLPC的平台是x86 )

操作步驟如下:

1. 首先取得OLPC的映像檔:按這裡下載

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. 取得終端機

進入到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 -X -o NoHostAuthenticationForLocalhost=yes -p 2222 root@localhost
其中 "-X" 是設定視窗轉送的參數。(可以執行xterm看看,所產生的視窗會將送到本機端來)。進行到這裡,我們已經有操控整個OLPC系統的能力,可以像使用一般Linux的方式去使用。

8. 如何作一個最簡單的Hello World?

目前OLPC並沒有內建gcc等開發工具。不過uname一下,可以發現OLPC的平台是i686。也就是說,我們可以先在本機端開發好程式,編譯好了再上傳執行即可。

而在OLPC裡的視窗程式執行環境為gtk、pygtk。我們不妨利用現在的pygtk來作為試驗。在這裡我們就直接引用pygtk給的官方範例

9. 如何上傳?

最直接的方式就是透過scp的方式上傳。
scp -o NoHostAuthenticationForLocalhost=yes -P 2222 ./helloworld.py \ root@localhost:/home/olpc/hello_world.py
10. 如何執行:

由於OLPC的XWindow是用olpc這個使用者的身份執行。所以在執行前記得切換成olpc這個使用者
su - olpc
之後用視窗轉送的方式來執行
DISPLAY=:0.0 ./helloworld.py
就可以看到簡單的Hello World的畫面了