2007年5月7日 星期一

DIET-PC的ARM移植

注意DIET-PC專案有一段時間了,當我還在老東家作Linux thin-client時就耳聞此專案,不過因為某種原因,一直沒有嘗試。以下是DIET-PC 網頁上提供的簡介:

DIET-PC (DIskless Embedded Technology Personal Computer) is a Do-It-Yourself open source thin client software kitset, allowing IT professionals to construct generic- or special-purpose thin clients, or other network appliances, using commodity x86 PC or PowerPC Mac hardware. Experimental support is also available for ARM hardware.
雖然是單人計畫,但規模也日益增加,現在也提供ARM與PowerPC的移植。與其他Thin client或嵌入式計畫不同之處是,儘管「小而美」是重要訴求,但DIET-PC並沒有因此改用uClibcdietlibc,而是採用GNU C Library與Xorg,保持PC上的相容性。DIET-PCARM移植版本所採用的參考硬體是Hot-e HL200,這是ARMv4t/ARM920T的架構,也可以透過qemu去模擬執行。取得相關的檔案後,透過以下方式去啟動系統:
qemu-system-arm \
-M integratorcp926 \
-kernel zImage.integrator \
-initrd initrd.img \
-append "ramdisk_size=20480 root=/dev/ram0 rw ip=dhcp" \
-redir tcp:2222::22 -redir tcp:5910::5910
以qemu提供的user mode network stack轉向功能,將模擬環境的port 22 (SSH)對應到host的port 2222、port 5910則是VNC port。root帳號與VNC密碼都是"foobar",系統啟動後,會執行Xvnc,於是可透過VNC client去操作DIET-PC,以下是執行畫面:

視窗管理程式與桌面是我熟悉的Qvwm,執行中的應用程式是RDP (Windows Terminal Service)程式rdesktop,整體來說,這是個很精巧的系統。

2007年5月6日 星期日

反組譯 OpenMoko Steppingstone Code

在正式的內文之前,先來說個小故事。前一陣子在Atmel AT91RM9200這顆ARM9微處理器的實驗板上寫了一個簡單又迷你的kernel,後來想想認識的人裡面都沒人玩這顆,不免有點孤單。於是打算把它移植到比較多人玩並且有模擬器可用的平台,剛好jserv推薦OpenMoko,OpenMoko 的第一支手機Neo1973/GTA01所使用的微處理器是Samsung S3C2410也是 ARM9,我想應該不難移植,還有jserv掛保證的模擬器可用,所以就決定來玩OpenMoko/S3C2410啦!

既然我的出發點是要開發kernel,那麼對於處理器的啟動程序就不可不知。S3C2410啟動時,會從NAND flash的開頭複製4KB 內容到內部的SRAM,然後跳到SRAM開始執行,這4KB SRAM就稱為Steppingstone。這段小程式就是處理器最先執行的程式,但4KB空間當然放不下U-Boot,於是我們只把這段小程式當作踏腳石(steppingstone),由它來幫忙載入完整的U-Boot bootloader。

在好奇心作祟之下,想來看看這段steppingstone code寫些什麼(其實也沒什麼,真的很無聊吧 XD)。在 http://buildhost.openmoko.org/tmp/deploy/images/ 抓了lowlevel_foo開頭檔名的".bin" 檔,問題是我只知道可以用arm-linux-objdump來反組譯 ELF 格式的程式,那麼binary檔怎麼反組譯呢?上網Google了一下沒有找到ARM反組譯器(其實是前幾個連結沒有就懶得繼續找了),網友說IDA Pro這套軟體可以反組譯ARM程式,但我懶得安裝這麼龐大的東西。只好換個關鍵字繼續 Google 看看,結果找到了這個網頁:

firmware_reverse_engeneering_methodology
原來可以把binary檔轉成ELF檔再進行反組譯,方法如下:

先把binary轉成ELF格式:
$ arm-linux-objcopy -I binary -O elf32-littlearm foo.bin foo.elf
再進行反組譯:
$ arm-linux-objdump -marm9 -D foo.elf > foo.asm
輸出結果foo.asm是個純文字檔,內容就是反組譯出來的組合語言。簡單吧?不需要安裝其它軟體,只要利用toolchain就能辦到。學會這招後,手邊如果有實驗板沒開放bootloader原始碼,或者想hack PDA bootloader,都不是問題啦(當然得有耐心去trace組合語言程式碼)!

OKL4在gumstix的測試結果

之前的文章「Open Kernel Labs公司成立,強化L4與虛擬技術應用」提過新成立公司的 "Open Kernel Labs" 提供一系列以L4 microkernel為基礎的embedded與virtualization技術,而即使在邁入商業應用的今日,仍以BSD License (3-clauses)釋出成果,態度相當可取。"Open Kernel Labs" 提供一個針對開發者的Portal site:portal.ok-labs.com,目前開放下載的版本為okl4 release-1.4.1.1,支援IA32與ARM (arm926ejs, xscale, arm1136js, arm1176js)等架構,若以平台來看的話,通用IA32架構,也就是PC99,以及gumstix (based on PXA255)兩項有支援。

