當一個x86嵌入式系統增加了使用者的輸入輸出介面後,其實就像一台簡易型的PC系統。本文系統是以x86 SOC為發展平台,但由於使用RedBoot Loader去啟動系統,因此仍保有嵌入式系統的特性,且又因為有USB Host與PCI Bus可擴充,因此可以很輕易地只靠一些設定,即可讓一個Linux系統執行得像PC系統一樣。
檔案系統的起承轉合
基本上,嵌入式Linux核心若有一個根目錄檔案系統可掛載,則Linux整個系統即可正常運作。但這個根目錄檔案系統若是使用Ramdisk的方式,亦即利用SPI-Flash裡面所儲存的initrd.gz這一映像檔來掛載,則檔案系統通常不大。以本系統為例,Ramdisk最多可擴充到4~5 MBytes左右,而以這種容量大小是絕對不敷使用的。因此本系統的做法是把Ramdisk精簡化,只保留掛載USB隨身碟的功能。當檔案系統轉換到USB隨身碟後,檔案系統即可依實際需要任意擴充。其掛載過程請參考圖6所示。
圖6:Ramdisk轉換到USB隨身碟的過程
目前Ramdisk是使用Ext2檔案系統,大小約為300 KBytes,其最主要的檔案是放在/sbin這一目錄裡面的init。在前篇文章提過,init將會是整個Linux系統的第一個行程(Process),但由於我們主要的檔案系統會由USB隨身碟裡面的rimg這一映像檔來擔任,因此init會先改寫成Script file的形式,待整個檔案系統移轉到USB隨身碟裡的rimg後,再執行真正的init去開啟第一個行程。
rimg的製作方式
rimg其實是root filesystem image的簡要縮寫,前面講述了從Linux核心一路轉換到rimg的過程。而若要使用rimg這一檔案系統映像檔,則我們必須另外在PC系統製作出來後,才能放入USB隨身碟,並交由系統掛載。下面的指令是在Linux Fedora 4的PC系統上執行,製作出來的rimg將會是空的,就像是一個256 MBytes的儲存系統剛做完格式化一樣。
在完成上述兩項指令後,系統將出現一個256 Mbytes的檔案,檔名為rimg。但此時的rimg並不只是一個檔案,而是已經成為Ext3檔案系統的映像檔了。因此我們必須將此映像檔展開,並且把系統真正的內容放到rimg裡面。由於本系統使用的是x86相容的CPU,因此檔案系統的內容可以很輕易地由PC系統複製過來使用,而不需經過程式移植以及重新編譯等過程。目前Linux Live-CD非常盛行,因此把Live-CD裡已製作好的內容搬移至rimg裡面,將是一種非常方便的選擇。下面的指令是以某Linux Live-CD的內容為一範例,說明如何將已製作好的內容複製到rimg裡。
X-Window的啟動流程
當rimg掛載完成並且開始執行init後,init將會開始一連串系統的初始化工作。首先它會去參考/etc/inittab這一檔案的設定,並且依照設定的內容去執行一個稱為rc.sysinit的script file。
X-Server主要是負責鍵盤和滑鼠的偵測,也就是當使用者移動滑鼠或透過鍵盤輸入字元時,X-Server將負責接收這些資訊,並傳送到X-Client端。另外X-Server也負責接收由X-Client送過來的畫面,並且透過VGA卡顯示到使用者的螢幕。本文系統所使用的X-Server是使用xorg的程式庫和執行檔,它們皆放在/usr/X11R6這一目錄裡,其中/usr/X11R6/bin/X這一連結檔已指向xorg。通常VGA顯示卡可用VESA模式顯示,但若有原廠的驅動程式,則顯示的效能應該可以更加提升。由於本文系統的VGA顯示卡是使用XGI-Z9,其驅動程式放在/usr/X11R6/lib/modules/drivers這一目錄裡,檔名為xgiz_drv.o。
X-Client其實就是一些應用程式,而會放到/root/.xinitrc裡去執行的,通常是負責啟動X-Window的部分。例如設定桌面背景圖檔、啟動Window Manager等等。本文系統所使用的是一個輕量級的Window Manager,名稱為IceWM。關於IceWM的套件安裝,請參考IceWM的網站。為了簡化說明X-Client,我們把啟動流程簡化如下所示。透過xinit啟動X-Server和X-Client之後,Linux系統將會出現一個X-Window的桌面環境。
系統桌面展示
嵌入式系統通常在開發板上都有固定的Flash、SDRAM以及幾個特定的週邊IC所組成。而本文系統試圖跳脫原本的限制,利用目前市面上最經濟實用的USB隨身碟來大幅擴充儲存系統,以及增加PCI的VGA顯示卡來讓使用者有一個LCD螢幕可使用。在USB隨身碟的使用上,主要是在檔案系統的轉換過程;而VGA顯示卡的使用,則著重在X-Window的幾個啟動流程。當檔案系統順利移轉到USB隨身碟,並且利用VGA的驅動程式順利讓X-Window啟動後,一台低價電腦的雛型即可出現。剩餘的工作即是充實檔案系統裡的應用程式,使整各系統的應用更加豐富。圖8是本系統的X-Window使用者桌面,圖9則是執行網路瀏纜器的畫面。
結語
當一個x86嵌入式系統增加了使用者的輸入輸出介面後,其實就像一台簡易型的PC系統。本文系統是以x86 SOC為發展平台,但由於使用RedBoot Loader去啟動系統,因此仍保有嵌入式系統的特性,且又因為有USB Host與PCI Bus可擴充,因此可以很輕易地只靠一些設定,即可讓一個Linux系統執行得像PC系統一樣。Linux低價電腦其實只是眾多應用之一,基於這樣的Linux系統的應用,其實充滿各種可能性。例如互動式資訊系統(KIOSK)、Thin-Client、電腦運算分享器、遠端連線POS機、餐廳點菜機、廣告機、上網機以及CAI兒童教育電腦......等,都是極具發展潛力的領域。x86 SOC有著低功耗與低成本等優勢,而目前其整合度與運算效能仍持續提升當中,相信以x86 SOC為主的新應用將不斷地推陳出新。使用者也許感受不到產品正在使用什麼CPU,但以x86 SOC為主的嵌入式系統,正逐漸進入我們的生活之中。