顯示具有 emulation 標籤的文章。 顯示所有文章
顯示具有 emulation 標籤的文章。 顯示所有文章

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將gcin在OLPC上的成果作成LiveCD的映像檔,並設定好網路等相關部分。而PCMan X開發團隊的字型好手olv ,則是解決OLPC上PCMan 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的畫面了

2007年6月20日 星期三

OLPC Hack Meet-Up Day

Mat稍早寫了「PCManX on OLPC」一文,提到他最近對OLPC所作的修改,並試圖移植知名的BBS連線程式PCManX到該平台上,不過礙於OLPC底層未能提供足夠的基礎建設,所以Mat發起一個活動「OLPCHackMeetUp」,邀請更多同好齊聚hacking。以下引述介紹文字:

== 活動宗旨 ==
國際知名的OLPC(One Latop Per Child,百元電腦)計劃正在進行,硬體製造的業務也由國內的廣達代工。然而國內社群對OLPC相關的知識並不多,軟體方面也參與的很少。 因此希望能藉著發起這個活動,引介自由軟體愛好者實際參與OLPC的軟體開發,同時能互相交流軟體開發的經驗和心得,並以開放的方式回饋給OLPC計劃與自由軟體社群。

== 活動目標 ==
在目標的選定上,我們希望能以一個近程目標來秀出我們的特有的特色軟體。於是我們選定開放的BBS軟體PCManX作為目標,同時也希望能在實作過程中,找出OLPC的中文支援的方法:

  • 將PCManX放進OLPC環境執行,並調整成符合Sugar (OLPC的外觀風格) 的應用程式風格
  • 實作glibc locale + Fontconfig data + TTF + SCIM以提供中文顯示、輸入環境

時間預定於June 28, 2007 (四),晚間19:00~22:00舉辦,歡迎參與OrzLab的討論「OLPC Hack Meet-Up Day」。至少有以下議題需要思考:

  • 輸入法的型態:傳統的GTK+ IM module或Ajax web IM
  • OLPC的軟體開發方式與模擬器的整合
  • 底層i18/L10n基礎建設

期待您的參與及指教!

2007年6月18日 星期一

PCManX on OLPC

感謝jollen前輩的幫忙,讓我有進一步接觸OLPC(傳說中的百元電腦)的機會。

去年年底時就聽了好幾次OLPC的新聞,能真的用到實品,興奮之情真是難以言喻。期待歸期待,真實世界的OLPC用起來感覺倒還不是很順暢。可能是裡頭的軟體版本還沒跟到最新版,或是還不夠成熟,沒有完全發揮硬體完全的效能的原因吧。

想要更新到最新的版本,然而手邊又沒有工具也是沒輒。幸好,拜模擬器之賜,軟體的開發不再死死侷限在硬體上。

OLPC的組織已經有提供好相關的軟體模擬環境和開發工具,讓參與者即使沒有機器也能進行軟體測試與開發的工作。其相關的聯結如下:

幸運的是,OLPC的本質就是Linux系統,只有表面的介面看起來不太一樣,其他的系統設定跟程式環境都一樣。只要拿到OLPC裡的super-user,理論上幾乎可以作到任何在Linux上的事。
「理論上?!」
我們總是需要作一些嘗試來堅定我們的信念。
BBS可說是咱在地特有的文化,適逢(Open-) PCMan於日前釋出2007的最新版本。何不移稙一個BBS軟體到OLPC上呢?經過幾天的嘗試,終於有了初步的成果如下:

2007年6月16日 星期六

kboot初探與模擬驗證

kboot本質上是個小型Linux作業系統,但功能卻是個boot loader,何解?kboot本身提供簡單的系統工具,支援檔案與網路操作,可自外界取得kernel image或其他檔案,進而kboot利用了kexec的機制,讓Linux kernel可快速重新啟動,於是具備boot loader的功能。

kexec是一組新的系統呼叫,包含在2.6 kernel中 (視支援架構而定),搭配其user-space的工具kexec-tools,則可在既有的Linux kernel (支援kexec系統呼叫) 中載入其他的kernel (不需要有kexec支援),並給予必要之參數或檔案,如kernel command line與initrd等,這方面的資訊可參考以下文章:

目前,kexec的硬體支援不限定x86,包含ARM與PPC都已有patch現身。那麼,如此的機制到底有什麼價值呢?以往的boot程序是很單純,清一色就是boot loader載入kernel,然後跳到user-mode或者是特定的工作,但現在的系統設計往往不是單一硬體、單一架構就可勝任的,諸如RAID或高負載的備援系統設計,都需要相當繁複的規劃,很顯然就非普通的boot loader可以應付,也很難修改Etherboot去圓滿符合需求,這時候,我們聯想到Linux,搭配到上述的kexec,不就是最美妙的boot loader嗎?在載入新的kernel之前,我們可作任何Linux能做的事情,像是載入firmware並進行設定、掛載NFS、掛載NTFS (透過Linux-NTFS)、... 等等,只要能提供新kernel給kexec-tools工具作載入,最後再透過kexec系統呼叫,就可完成這個「功能強大的boot loader」的終極任務。

kboot就是這樣的概念驗證實做品,使用的情境相當多元。舉例來說,kboot想進行遠端開機 (Diskless),但只有Wireless LAN或3G network可用,這時候就掛載對應的kernel module (包附在kboot中),然後透過user-space的應用程式進行設定,等待連線建立並確保檔案擷取成功,接著就在裝置上執行自遠端取得核心。另一種情境也很有趣,以往Linux distribution都得作通用性與最佳化的妥協,前者往往得將系統劃分諸多核心模組與大量的設定程式,後者往往得針對硬體作多次嘗試,那麼,透過kboot可先啟動generic kernel,然後進行硬體偵測,參考所需的硬體與最佳化組態,重新編譯核心,最後將該核心載入,而這個過程可透過一些設計得當的效能評估工具,一次又一次的重複自動微調,有別於以往的boot loader。關於kboot的應用,可參考以下簡報:後者給予我們極大的想像空間,當我們在新的硬體進行核心與週邊移植時,的確可先把能運作的最低限度核心置入kboot,然後再從不同的開發分支取得新核心並啟動,而這些過程都是透明的,而且不需要燒錄到傳統儲存裝置中,只要資源允許,可在RAM中做到繁瑣的事情。

昨天做了一個小hack,將原本的kboot (Version 11) 進行調整,更動紀錄如下:
Enhancements:
. Provided qemu specific configurations for verifying kboot
. Enable Visibility for gcc-3.4 (symbol hidden)
. Perform size optimizations against user-space packages.
Upgraded:
. kernel - 2.6.21
. binutils - 2.17.50.0.16
. uClibc - 0.9.29
我們甚至不需要單獨的x86機器,就能測試kexec與kboot,只要有能夠運作Qemu的環境即可。首先,取得OrzLab修改的版本:kboot-11-orzlab.tar.bz2,解開後直接打 "make" 就會建構整個系統,包含下載必要的套件、工具,以及編譯與安裝等。搭載於kboot的Linux kernel是精簡的版本,只提供TCP/IP stack、procfs、initrd/initramfs、ne2k NIC driver、VESA VGA framebuffer console等,但足以讓我們作許多應用。

Qemu提供DHCP與TFTP server的模擬,完全省下我們佈署的難度,所以在模擬環境中,所需的操作甚至大幅少於實體。筆者提供了簡單的script名為 "qemu-launcher.sh",直接執行即可,kboot啟動後的畫面如下:
依據Qemu的操作文件,預設透過模擬的DHCP server取得的IP是10.0.2.15,而server自己則是10.0.2.2,上面的畫面展示kboot已經載入一個小型的Linux kernel並出現提示訊息,等待命令操作,我們可打一些指令如下:
看到kernel version 2.6.21與ping連線的狀況,除此之外,還有ssh/sshd可用,所以大可連線到某台server,重新編譯核心程式碼,然後放到某個網路伺服器上。接著我們就要來驗證kexec/kboot的功能。Qemu內建的TFTP server相當好用,直接對應於host上的目錄架構,而就Debian/Ubuntu來說,host的核心會在根目錄建立symbolic link,而vmlinuz與initrd.img就指向目前運作的核心與initrd。

於是,我們在模擬的環境只要下簡單的一行指令即可載入並重新啟動: (鍵入粗體字部份)
kboot: tftp://10.0.2.2/vmlinuz
然後我們會看到 "Start Kernel" 的字樣跳過,然後我們就在Qemu的模擬環境看到啟動目前host上的核心:
因為在之前提供的qemu啟動script中省略root file system的指派,所以會停在kernel panic的畫面,不過這也達到我們的目的,驗證kexec/kboot,有了這個便利的模擬測試環境,未來也可作不同的變化。

2007年5月30日 星期三

GSM modem裝置模擬

系統模擬對於嵌入式系統開發來說,是相當重要的里程,不僅晶片層面如此,對於週邊來說,更可對應用程式開發帶來立即的效益,現在,OpenMoko-emulator也提供虛擬GSM modem的模擬。首先,依據之前的文章「透過USB連線與OpenMoko模擬裝置互動」,建立虛擬USB network連線,並透過ssh連線到虛擬硬體中,接下來就可以進行GSM modem的操作,畫面如下:(粗體字是打入的指令)