gumstix的應用很廣,許多機器人與控制系統都可見其蹤跡,同時也是採用我比較熟悉的Xscale架構,去年也開始相關的qemu模擬工作,自然引起我的高度關注。okl4 release-1.4.1.1相較於NICTA的版本,實在簡單許多。首先,得準備好工具,python2.4、Skyeye (用以模擬與偵錯gumstix),以及ARM toolchain,剛剛已在台大做了mirror如下:

在進行之前,我們來複習NICTA規範的L4 Microkernel / Embedded & Virtualization的架構,Iguana是個運作於L4 microkernel的server,提供作業系統所需的系統服務,像是記憶體管理、權限控管,與驅動程式等等;Kenge概念上類似L4Env,也是提供虛擬執行環境所需的基礎建設;Wombat就相當有意思,也是本架構的賣點,Wombat是個修改過的Linux kernel (目前版本 2.6.10),運作於L4 Microkernel與Iguana之上,如此一來,既可透過Wombat來達成原本Linux應用程式的相容性,又可在L4 Microkernel達到Realtime最佳的效能。OKL4 release提供以上元件的實做,附加具體而微的Linux系統,基本上,只要設定toolchain與Skyeye的路徑後,直接執行以下指令即可建構:
./tools/build.py machine=gumstix project=iguana wombat=True simulate
需注意的是,預設的安裝script忽略了libgcc_s.so.1,所以記得自ARM toolchain複製一份到 build/linux/install/lib/ 目錄。

透過模擬環境的執行畫面如下:
我在圖中以紅色箭頭標注了此virtualization環境的變化。首先是L4 Microkernel,再來是IguanaKenge,最後就是Wombat,最後會跑完Linux booting flow,切入Linux user-space。對了,剛剛也試著用qemu去執行,但似乎會卡在igms0的處理。

2007年5月2日 星期三

Xorz/Embedded作為Phone UI

之前在「動態組字技術於Embedded領域」提過我們最近實做的動態組字技術基礎建設,與其適用的場合和思維方向,其中也提到Xorz/Embedded (展示1/展示2)。整合動態組字技術,對於原本即以向量繪圖為核心架構的Xorz/Embedded來說,是今年的規劃,可作為低階裝置的UI (User Interface) 或者是進行能源管理處理時的圖形操作,甚至可以植入kernel space或boot loader。

最近又對Xorz/Embedded做了refactoring與改進,現在backend有SDLX11,與Linux framebuffer。在週二晚上與OpenMokoSean Moss-Pultz & Harald WelteJollenChihchun等人聚會時,展示了最新的成果,以下是運作於Neo1973 GTA01的畫面:

關鍵技術有:向量繪圖、快速座標轉換、半透明處理、動態字型描繪、輕量級視窗管理等,近期內會開放實做,允許創造更多應用。同時也與Sean Moss-Pultz談及Linux-based feature phone的可能性,就技術上本身來說是可行的,而且他也給予正面回應。我想,如果這些基礎建設都穩固後,自身對GreenPhonegpephonOpenMoko的設計有更好的掌握後,或許我可在OpenMoko的基礎上建構以Xorz/Embedded為核心的Phone (UI) stack,或許可稱為"OpenMoko-Lite"。

憶及之前閱讀的報導「Linux well-positioned in feature phones, Trolltech founders say」,雖然已過一年,但其中有些觀點仍是值得思考的。我們不僅得思考BOM (Bill-Of-Materials) cost,Trolltech的兩位創辦人Eirek Chambe-Eng與Havaard Nord也提醒我們:

"The line between smartphones and feature phones will be totally blurred."
訪談也談及single-chip、virtualization,與系統複雜度等議題,所以在設計的同時,也得有清楚的思維與定位。

iThome電子報對於黑客鬆的報導

之前提過「OrzLab::黑客鬆紀錄」,以輕鬆的口吻介紹了我們在「台灣黑客鬆」進行的Hacking,本週則收到iThome所寄來的刊物,裡面有對此活動作詳盡的報導,當然也包含OrzLab。台灣黑客鬆有篇紀錄「iThome 電腦報 292 期的報導」可作為參考,取得同意轉載如下:


謝謝iThome及其所屬記者王宏仁先生。有趣的是,原先我們並未邀請任何媒體。:)

另外,「首次」這樣的帽子有些沉重,頂多只能說是小小地在「跨社群」(也未必啦)上拋磚引玉罷了。最重要的是謝謝所有與會者的付出。m(_ _)m

Taiwan Hackathon - iThome News, No. 292

跑新聞出雜誌總是很辛苦的,還請有興趣看內文的人花點小錢到書店買一本囉!



週二下午跟iThome的編輯小談片刻,看來他們的報導很用心,雖然版面不大,但基本意思都點到了,或許待日後OrzLab有更多成果時,也來分享一些經驗與想法。