嵌入式Linux系統的設計與應用
——
關(guān)鍵詞:嵌入式Linux
一、引言
嵌入式系統(Embedded Systems)是根據應用的要求,將操作系統和功能軟件集成于計算機硬件系統之中,從而實(shí)現軟件與硬件一體化的計算機系統。嵌入式系統出現于60年代晚期,它最初被用于控制機電電話(huà)交換機,如今已被廣泛的應用于工業(yè)制造、過(guò)程控制、通訊、儀器、儀表、汽車(chē)、船舶、航空、航天、軍事裝備、消費類(lèi)產(chǎn)品等眾多領(lǐng)域。嵌入式系統在數量上遠遠超過(guò)了各種通用計算機系統:計算機系統核心CPU,每年在全球范圍內的產(chǎn)量大概在二十億顆左右,其中超過(guò)80%應用于各類(lèi)專(zhuān)用性很強的嵌入式系統。
一般的說(shuō),凡是帶有微處理器的專(zhuān)用軟硬件系統都可以稱(chēng)為嵌入式系統。和通用的計算平臺相比,嵌入式系統往往具有功能單一、體積小、功耗低、可靠性高、剪裁性好、軟硬件集成度高、計算能力相對較低等特點(diǎn)。多年來(lái),嵌入式設備中沒(méi)有操作系統,其主要原因有二:首先,諸如洗衣機、微波爐、電冰箱這樣的設備僅僅需要一道簡(jiǎn)單的控制程序,以管理數量有限的按鈕和指示燈,沒(méi)有使用操作系統的必要;其次,它往往只具有有限的硬件資源,不足以支持一個(gè)操作系統。
然而,隨著(zhù)硬件的發(fā)展,嵌入式系統變得越來(lái)越復雜,最初的控制程序中逐步的加入了許多功能,而這些功能中有很多可以由操作系統提供。于是,在70年代末期出現了嵌入式操作系統(Embedded Operating Systems),它的出現大大簡(jiǎn)化了應用程序設計,并可以有效的保障軟件質(zhì)量和縮短開(kāi)發(fā)周期。簡(jiǎn)單的ES一般并不使用操作系統,只包含一些控制流程,但是隨著(zhù)嵌入式操作系統在復雜性上的增長(cháng),簡(jiǎn)單的流程控制就不能滿(mǎn)足系統的要求,這是就必須考慮使用操作系統做系統軟件。因此,嵌入式操作系統就應運而生。
隨著(zhù)EOS的廣泛應用,業(yè)界已推出一些應用比較成功的EOS產(chǎn)品。歸納起來(lái)EOS應該具有以下幾個(gè)特點(diǎn):小巧、實(shí)時(shí)性、可裝卸、固化代碼、弱交互性、強穩定性和統一的接口。目前使用最多的EOS產(chǎn)品包括有:Vxwork、QNX、PalmOS、WindowsCE、pSOS、Hopen OS(國內凱思集團公司自主研制開(kāi)發(fā))等。其中,Vxwork使用最為廣泛、市場(chǎng)占有率最高,其突出特點(diǎn)是實(shí)時(shí)性強(采用優(yōu)先級搶占和輪轉調度等機制),除此之外,其可靠性和可剪裁性也相當不錯。QNX是一種伸縮性極佳的系統,其核心加上實(shí)時(shí)POSIX環(huán)境和一個(gè)完整的窗口系統還不到一兆。相比之下,Microsoft WinCE的核心體積龐大,實(shí)時(shí)性能也差強人意,但由于Windows系列友好的用戶(hù)界面和為程序員所熟悉的API,并捆綁IE、Office等應用程序,正逐漸獲得更大的市場(chǎng)份額。而與這些商業(yè)化的操作系統相比,Linux已經(jīng)越來(lái)越受到人們的注意。
二、嵌入式Linux概述
Linux是一個(gè)成熟而穩定的網(wǎng)絡(luò )操作系統。將Linux植入嵌入式設備具有眾多的優(yōu)點(diǎn)。首先,Linux的源代碼是開(kāi)放的,任何人都可以獲取并修改,用之開(kāi)發(fā)自己的產(chǎn)品。其次,Lirmx是可以定制的,其系統內核最小只有約134kB。一個(gè)帶有中文系統和圖形用戶(hù)界面的核心程序也可以做到不足1MB,并且同樣穩定。另外,它和多數Unix系統兼容,應用程序的開(kāi)發(fā)和移植相當容易。同時(shí),由于具有良好的可移植性,人們已成功使Linux運行于數百種硬件平臺之上。
然而,Linux并非專(zhuān)門(mén)為實(shí)時(shí)性應用而設計,因此如果想在對實(shí)時(shí)性要求較高的嵌入式系統中運行Linux,就必須為之添加實(shí)時(shí)軟件模塊。這些模塊運行的內核空間正是操作系統實(shí)現進(jìn)程調度、中斷處理和程序執行的部分,因此錯誤的代碼可能會(huì )破壞操作系統,進(jìn)而影響整個(gè)系統的可靠性和穩定性。Linux的眾多優(yōu)點(diǎn)還是使它在嵌入式領(lǐng)域獲得了廣泛的應用,并出現了數量可觀(guān)的嵌入式Linux系統。其中有代表性的包括:uClinux、ETLinux、ThinLinux、LOAF等。ETLinux通常用于在小型工業(yè)計算機,尤其是PC/104模塊。ThinLinux面向專(zhuān)用的照相機服務(wù)器、X-10控制器、MP3播放器和其它類(lèi)似的嵌入式應用。LOAF是Linux On A Floppy的縮略語(yǔ),它運行在386平臺上。
三、Linux作為嵌入式操作系統的優(yōu)勢
Linux作為嵌入式操作系統的優(yōu)勢主要有以下幾點(diǎn):
1、 可應用于多種硬件平臺。Linux已經(jīng)被移植到多種硬件平臺,這對于經(jīng)費,時(shí)間受限制的研究與開(kāi)發(fā)項目是很有吸引力的。原型可以在標準平臺上開(kāi)發(fā)后移植到具體的硬件上,加快了軟件與硬件的開(kāi)發(fā)過(guò)程。Linux采用一個(gè)統一的框架對硬件進(jìn)行管理,從一個(gè)硬件平臺到另一個(gè)硬件平臺的改動(dòng)與上層應用無(wú)關(guān)。Linux可以隨意地配置,不需要任何的許可證或商家的合作關(guān)系,源代碼可以免費得到。這使得采用Linux作為操作系統不會(huì )遇到任何關(guān)于版權的糾紛。毫無(wú)疑問(wèn),這會(huì )節省大量的開(kāi)發(fā)費用。本身內置網(wǎng)絡(luò )支持,而目前嵌入式系統對網(wǎng)絡(luò )支持要求越來(lái)越高。Linux的高度模塊化使添加部件非常容易。
2、 Linux是一個(gè)和Unix相似、以?xún)群藶榛A的、具有完全的內存訪(fǎng)問(wèn)控制,支持大量硬件(包括X86,Alpha、ARM和Motorola等現有的大部分芯片)等特性的一種通用操作系統。其程序源碼全部公開(kāi),任何人可以修改并在GUN通用公共許可證(GNU General Public License)下發(fā)行。這樣,開(kāi)發(fā)人員可以對操作系統進(jìn)行定制,適應其特殊需要。
3、 Linux帶有Unix用戶(hù)熟悉的完善的開(kāi)發(fā)工具,幾乎所有的Unix系統的應用軟件都已移植到了Linux上。Linux還提供了強大的網(wǎng)絡(luò )功能,有多種可選擇窗口管理器(X Windows)。其強大的語(yǔ)言編譯器GCC,C++等也可以很容易得到,不但成熟完善,而且使用方便。
四、嵌入式Linux的建立
完整的嵌入式Linux解決方案應包括嵌入式Linux操作系統內核、運行環(huán)境、圖形化界面和應用軟件等。由于嵌入式設備的特殊要求,嵌入式Linux解決方案中的內核、環(huán)境、GUI等都與標準Linux有很大不同,其主要挑戰是如何在狹小的FLASH、ROM和內存中實(shí)現高質(zhì)量的任務(wù)實(shí)時(shí)調度、圖形化顯示、網(wǎng)絡(luò )通信等功能。
1、 精簡(jiǎn)內核
Linux內核有自己的結構體系,其中進(jìn)程管理、內存管理和文件系統是其最基本的3個(gè)子系統。圖1簡(jiǎn)單表示了它的框架。用戶(hù)進(jìn)程可直接通過(guò)系統調用或者函數庫來(lái)訪(fǎng)問(wèn)內核資源。正因為L(cháng)inux內核具有這樣的結構,因此修改內核時(shí)必須注意各個(gè)子系統之間的協(xié)調。
嵌入式Linux內核一般由標準Linux內核裁剪而來(lái)。用戶(hù)可根據需求配置系統,剔除不需的服務(wù)功能、文件系統和設備驅動(dòng)。經(jīng)過(guò)裁剪、壓縮后的系統內核一般只有300k左右,十分適合嵌入式設備。同標準Linux不同的是嵌入式Linux必須要實(shí)現從FLASH或ROM的啟動(dòng)。標準Linux啟動(dòng)代碼實(shí)現了系統初始化和從軟盤(pán)、硬盤(pán)O盤(pán)區引導內核。嵌入式Linux一般保存在FLASH或ROM中,標準LILO無(wú)法引導。在支持直接從FLASH設備引導的系統中,如華恒公司的uClinux,引導程序主要完成對硬件系統的初始化工作和操作系統的解壓、移位工作。在不支持直接從FLASH引導的系統中,FLASH設備只能作為非引導磁盤(pán)使用。此時(shí),可采用先從硬盤(pán)或軟盤(pán)加載一個(gè)小操作系統,如嵌入式DOS,然后再執行"Loadlin"加載程序從FLASH引導嵌入式Linux。
對標準Linux的修改主要是虛擬內存和調度程序部分的改動(dòng)。因為標準Linux系統使用虛擬內存管理的目的是為了能同時(shí)運行多個(gè)進(jìn)程,但是這樣每個(gè)待運行的進(jìn)程所能分配的CPU時(shí)間片就受限制,資源的使用效率就低。這樣對于實(shí)時(shí)性要求較高的嵌入式系統來(lái)說(shuō),實(shí)時(shí)任務(wù)往往要求CPU具有很高的突發(fā)處理能力,即在有些時(shí)候需要極高的處理效率,因此需要屏蔽內核的虛擬內存管理機制。對于無(wú)硬盤(pán)設備的嵌入式系統,不必采用虛存管理。強實(shí)時(shí)需求的嵌入式應用可以通過(guò)修改任務(wù)調度模塊實(shí)現,主要是在內核和設備驅動(dòng)程序中加入了許多切換點(diǎn)。在該點(diǎn)處,系統檢測是否存在未處理的緊急中斷,有則剝奪內核的運行,及時(shí)處理中斷。實(shí)現實(shí)時(shí)性服務(wù)的一個(gè)較好的方法是在標準的Linux內核上增加一個(gè)實(shí)時(shí)內核,標準Linux內核作為一個(gè)任務(wù)運行于實(shí)時(shí)內核上,強實(shí)時(shí)性任務(wù)也直接運行在實(shí)時(shí)內核上,如RT-Linux等。
文件系統是嵌入式Linux操作系統必不可少的。但標準Linux支持大量的文件系統,因此除了滿(mǎn)足系統的正常運行需要而保留一種外,其它的全部可以刪除,利用原有的設置選項可以移除。一般嵌入式設備文件系統主要使用RamDisk技術(shù)和網(wǎng)絡(luò )文件系統技術(shù)。RamDisk可駐留于Flash,運行時(shí)加載到內存中。
2、 精簡(jiǎn)運行環(huán)境
Linux通常的運行環(huán)境指用戶(hù)運行任何應用的基礎設施,主要包括函數庫和基本命令集等。標準Linux系統同時(shí)向用戶(hù)提供了靜態(tài)和動(dòng)態(tài)函數庫。靜態(tài)函數庫在生成應用時(shí)直接鏈接到用戶(hù)應用中。動(dòng)態(tài)庫在應用運行時(shí)才鏈接。由于嵌入式系統應用一般都是在開(kāi)發(fā)平臺上預先生成的,因此嵌入式系統只需向應用提供動(dòng)態(tài)函數庫。Linux應用運行所需的函數庫主要有C庫、數學(xué)庫、線(xiàn)程庫、加密庫、網(wǎng)絡(luò )通信庫等。其中最基本的是C語(yǔ)言的運行庫glib。這個(gè)庫主要完成基本的輸入輸出,內存訪(fǎng)問(wèn),文件處理。一個(gè)標準的glib庫大約要1200kB存儲空間,考慮到嵌入式Linux內核往往很小,這種運行庫實(shí)在太大,我們做了一些精簡(jiǎn)的工作,方法有兩種:(1)、使用靜態(tài)連接的方法,完全不使用運行庫動(dòng)態(tài)連接;(2)、對這個(gè)庫的函數進(jìn)行精簡(jiǎn)。
在一個(gè)桌面系統上,使用動(dòng)態(tài)連接可以帶來(lái)許多好處。使用動(dòng)態(tài)連接庫,可以讓?xiě)贸绦蚋瘮祹斓母?、升級分離,便于維護,可以讓同時(shí)運行的多個(gè)程序共享一段代碼。但是,在嵌入式系統中,很少有多個(gè)程序并行的可能,程序的維護,尤其是庫函數的維護更新是不常見(jiàn)的。這時(shí),使用靜態(tài)連接的優(yōu)勢就極為明顯。因為靜態(tài)連接可以只將庫中用到的部分連接進(jìn)程序。在應用程序較少(小于5)的情況下,靜態(tài)連接可以達到較好的結果。為了便于將來(lái)擴充的需要,我們也采用第二種方法,針對我們的需要,對庫函數的內容進(jìn)行精簡(jiǎn),只保留一些基本功能,還有一種方法是采用其它的C語(yǔ)言運行庫。但是這些庫對兼容性影響很大。
基本命令集同樣是運行用戶(hù)應用的基礎,主要包括初始化進(jìn)程init,終端獲取getty、Shell和基本命令等。嵌入式系統的啟動(dòng)過(guò)程可能與標準Linux不同,例如跳過(guò)登錄過(guò)程直接啟動(dòng)GUI等。這就要求修改init,getty等。標準Linux命令集同樣由于體積問(wèn)題無(wú)法直接應用于嵌入式環(huán)境。目前,小命令集的解決方法主要有集成方法和匯編方法兩種。集成方法采用集成公共部分減少命令集整體體積,用C實(shí)現,有較好的平臺移植性;匯編方法則采用匯編編程減少每個(gè)命令的體積.這樣可使體積很小但其平臺移植性較差。
3、 嵌入式Linux下的GUI
GUI在嵌入式系統或者實(shí)時(shí)系統中的地位越來(lái)越重要,比如PDA、DVD播放機、WAP手機等,都需要一個(gè)完整.漂亮的圖形用戶(hù)界面。這些系統對GUI的基本要求包括:(1)、輕型、占用資源少;(2)、高性能;(3)、高可靠性;(4)、可配置。這些也成為評價(jià)嵌入式系統的重要指標。目前,嵌入式Linux上的GUI主要有winCE、Micro Window、緊縮的X Window、MiniGUI(國內做得較好的自由軟件之一)。標準Linux的Xfree86由于體積龐大,運行環(huán)境要求高,無(wú)法運行于嵌入式環(huán)境。嵌入式GUI主要通過(guò)削減功能,降低性能來(lái)實(shí)現體積小和占用資源少。目前嵌入式Linux上的GUI環(huán)境主要有兩類(lèi):X類(lèi)和win32類(lèi)。X類(lèi)GUI分為服務(wù)方和客戶(hù)方兩方。服務(wù)器方提供鼠標、鍵盤(pán)處理和顯示功能,客戶(hù)方是用戶(hù)應用,服務(wù)方和客戶(hù)方通過(guò)socket接口和X協(xié)議通信。采用該方式十分有利于遠程網(wǎng)絡(luò )圖形化服務(wù),客戶(hù)方和服務(wù)方可通過(guò)網(wǎng)絡(luò )實(shí)現X協(xié)議和圖形顯示。典型的X類(lèi)GUI有Micro Window、緊縮的X Window等。win32類(lèi)的GUI不存在客戶(hù)方和服務(wù)方,每個(gè)任務(wù)都自成一體,任何任務(wù)間的切換、事件分發(fā)由專(zhuān)門(mén)的管理任務(wù)負責。如wiCE、MiniGUI就是類(lèi)似于win32類(lèi)的GUI。
五、當前流行的幾種嵌入式Linux系統
除了智能數字終端領(lǐng)域以外,Linux在移動(dòng)計算平臺、智能工業(yè)控制、金融業(yè)終端系統,甚至軍事領(lǐng)域都有著(zhù)廣泛的應用前景。這些Linux被統稱(chēng)為"嵌入式Linux"。
1、RT-Linux
這是由美國墨西哥理工學(xué)院開(kāi)發(fā)的嵌入式Linux操作系統。到目前為止,RT-Linux已經(jīng)成功地應用于航天飛機的空間數據采集、科學(xué)儀器測控和電影特技圖像處理等廣泛領(lǐng)域。RT-Linux開(kāi)發(fā)者并沒(méi)有針對實(shí)時(shí)操作系統的特性而重寫(xiě)Linux的內核,因為這樣做的工作量非常大,而且要保證兼容性也非常困難。為此,RT-Linux提出了精巧的內核,并把標準的Linux核心作為實(shí)時(shí)核心的一個(gè)進(jìn)程,同用戶(hù)的實(shí)時(shí)進(jìn)程一起調度。這樣對Linux內核的改動(dòng)非常小,并且充分利用了Linux下現有的豐富的軟件資源。
2、uClinux
uCLinux是Lineo公司的主打產(chǎn)品,同時(shí)也是開(kāi)放源碼的嵌入式Linux的典范之作。uCLinux主要是針對目標處理器沒(méi)有存儲管理單元MMU(Memory Management Unit) 的嵌入式系統而設計的。它已經(jīng)被成功地移植到了很多平臺上。由于沒(méi)有MMU,其多任務(wù)的實(shí)現需要一定技巧。uCLinux是一種優(yōu)秀的嵌入式Linux版本,是micro-Conrol-Linux的縮寫(xiě)。它秉承了標準Linux的優(yōu)良特性,經(jīng)過(guò)各方面的小型化改造,形成了一個(gè)高度優(yōu)化的、代碼緊湊的嵌入式Linux。雖然它的體積很小,卻仍然保留了Linux的大多數的優(yōu)點(diǎn):穩定、良好的移植性、優(yōu)秀的網(wǎng)絡(luò )功能、對各種文件系統完備的支持和標準豐富的API。它專(zhuān)為嵌入式系統做了許多小型化的工作,目前已支持多款CPU。其編譯后目標文件可控制在幾百KB數量級,并已經(jīng)被成功地移植到很多平臺上。
3、Embedix
Embedix是由嵌入式Linux行業(yè)主要廠(chǎng)商之一Luneo推出的,是根據嵌入式應用系統的特點(diǎn)重新設計的Linux發(fā)行版本。Embedix提供了超過(guò)25種的Linux系統服務(wù),包括Web服務(wù)器等。系統需要最小8MB內存,3MB ROM或快速閃存。Embedix基于Linux 2.2內核,并已經(jīng)成功地移植到了Intel x86和PowerPC處理器系列上。像其它的Linux版本一樣,Embedix可以免費獲得。Luneo還發(fā)布了另一個(gè)重要的軟件產(chǎn)品,它可以讓在Windows CE上運行的程序能夠在Embedix上運行。Luneo還將計劃推出Embedix的開(kāi)發(fā)調試工具包、基于圖形界面的瀏覽器等??梢哉f(shuō),Embedix是一種完整的嵌入式Linux解決方案。
4、Xlinux
XLinux是由美國網(wǎng)虎公司推出,主要開(kāi)發(fā)者是陳盈豪。他在加盟網(wǎng)虎幾個(gè)月后便開(kāi)發(fā)出了基于XLinux的、號稱(chēng)是世界上最小的嵌入式Linux系統,內核只有143KB,而且還在不斷減小。XLinux核心采用了"超字元集"專(zhuān)利技術(shù),讓Linux核心不僅可能與標準字符集相容,還含蓋了1 2個(gè)國家和地區的字符集。因此,XLinux在推廣Linux的國際應用方面有獨特的優(yōu)勢。
5、PoketLinux
由Agenda公司采用、作為其新產(chǎn)品"VR3PDA"的嵌入式Linux操作系統。它可以提供跨操作系統構造統一的、標準化的和開(kāi)放的信息通信基礎結構,在此結構上實(shí)現端到端方案的完整平臺。PoketLinux資源框架開(kāi)放,使普通的軟件結構可以為所有用戶(hù)提供一致的服務(wù)。PoketLinux平臺使用戶(hù)的視線(xiàn)從設備、平臺和網(wǎng)絡(luò )上移開(kāi),由此引發(fā)了信息技術(shù)新時(shí)代的產(chǎn)生。在PoketLinux中,稱(chēng)之為用戶(hù)化信息交換(CIE),也就是提供和訪(fǎng)問(wèn)為每個(gè)用戶(hù)需求而定制的"主題"信息的能力,而不管正在使用的設備是什么。
6、MidoriLinux
由Transmeta公司推出的MidoriLinux操作系統代碼開(kāi)放,在GUN普通公共許可(GPL)下發(fā)布,可以在http://midori.transmeta.com上立即獲得。該公司有個(gè)名為"MidoriLinux計劃"。"MidoriLinux"這個(gè)名字來(lái)源于日本的"綠色"---Midori,用來(lái)反映其Linux操作系統的環(huán)保外觀(guān)。
7、紅旗嵌入式Linux
由北京中科院紅旗軟件公司推出的嵌入式Linux是國內做得較好的一款嵌入式操作系統。目前,中科院計算所自行開(kāi)發(fā)的開(kāi)放源碼的嵌入式操作系統---Easy Embedded OS(EEOS)也已經(jīng)開(kāi)始進(jìn)入實(shí)用階段了。該款嵌入式操作系統重點(diǎn)支持p-Java。系統目標一方面是小型化,另一方面能重用Linux的驅動(dòng)和其它模塊。由于有中科院計算所的強大科研力量做后盾,EEOS有望發(fā)展成為功能完善、穩定、可靠的國產(chǎn)嵌入式操作系統平臺。
六、結束語(yǔ)
由于Linux是一個(gè)內核源代碼開(kāi)放、具備一整套工具鏈、有強大的網(wǎng)絡(luò )支持及成本低廉的操作系統,因此嵌入式Linux自誕生起就秉承了這眾多獨特優(yōu)勢,這使它正在并越來(lái)越多地受到人們的關(guān)注。據Even Data數據顯示,期望使用嵌入式Linux的用戶(hù)從2001年的11%增到2002年27%,而同期Vxwork只是從16%到18%,Win CE從9%到14%。另外,在嵌入式Linux的各種應用市場(chǎng)中,通信(語(yǔ)音和數據)名列第一,2000年的銷(xiāo)售額是1300萬(wàn)美元,而2005年預計將達到1.26億美元,可以預見(jiàn),嵌入式Linux將在未來(lái)的通信用嵌入式操作系統中占據強有力的地位。
評論