$ ssh root@192.168.0.202
root@192.168.0.202's password:
root@fic-gta01:~$ libgsmd-tool -m shell
libgsm-tool - (C) 2006 by Harald Welte
This program is Free Software and has ABSOLUTELY NO WARRANTY

O
# # Power-On
R
# Register
也可以不透過OpenMoko的工具,直接下AT command:(粗體字是打入的指令)
root@fic-gta01:~$ /etc/init.d/gsmd stop
Shutting down gsmd: Terminated
root@fic-gta01:~$ echo 1 >/sys/bus/platform/devices/gta01-pm-gsm.0/power_on
root@fic-gta01:~$ cu -E @ -l /dev/ttySAC0
Connected.

ATE1
OK
詳情可參考Marcin Juszkiewicz的文章 "How to check does GSM modem works",但對於openmoko-emulator也適用,甚至我們還可以模擬出各種不同的反應,卻不需要任何實體環境介入,這是相當有意思的手機軟體開發方式。

2007年4月16日 星期一

OpenMoko/Neo1973硬體模擬::Win32平台

紀錄「OpenMoko/Neo1973硬體模擬」後,收到許多迴響,cclien兄還因此徹夜未眠、提交patch,Jollen兄也寫了一篇「qemu-neo1973 / openmoko-emulator / jk2410-emulator」,分享Jollen-Pro Kit! (based on S3C2410)的硬體模擬,而前幾天則在通信論壇看到更紗的post「openmoko on winxp」,讓我也對Win32的移植感興趣。趁OSDC.tw結束的空檔,也來改看看,似乎沒遇到什麼問題,於是打包一個執行檔: openmoko-emulator-win32-bin-20070416.zip
已將昨天建構的u-boot、Linux kernel,以及rootfs等image置入,以下是執行畫面:
基本上解開Zip壓縮檔案後,直接跑qemu-system-arm.exe即可,模擬器外觀的支援還沒整合進去,但仍可從附帶的command window看到LCD Panel與GSM的資訊,同樣是按Enter鍵切換選單項目,Space鍵選擇。

附帶一提,OpenMoko/Neo1973的模擬器UI與GNU gdb整合的程式碼我已經作一段落,但現在遇到個非技術議題,因為該裝置是狹長型,而LCD Panel (VGA解析度)下上方都有頗大的空間,所以一旦模擬器的外觀載入後,就會超過螢幕解析度,勢必得作些裝置外觀的調整,所以可能需要美工專長的朋友協助。

2007年4月5日 星期四

OpenMoko/Neo1973硬體模擬

上個月底有幸能與OpenMoko團隊互動,做了簡要的紀錄「遇上OpenMoko」,雖然語焉不詳,但心中的感動實在是很難一語道盡的。週二去竹科替某單位進行教育訓練後,技術交流的過程讓我有種感觸,為數眾多的開發工具往往給予我們頗大的挫折感,就如以前聽過的一句話:「現代人的問題不在於沒有工具、缺乏資源,相反地,資源五花八門、工具也多到令人無所適從」,我想,針對嵌入式系統開發與整合的OrzLab,應該提出一些解決方案,就如之前提過的「視覺化系統模擬與偵錯」一般,我們可善用既有的工具,進一步延伸為更直覺且多元的開發模式。

之前主要在PXA27x的硬體平台進行開發,最近則因為Jollen兄提供其最新的「Jollen-Kit! 開發板」與OpenMoko/FIC提供「Neo1973 Hardware」,讓我對這兩款同是S3C2410為基礎的平台有高度興趣。除了「Intel/Marvell PXA27x的系統模擬」外,Neo1973 (目前硬體為GTA01) 的硬體模擬也進行中,openmoko採用的bootloader是U-Boot,wiki的 "Bootloader" 做了很詳盡的解說,系統模擬器的畫面如下:

U-Boot允許自訂選單,在我們這個以qemu為基礎的模擬器中,選單項目可按下Enter鍵作切換,當按下Space鍵時就執行指令,當然,還等什麼,咱們就boot系統,模擬器的畫面如下:
熟悉的小企鵝就現身,當Linux走出PC,進入移動裝置如手機時,給予我們相當大的揮灑空間。OpenMoko的軟體架構採用X Window System,並使用OpenedHand維護的應用程式套件,以下是進行觸碰螢幕校正的模擬器畫面:
為了要符合觸碰螢幕的運作行為,這個以qemu為基礎的模擬器做了些許的修改,避免被grab,最後我們終於看到openmoko的軟體環境:
透過OpenEmbedded,我們可以快速建構整個system image,OpenMoko官方也有個build host,提供最新的image與ipkg feed。這個模擬環境暫時命名為 "openmoko-emulator",原始程式碼與相關資源可在此取得:http://mdk.linux.org.tw/~jserv/openmoko/。以下是 "openmoko-emulator" 的README內容:

