嵌入式設(shè)備上的 Linux 系統(tǒng)開(kāi)發(fā)(三)
——
從用戶的觀點(diǎn)來(lái)看,圖形用戶界面(GUI)是系統(tǒng)的一個(gè)最至關(guān)重要的方面:用戶通過(guò) GUI 與系統(tǒng)進(jìn)行交互。所以 GUI 應(yīng)該易于使用并且非??煽?。但它還需要是有內(nèi)存意識(shí)的,以便在內(nèi)存受限的、微型嵌入式設(shè)備上可以無(wú)縫執(zhí)行。所以,它應(yīng)該是輕量級(jí)的,并且能夠快速裝入。
另一個(gè)要考慮的重要方面涉及許可證問(wèn)題。一些 GUI 分發(fā)版具有允許免費(fèi)使用的許可證,甚至在一些商業(yè)產(chǎn)品中也是如此。另一些許可證要求如果想將 GUI 合并入項(xiàng)目中則要支付版稅。
最后,大多數(shù)開(kāi)發(fā)人員可能會(huì)選擇 XFree86,因?yàn)?nbsp;XFree86 為他們提供了一個(gè)能使用他們喜歡的工具的熟悉環(huán)境。但是市場(chǎng)上較新的 GUI,象 Century Software 的 Microwindows(Nano-X)和 Trolltech 的 QT/Embedded,與 X 在嵌入式 Linux 的競(jìng)技舞臺(tái)中展開(kāi)了激烈競(jìng)爭(zhēng),這主要是因?yàn)樗鼈冋加煤苌俚馁Y源、執(zhí)行的速度很快并且具有定制窗口構(gòu)件的支持。
讓我們看一看這些選項(xiàng)中的每一個(gè)。
Xfree86 4.X(帶幀緩沖區(qū)支持的 X11R6.4)
XFree86 Project, Inc. 是一家生產(chǎn) XFree86 的公司,該產(chǎn)品是一個(gè)可以免費(fèi)重復(fù)分發(fā)、開(kāi)放源碼的 X Window 系統(tǒng)。X Window 系統(tǒng)(X11)為應(yīng)用程序以圖形方式進(jìn)行顯示提供了資源,并且它是 UNIX 和類(lèi) UNIX 的機(jī)器上最常用的窗口系統(tǒng)。它很小但很有效,它運(yùn)行在為數(shù)眾多的硬件上,它對(duì)網(wǎng)絡(luò)透明并且有良好的文檔說(shuō)明。X11 為窗口管理、事件處理、同步和客戶機(jī)間通信提供強(qiáng)大的功能 — 并且大多數(shù)開(kāi)發(fā)人員已經(jīng)熟悉了它的 API。它具有對(duì)內(nèi)核幀緩沖區(qū)的內(nèi)置支持,并占用非常少的資源 — 這非常有助于內(nèi)存相對(duì)較少的設(shè)備。X 服務(wù)器支持 VGA 和非 VGA 圖形卡,它對(duì)顏色深度 1、2、4、8、16 和 32 提供支持,并對(duì)渲染提供內(nèi)置支持。最新的發(fā)行版是 XFree86 4.1.0。
它的優(yōu)點(diǎn)包括:
幀緩沖區(qū)體系結(jié)構(gòu)的使用提高了性能。
占用的資源相對(duì)很小 — 大小在 600 K 到 700 K 字節(jié)的范圍內(nèi),這使它很容易在小型設(shè)備上運(yùn)行。
非常好的支持:在線有許多文檔可用,還有許多專(zhuān)用于 XFree86 開(kāi)發(fā)的郵遞列表。
X API 非常適合擴(kuò)展。
它的缺點(diǎn)包括:
比最近出現(xiàn)的嵌入式 GUI 工具性能差。
此外,當(dāng)與 GUI 中最新的開(kāi)發(fā) — 象專(zhuān)門(mén)為嵌入式環(huán)境設(shè)計(jì)的 Nano-X 或 QT/Embedded — 相比時(shí),XFree86 似乎需要更多的內(nèi)存。
Microwindows
Microwindows 是 Century Software 的開(kāi)放源代碼項(xiàng)目,設(shè)計(jì)用于帶小型顯示單元的微型設(shè)備。它有許多針對(duì)現(xiàn)代圖形視窗環(huán)境的功能部件。象 X 一樣,有多種平臺(tái)支持 Microwindows。
Microwindows 體系結(jié)構(gòu)是基于客戶機(jī)/服務(wù)器的并且具有分層設(shè)計(jì)。最底層是屏幕和輸入設(shè)備驅(qū)動(dòng)程序(關(guān)于鍵盤(pán)或鼠標(biāo))來(lái)與實(shí)際硬件交互。在中間層,可移植的圖形引擎提供對(duì)線的繪制、區(qū)域的填充、多邊形、裁剪以及顏色模型的支持。
在最上層,Microwindows 支持兩種 API:Win32/WinCE API 實(shí)現(xiàn),稱為 Microwindows;另一種 API 與 GDK 非常相似,它稱為 Nano-X。Nano-X 用在 Linux 上。它是象 X 的 API,用于占用資源少的應(yīng)用程序。
Microwindows 支持 1、2、4 和 8 bpp(每像素的位數(shù))的 palletized 顯示,以及 8、16、24 和 32 bpp 的真彩色顯示。Microwindows 還支持使它速度更快的幀緩沖區(qū)。Nano-X 服務(wù)器占用的資源大約在 100 K 到 150 K 字節(jié)。
原始 Nano-X 應(yīng)用程序的平均大小在 30 K 到 60 K。由于 Nano-X 是為有內(nèi)存限制的低端設(shè)備設(shè)計(jì)的,所以它不象 X 那樣支持很多函數(shù),因此它實(shí)際上不能作為微型 X(Xfree86 4.1)的替代品。
可以在 Microwindows 上運(yùn)行 FLNX,它是針對(duì) Nano-X 而不是 X 進(jìn)行修改的 FLTK(快速輕巧工具箱(Fast Light Toolkit))應(yīng)用程序開(kāi)發(fā)環(huán)境的一個(gè)版本。本文中描述 FLTK。
Nano-X 的優(yōu)點(diǎn)包括:
與 Xlib 實(shí)現(xiàn)不同,Nano-X 仍在每個(gè)客戶機(jī)上同步運(yùn)行,這意味著一旦發(fā)送了客戶機(jī)請(qǐng)求包,服務(wù)器在為另一個(gè)客戶機(jī)提供服務(wù)之前一直等待,直到整個(gè)包都到達(dá)為止。這使服務(wù)器代碼非常簡(jiǎn)單,而運(yùn)行的速度仍非???。
占用很小的資源
Nano-X 的缺點(diǎn)包括:
聯(lián)網(wǎng)功能部件至今沒(méi)有經(jīng)過(guò)適當(dāng)?shù)卣{(diào)整(特別是網(wǎng)絡(luò)透明性)。
還沒(méi)有太多現(xiàn)成的應(yīng)用程序可用。
與 X 相比,Nano-X 雖然近來(lái)正在加速開(kāi)發(fā),但仍沒(méi)有那么多文檔說(shuō)明而且沒(méi)有很好的支持,但這種情形會(huì)有所改變。
Microwindows 上的 FLTK API
FLTK 是一個(gè)簡(jiǎn)單但靈活的 GUI 工具箱,它在 Linux 世界中贏得越來(lái)越多的關(guān)注,它特別適用于占用資源很少的環(huán)境。它提供了您期望從 GUI 工具箱中獲得的大多數(shù)窗口構(gòu)件,如按鈕、對(duì)話框、文本框以及出色的“賦值器”選擇(用于輸入數(shù)值的窗口構(gòu)件)。還包括滑動(dòng)器、滾動(dòng)條、刻度盤(pán)和其它一些構(gòu)件。
針對(duì) Microwindows GUI 引擎的 FLTK 的 Linux 版本被稱為 FLNX。FLNX 由兩個(gè)組件構(gòu)成:Fl_Widget 和 FLUID。Fl_Widget 由所有基本窗口構(gòu)件 API 組成。FLUID(快速輕巧的用戶界面設(shè)計(jì)器(Fast Light User Interface Designer, FLUID))是用來(lái)產(chǎn)生 FLTK 源代碼的圖形編輯器??偟膩?lái)說(shuō),F(xiàn)LNX 是能用來(lái)為嵌入式環(huán)境創(chuàng)建應(yīng)用程序的一個(gè)出色的 UI 構(gòu)建器。
Fl_Widget 占用的資源大約是 40 K 到 48 K,而 FLUID(包括了每個(gè)窗口構(gòu)件)大約占用 380 K。這些非常小的資源占用率使 Fl_Widget 和 FLUID 在嵌入式開(kāi)發(fā)世界中非常受歡迎。
優(yōu)點(diǎn)包括:
習(xí)慣于在象 Windows 這樣已建立得較好的環(huán)境中開(kāi)發(fā)基于 GUI 的應(yīng)用程序的任何人都會(huì)非常容易地適應(yīng) FLTK 環(huán)境。
它的文檔包括一本十分完整且編寫(xiě)良好的手冊(cè)。
它使用 LGPL 進(jìn)行分發(fā),所以開(kāi)發(fā)人員可以靈活地發(fā)放他們應(yīng)用程序的許可證。
FLTK 是一個(gè) C++ 庫(kù)(Perl 和 Python 綁定也可用)。面向?qū)ο竽P偷倪x擇是一個(gè)好的選擇,因?yàn)榇蠖鄶?shù)現(xiàn)代 GUI 環(huán)境都是面向?qū)ο蟮?;這也使將編寫(xiě)的應(yīng)用程序移植到類(lèi)似的 API 中變得更容易。
Century Software 的環(huán)境提供了幾個(gè)有用的工具,諸如 ScreenToP 和 ViewML 瀏覽器。
它的缺點(diǎn)是:
普通的 FLTK 可以與 X 和 Windows API 一同工作,而 FLNX 不能。它與 X 的不兼容性阻礙了它在許多項(xiàng)目中的使用。
Qt/Embedded
Qt/Embedded 是 Trolltech 新開(kāi)發(fā)的用于嵌入式 Linux 的圖形用戶界面系統(tǒng)。Trolltech 最初創(chuàng)建 Qt 作為跨平臺(tái)的開(kāi)發(fā)工具用于 Linux 臺(tái)式機(jī)。它支持各種有 UNIX 特點(diǎn)的系統(tǒng)以及 Microsoft Windows。KDE — 最流行的 Linux 桌面環(huán)境之一,就是用 Qt 編寫(xiě)的。
Qt/Embedded 以原始 Qt 為基礎(chǔ),并做了許多出色的調(diào)整以適用于嵌入式環(huán)境。Qt Embedded 通過(guò) Qt API 與 Linux I/O 設(shè)施直接交互。那些熟悉并已適應(yīng)了面向?qū)ο缶幊痰娜藛T將發(fā)現(xiàn)它是一個(gè)理想環(huán)境。而且,面向?qū)ο蟮捏w系結(jié)構(gòu)使代碼結(jié)構(gòu)化、可重用并且運(yùn)行快速。與其它 GUI 相比,Qt GUI 非常快,并且它沒(méi)有分層,這使得 Qt/Embedded 成為用于運(yùn)行基于 Qt 的程序的最緊湊環(huán)境。
Trolltech 還推出了 Qt 掌上機(jī)環(huán)境(Qt Palmtop Environment,俗稱 Qpe)。Qpe 提供了一個(gè)基本桌面窗口,并且該環(huán)境為開(kāi)發(fā)提供了一個(gè)易于使用的界面。Qpe 包含全套的個(gè)人信息管理(Personal Information Management (PIM))應(yīng)用程序、因特網(wǎng)客戶機(jī)、實(shí)用程序等等。然而,為了將 Qt/Embedded 或 Qpe 集成到一個(gè)產(chǎn)品中,需要從 Trolltech 獲得商業(yè)許可證。(原始 Qt 自版本 2.2 以后就可以根據(jù) GPL 獲得 。)
它的優(yōu)點(diǎn)包括:
面向?qū)ο蟮捏w系結(jié)構(gòu)有助于更快地執(zhí)行
占用很少的資源,大約 800 K
抗鋸齒文本和混合視頻的象素映射
它的缺點(diǎn)是:
Qt/Embedded 和 Qpe 只能在獲得商業(yè)許可證的情況下才能使用。
結(jié)束語(yǔ)
嵌入式 Linux 開(kāi)發(fā)正迅速地發(fā)展著。您必須學(xué)習(xí)并從引導(dǎo)裝載程序和分發(fā)版到文件系統(tǒng)和 GUI 中的每一個(gè)事物的各種選項(xiàng)中作出選擇。但是要感謝有這種選擇自由度以及非?;钴S的 Linux 社區(qū),Linux 上的嵌入式開(kāi)發(fā)已經(jīng)達(dá)到了新的境界,并且調(diào)整模塊以適合您的規(guī)范從未比現(xiàn)在更簡(jiǎn)單。這已經(jīng)導(dǎo)致出現(xiàn)了許多時(shí)新的手持和微型設(shè)備作為開(kāi)放盒,這是件好事 — 因?yàn)槭聦?shí)是您不必成為一個(gè)專(zhuān)家從這些模塊中進(jìn)行選擇來(lái)調(diào)整您的設(shè)備以滿足您自己的要求和需要。
我們希望這篇對(duì)嵌入式 Linux 領(lǐng)域的介紹性概述能激起您進(jìn)行試驗(yàn)的欲望,并且希望您將體會(huì)擺弄微型設(shè)備的樂(lè)趣以滿足您的愛(ài)好。為進(jìn)一步有助于您的項(xiàng)目,請(qǐng)參閱下面的“參考資料”,鏈接到有關(guān)我們這里已經(jīng)概述的技術(shù)的更深入的信息。
參考資料
引導(dǎo):
如需獲得對(duì) vmlinux 和 zimage 之間區(qū)別的極好解釋?zhuān)?qǐng)?jiān)?nbsp;Alessandro Rubini 編寫(xiě)的“Kernel Configuration: dealing with the unexpected(Linux Magazine)的一文中找到“Booting your kernel”一節(jié)。
有關(guān)內(nèi)核、映像和引導(dǎo)過(guò)程的更多信息,請(qǐng)閱讀中央昆士蘭大學(xué)(Central Queensland University)的系統(tǒng)管理文本的第 13 章。
要進(jìn)一步了解引導(dǎo)過(guò)程的工作原理,請(qǐng)參閱 ROLO: A Developer’s Guide,它討論了在不利用 BIOS 的情況下引導(dǎo) Linux(Embedded Linux Works,2001 年 6 月)。
小型分發(fā)版:
The Embedded Linux Distributions Quick Reference Guide 涵蓋了許多商業(yè)的和開(kāi)放源碼的分發(fā)版(Linux Devices,2001 年 8 月)。
請(qǐng)查看另一個(gè)詳盡的分發(fā)版和有用的工具的清單(Linux-embedded.com)。
工具鏈:
Wiki 工具鏈頁(yè)面包含到本文提到的所有三個(gè)工具鏈的鏈接,還有對(duì)它們的評(píng)論。
設(shè)備驅(qū)動(dòng)程序:
Memory Technology Device (MTD) Subsystem for Linux 的目的是簡(jiǎn)化內(nèi)存設(shè)備(特別是閃存設(shè)備)的驅(qū)動(dòng)程序的創(chuàng)建。
Vipin Malik 編寫(xiě)的 The Linux MTD, JFFS HOWTO 將幫助您使 MTD 和 JFFS2 一起工作。
Linux for PowerPC Embedded Systems HOWTO 有一個(gè)很好的設(shè)備驅(qū)動(dòng)程序清單。
理解 Linux device drivers 有助于理解本篇介紹性文章(Penguin Magazine)。
要精通 Linux 設(shè)備驅(qū)動(dòng)程序,請(qǐng)閱讀 O’Reilly 的 Linux Device Drivers,第 2 版一書(shū)。
有用的工具:
請(qǐng)查看 LART 上的 Jflash-linux。
Binutils、GCC 和 Glibc 都可從 Free Software Foundation 下載獲得。
許多有用的下載都可從 Netwinder.org 獲得,這是一個(gè)致力于 NetWinder 平臺(tái)上開(kāi)發(fā)工作的志愿者站點(diǎn)。
請(qǐng)?jiān)?nbsp;Mark Nielsen 寫(xiě)得非常棒的 How to use a Ramdisk for Linux 一文中閱讀有關(guān) Ramdisk 的所有信息。
FLNX 是以 FLTK(快速輕巧的工具箱)為基礎(chǔ)的。
文件系統(tǒng):
第二版擴(kuò)展文件系統(tǒng) Ext2fs 的主頁(yè)在 SourceForge。
Red Hat 英國(guó)公司的 David Woodhouse 概述了大量有關(guān) JFFS2:日志閃存文件系統(tǒng),第 2 版的背景知識(shí)。
Vipin Malik 的 JFFS - A practical guide 一文也詳細(xì)討論了 JFFS,包括垃圾收集的問(wèn)題(Embedded Linux Works,2001 年 5 月)。
您可以在 Linux HeadQuarters 閱讀更多有關(guān) tmpfs 的信息。
Cliff Brake 和 Jeff Sutherland 編寫(xiě)的 Flash Filesystems for Embedded Linux Systems 一文論述了用于閃存設(shè)備的更多文件系統(tǒng)(Embedded Linux Journal)。
GUI:
Xfree86 是 X 開(kāi)發(fā)的主頁(yè)。
在 Microwindows 站點(diǎn)上可以找到有關(guān) Microwindows 和 Nano-X 的信息。
請(qǐng)查看一篇對(duì) Microwindows 的一些缺點(diǎn)(GNOME gtk 開(kāi)發(fā)人員的郵遞列表)的討論(時(shí)間比較長(zhǎng)了)。
您將在 Microwindows Project Links 上找到豐富的 Microwindows/Nano-X 鏈接。
在 Trolltech 上查找有關(guān) Qt/Embedded 的更多信息。
The Embedded Linux GUI/Windowing Quick Reference Guide 中有豐富的鏈接(Linux Devices,2002 年 2 月)。
一般參考資料:
General Public License 或 GPL 確保用戶復(fù)制、分發(fā)和修改軟件的權(quán)利。
ARM Linux 是您了解有關(guān) Linux 用于 ARM 處理器的信息的一個(gè)非常好的站點(diǎn)。它由 ARM 的創(chuàng)建者 Russell King 來(lái)維護(hù)。
Penguinppc.org 是關(guān)于 Linux 用于 PowerPC 系列處理器的的主頁(yè)。該站點(diǎn)上有一個(gè)關(guān)于為基于 PPC 的體系結(jié)構(gòu)建立工具鏈的資料豐富的教程。
Linux Devices 是一個(gè)非常全面的站點(diǎn),它包含有關(guān) Linux 和嵌入式開(kāi)發(fā)的出版發(fā)行、快速參考、新聞和特色報(bào)告等各種信息。
Silicon Penguin 列表站點(diǎn)上擁有嵌入式 Linux 參考資料的詳盡集合。
ARMLinux - the book 可從 Aleph One 上獲得。您可以定購(gòu)一本,也可以在線閱讀。
嵌入式 Linux 協(xié)會(huì)(Embedded Linux Consortium)是一個(gè)非贏利的互助協(xié)會(huì),它歡迎致力于嵌入式 Linux 領(lǐng)域的開(kāi)發(fā)人員成為會(huì)員。
訪問(wèn) IBM 關(guān)于嵌入式 Linux 的主頁(yè),獲得新聞、產(chǎn)品和開(kāi)發(fā)人員參考資料。
IBM 的 Linux wristwatch 是運(yùn)行 Linux 的微型嵌入式設(shè)備的示例;本文的作者之一,Vishal Kulkarni 也參與了它的研發(fā)。請(qǐng)?jiān)?nbsp;IBM’s Linux Watch: The Challenge of Miniaturization(PDF 格式),或本文(FreeOS.com,2001 年 3 月)中閱讀有關(guān)它的信息。
在 developerWorks 上瀏覽更多 Linux 參考資料。
在 developerWorks 上瀏覽更多無(wú)線領(lǐng)域的參考資料。
評(píng)論