PDA設備的Linux配置及其編譯
引言
Linux是一個成熟又通用的操作系統(tǒng),可運行在多種硬件平臺上(如Intel、Power PC、Sparc、Alpha、ARM等)。它有一個小巧高效的內核,僅包含系統(tǒng)運行最必需的功能,而將可選的部分設計成內核模塊。系統(tǒng)啟動時,僅加載一個小的內核(0.5MB左右),當需要某些額外功能時,再臨時將相應的功能模塊插入內核,不使用時,立刻將其撤出,并釋放占用的資源。它的設備驅動程序、文件系統(tǒng)、網絡協(xié)議等均被設計成了內核模塊。
當前PDA產品的硬件配置與普通PC機相比有很大的不同。在PDA中只有一些小容量的按塊進行操作的閃存和小的液晶屏,處理器能力也較弱,沒有鍵盤和鼠標,導致其文件系統(tǒng)和應用程序的圖形用戶界面受到了很大限制。因此在PDA上選用小而高效內核的Linux作為其操作系統(tǒng)成為發(fā)展趨勢。
圖1 iPAQ中不同配置版本的關系圖
Linux在PAD上的版本及其配置
在大多數PDA中使用的是標準的Linux內核,本文將以Compaq iPAQ 36XX系列中所采用的Linux版本為例,說明iPAQ中Linux的配置,它是由Compaq Research Laboratories(CRL)開發(fā)的一種高端PDA設備,采用206MHz的Intel StrongARM RISC處理器和32MB的RAM,還有16MB的非易失性閃存,其顯示屏為320*240的液晶顯示屏,輸入設備為觸屏和一些按鍵,iPAQ還包括內置的揚聲器、耳機和麥克風插槽以及USB接口,還可根據需要購買PCMCIA和CF卡。
IPAQ有五種Linux配置(Debian、HandHelds.org、Familiar、PocketLinux、Microwindows),雖然這些配置版本表面上不同,但是核心都是由CRL的原始版本發(fā)展而來,圖1說明了這些版本之間的關系。
其中HandHelds.org是在Debian版本上發(fā)展而來,其它三個版本從HandHelds.org上發(fā)展而來。下面對后四個版本進行詳細介紹:
HandHelds.org
HandHelds.org是經Debian/GNU修改而得。它的0.21版本中包含有2.4版本的Linux內核以及command shell(bash)等用戶指令,同時移植了X11-server(Xfree86)和TWM窗口管理器來實現圖形的顯示,由于使用了Linux的幀緩存,因而可使用Xfebdev(X-server)來描述服務器。該版本中還含有觸屏的驅動程序以及一些示例性的軟件,如屏幕校準和適用于X的虛擬鍵盤,以及MP3播放器和簡單的瀏覽器。
HandHelds.org中的用戶界面是基于TWM窗口管理器的,它不適于小屏幕顯示,它的優(yōu)勢是網絡功能,該版本中提供了針對于朗訊公司的WLAN卡(Lucent Orinoco 802.11b)的內核模塊,可向用戶提供telnet、ftp和網絡文件系統(tǒng)等功能,同時還包括PCMCIA卡的軟件服務并支持熱拔插(需驅動程序),其不足之處在于它里面沒有如記事本、電話簿、日歷等相應軟件。從整體上看,HandHelds.org提供的版本比較適合于程序員用來開發(fā)自己在iPAQ上的軟件或是構建新版本。
該版本提供GCC工具,還免費向用戶提供帶有共享文件系統(tǒng)的StrongARM組件(由6塊芯片組成)。iPAQ的內核開發(fā)是完全公開的,任何人都可從網上下載到升級的內核代碼,目前代碼升級集中在電源管理的優(yōu)化和JFFS2(Jounaling Falsh Filesystem)的開發(fā)。
圖2 PocketLinux分層結構圖
圖3 Microwindows層次結構圖
Familiar
Familiar是基于HandHelds的版本,它的內核和X-server完全一樣,但是窗口管理器有所不同。Familiar的窗口管理器是為小型設備所設計,其中包括Agenda Applications等應用程序用來實現記事本、日歷等相應功能。Familiar版本中還實現了手寫識別功能,用戶可以在屏幕的任意位置上書寫。此外Familiar還有一個非官方版本可支持JFFS2文件系統(tǒng)。
PocketLinux
PocketLinux是由Transvirtual Technologies開發(fā)的基于HandHelds的版本,它實現了Java的編譯環(huán)境(Kaffe),該版本具有和X-server一樣的內核,但用戶界面是基于Kaffe上的Java編譯產生的。PocketLinux的分層結構圖如圖2所示。
PocketLinux中含有基于XML的模塊,可以快速創(chuàng)建UI和在PocketLinux程序之間交換信息。但是XML不太穩(wěn)定,而且速度很慢。
Microwindows
Microwindows是由Century Software開發(fā)的,含有Microwindows GUI環(huán)境和PIM(Personal Information Management)的版本。Century Software在開發(fā)中采用了自己的圖形工具集Microwindows來取代X-server,其目的在于使用更小的內存和功耗來實現圖形用戶界面。
MicroWindows采用分層結構設計方法,允許改變不同的層來適應實際應用,在底層提供對屏幕、鼠標觸摸屏和鍵盤的驅動,使程序能訪問實際的硬件設備和其它用戶定制設備;在中間層有一個可移植圖形引擎,提供繪制線條、區(qū)域填充、繪制多邊形、裁剪和使用顏色模式的方法;在頂層實現多種API以適應不同的應用環(huán)境。Microwindows可移植性非常好,可用 C 語言實現,只有某些關鍵部分要求用匯編語言以提高執(zhí)行速度,實現了兩個API函數,同時支持Win32和X11,可以方便的移植Windows或Unix/X11中的代碼。目前它使用兩種流行的圖形編程接口:Win32/WinCE圖形顯示接口(GDI)和Xlib-like接口。圖3所示為Microwindows的層次結構圖。
Nano-X組件可以為應用程序提供GUI服務,從某種意義上來說,它近似于X-server。Nano-X服務器大小約為210KB,在iPAQ上運行時需占用1MB的內存空間,而HandHelds使用的X-server(Xfbdev)大小約為870KB,運行時需占用3.5MB的RAM,相比之下Nano-X更為高效。但是Microwindows沒有X11結構中的窗口管理器,每個應用程序都需要自己來管理窗口。
Microwindows中還實現了有名的射擊游戲-Doom。此外在Microwindows中還包括一個瀏覽器-View-ML,可顯示標準的HTML頁面(3.2版本),但是不能運行Java-applets。
系統(tǒng)安裝
上述各種版本的安裝幾乎一樣。由于iPAQ的閃存中預裝了微軟的PocketPC,因此在安裝Linux之前要對其保存。首先將iPAQ連接到PC機,然后將PocketPC備份到PC機;第二步把Bootloader裝到閃存的開始頭,Bootloader和x86上的Lilo(Linux Loader)很類似,它可把閃存中的內核裝載到RAM中去,解壓后自動跳到內核源代碼頭,Bootloader還提供了寫閃存終端,這樣就可以更新內核及其配置版本的剩余部分;第三步使用Bootloader加載內核,加載后,其配置版本的剩余部分也被加載到閃存中;最后設置引導參數,整個系統(tǒng)就可被引導來裝載Linux。這里注意,配置版本的源碼是以CRAMFS文件的格式編寫的,該文件系統(tǒng)要被JFFS2所取代。
適于閃存的文件系統(tǒng)
PDA閃存通常使用以下三種文件系統(tǒng):CRAMFS、RAMFS、JFFS2,有時也用EXT2,不過其效果欠佳。
CRAMFS中的數據已被壓縮,屬于只讀性文件系統(tǒng),不能在閃存中修改。用戶想獲取數據時,CRAMFS先把數據送到RAM中,用戶從RAM中讀取。一般CRAMFS的上層為RAMFS文件系統(tǒng),經修改過的文件都保存在RAM中。圖4為文件系統(tǒng)的層次結構圖。
RAMFS和CRAMFS結合的缺陷在于,一旦出現掉電等特殊情況,保存在RAMFS中的修改數據將全部丟失。為此Linux采用了新的文件系統(tǒng)-JFFS2,它允許在閃存中直接進行修改,在掉電時會自動保存數據。JFFS2的數據壓縮方式和CRAMFS一樣,其數據可存放在全部的閃存區(qū)域中,數據的寫入和刪除分布在很大一片區(qū)域中以防止同樣的塊會被重復使用。
引導順序
iPAQ的引導順序和普通PC機有所不同。首先在iPAQ電源接通后,BIOS從閃存的某個特定位置載入啟動代碼,將Bootloader存入該區(qū)域并裝載。Bootloader將內核裝載到RAM中并解壓,然后跳至內核代碼的開頭,內核被初始化后將運行名為“l(fā)inuxrc” 的文件,根據這個文件中的內容運行其它初始化程序。
圖4 文件系統(tǒng)層次結構圖
PDA配置版本的編譯
目前臺式機上的Linux版本雖有數百種,但它們提供標準的Linux內核和操作系統(tǒng)的基本功能,不同之處一般表現在系統(tǒng)的安裝、管理和使用上,特別是文檔和用戶支持方面。但各品牌PDA之間卻差異很大,處理器通常采用ARM、MIPS、DragonBall等,處理器周圍還有許多互不兼容的設備。目前大多數PDA都是將操作系統(tǒng)存放在ROM中,更新操作系統(tǒng)與更新ROM芯片同步進行,而iPAQ等PDA在閃存中存儲操作系統(tǒng),直接寫入新的操作系統(tǒng)就可更改原系統(tǒng)。
iPAQ主板上的閃存為16MB,在配置版本時一定要考慮其大小不要超過閃存的容量,否則需加插PCMCIA/CF卡擴展內存。iPAQ使用的是經CRL修改過的Linux 2.4內核,大約0.5MB,除內核外,還有shell、文件系統(tǒng)、網絡等程序,這些內核模塊經靜態(tài)編譯后才可使用,否則需通過程序編譯庫來實現。
圖形用戶界面可有兩種實現方式,一般使用“Xfbdev”X11-server來實現,這樣可保證與X環(huán)境下應用程序兼容。X-server和窗口管理器組合在一起的缺點是使PDA負擔太重,因此可選擇Microwindows,缺點是與X不兼容。
從用戶角度,應用程序相當重要。如果采用X-server實現GUI,Familiar的Agenda對于PDA應用是極佳選擇;如果采用Microwindows實現GUI,則使用Century Software的PIM;此外還可選擇PocketLinux,它構建于java之上,適用于java程序的開發(fā)。
對于閃存文件系統(tǒng),CRAMFS如果沒有RAMFS的支持只具有只讀屬性,而JFFS2則可以直接在閃存中讀寫和刪除數據。采用JFFS2文件系統(tǒng)時,更新PDA的Linux配置版本是通過程序包管理來實現的;采用CRAMFS文件系統(tǒng)時,更新系統(tǒng)則需要在閃存中重新寫入全部新的CRAMFS文件系統(tǒng),這樣做不僅需要大量時間,而且對于用戶太難實現,從長遠角度來看,JFFS2比CRAMFS具有更強的競爭力。
結語
隨著PDA性能價格比的逐步提高和技術進步,其可適用范圍越來越廣泛,選擇一種適用它的操作系統(tǒng)極為必要。嵌入式Linux系統(tǒng)是嵌入式系統(tǒng)的寵兒,人們可通過網上免費下載到不同的內核版本和升級補丁,同時可免受源代碼知識產權的困擾,能夠在現有基礎上進行二次開發(fā),伴隨著嵌入式設備在人們工作和生活中的普及和發(fā)展,選擇嵌入式Linux系統(tǒng)也是一種必然趨勢。
參考文獻
1 Compaq,iPAQ Homepage
2 Flash Memory,Technical Design
3 Greg Haerr,Microwindows Architecture 1999
4 陳莉君.Linux 操作系統(tǒng)內核分析.人民郵電出版社
5 胡皓.X Window實物應用.人民郵電出版社
評論