== Introduction ==

The package includes the modified qemu for emulating Neo1973 phone aka FIC GTA01 aka OpenMoko based on S3C2410A.

== Requirements ==

Software:
1. Linux distribution. Tested in Debian Sarge and Ubuntu 6.06/7.04
2. Packages: gcc-3.4, lynx, libsdl1.2-dev, python, perl


== Usage ==

After extracting the snapshot of this emulator, change to source directory. Then, perfom the following instructions:

(1) Build from source
# ./configure
# make
(2) Download OpenMoko images from nightly build
# ./openmoko/download.sh
(3) Install OpenMoko to NAND Flash
# ./openmoko/flash.sh
(4) Run the emulator
# ./openmoko/run.sh
週邊的部份,GSM modem與AGPS會紀錄其enable/disable狀態,其餘則算是堪用,這當然只是個起點。未來或許會比照「深入淺出Hello World」系列演講的模式,對這類在Embedded Linux開發過程中,引入硬體模擬器的突破,探討如何更深入掌握系統與加速開發流程,同時這也彰顯整合開發工具的需求,所以最近會繼續尋求合作的機會。

2007年3月15日 星期四

視覺化系統模擬與偵錯

稍早撰寫短文「透過 User-Mode-Linux 來學習核心設計」(Part I / Part II),隨後在「Intel/Marvell PXA27x的系統模擬」提出OrzLab所實做系統層面的模擬環境 (以qemu計畫的qemu-system-arm為基礎),暫定名稱為PXAemu,這些基礎建設對於嵌入式系統開發都有其價值,諸如system prototype、進階分析,以及快速軟體開發,未來我們會增加多種硬體平台的模擬。除了系統模擬器外,視覺化的呈現與偵錯能力也相當重要,在今年一月份,已經成功整合User-Mode Linux與Insight/GDB,大略的呈現如下圖:
當時開發的平台是IA32,引入User-Mode Linux的優點是可快速分析與平台無關的Linux kernel機制,諸如記憶體管理、排程,以及網路堆疊部份。另外,上週於台中一中舉辦的「深入淺出 Hello World 」系列演講第三場,已經公開展示PXAemu與gdb整合的操作,可相當便利的進行分析與偵錯,其運作畫面如下:
以上展示透過Remote GDB連線,設定中斷點於sys_execve函式,這將會觸發於首次由kernel-mode切入user-mode的時機,也就是/sbin/init程序執行之時,當然,gdb強大的命令與功能可以輔助來對kernel作更深入的追蹤,必要時也可改變其執行時期的行為,稍後我將會試著整合PXAemu與Insight/GDB。因為Insight/GDB內建的Tcl/Tk版本老舊,在Linux下對於字型處理不雅觀且不當的XIM處理也容易讓系統崩潰,所以我動手補強並加入Xft的支援,可自行取得patch。

除了以上透過既有軟體組合的視覺化環境外,我正在進行一個全新的項目,以Qt4作為GUI library (盡可能減少Win32與Linux平台移植的技術議題),為PXAemu開發frontend,也著手開發相容於GDB Machine Interface的GUI Debugger,如此一來,就可以輕易更換GNU Toolchain,即使是商業版本的MontaVista Consumer Electronics Edition (mvlcee) 也得以使用。

2007年3月9日 星期五

Intel/Marvell PXA27x的系統模擬

上一篇blog「PXA27x Linux計畫」提及在SourceForge.net建立名為PXA27x Linux的新專案,包含系統層面的模擬環境,現行實做以qemu計畫的qemu-system-arm為基礎,暫定此分支命名為PXAemu,主要的參考標的是市面上的PDA或者SmartPhone,當然也不排除開發中的硬體裝置,畢竟模擬環境的彈性較高,要作前期驗證或者針對特定需求的模擬分析 (如:能源變化、網路通訊的異常),都是可行的。剛剛已經將kernel patches置入SVN (/kernel/linux-2.6.20),以PXAemu作系統模擬的畫面如下:
很令人振奮的畫面,稍後會補上一個PXAemu專屬的frontend,並改善LCD controller的處理。對了,RT nanokernel for Embedded Linux也可用PXAemu來進行多項實驗,這也是近期進行的項目。