新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 嵌入式Linux系統(tǒng)及其應(yīng)用前景

嵌入式Linux系統(tǒng)及其應(yīng)用前景

作者: 時間:2004-12-11 來源:網(wǎng)絡(luò) 收藏
摘要:主要分析開發(fā)的特點;概述其開發(fā)過程和所面臨的挑戰(zhàn);闡述的發(fā)展和

關(guān)鍵詞: 操作

引 言

??近年來,隨著計算技術(shù)、通信技術(shù)的飛速發(fā)展,特別是互聯(lián)網(wǎng)的迅速普及和3C(計算機、通信、消費電子)合一的加速,微型化和專業(yè)化成為發(fā)展的新趨勢,嵌入式產(chǎn)品成為信息產(chǎn)業(yè)的主流。Linux從1991年問世到現(xiàn)在,短短的十幾年時間已經(jīng)發(fā)展成為功能強大、設(shè)計完善的操作之一;可運行在X86、Alpha、Sparc、MIPS、PPC、Motorola、NEC、ARM等多種硬件平臺,而且開放源代碼,可以定制;可與各種傳統(tǒng)的商業(yè)操作系統(tǒng)分庭抗爭。越來越多的企業(yè)和研發(fā)機構(gòu)都轉(zhuǎn)向嵌入式Linux的開發(fā)和研究上,在新興的嵌入式操作系統(tǒng)領(lǐng)域內(nèi)也獲得了飛速發(fā)展。

1 嵌入式Linux的特點

  嵌入式系統(tǒng)是以應(yīng)用為中心,以計算機為基礎(chǔ),軟硬件可裁剪,適用于系統(tǒng)對功能、可靠性、成本、功耗嚴格要求的專用計算機系統(tǒng),系統(tǒng)結(jié)構(gòu)見圖1。實時性是嵌入式系統(tǒng)的基本要求,其次,還要求代碼小,速度快,可靠性高。嵌入式Linux(Embedded Linux)是指對Linux經(jīng)過裁剪小型化后,可固化在存儲器或單片機中,應(yīng)用于特定嵌入式場合的專用Linux操作系統(tǒng)。嵌入式Linux的開發(fā)和研究已經(jīng)成為目前操作系統(tǒng)領(lǐng)域的一個熱點。與其它嵌入式操作系統(tǒng)相比(詳見表1),Linux的特點如下。

表1 專用嵌入式實時操作系統(tǒng)與嵌入式Linux的比較

 專用嵌入式實時操作系統(tǒng)嵌入式Linux操作系統(tǒng)
版權(quán)費每生產(chǎn)一件產(chǎn)品需交納一份版權(quán)費免費
購買費用數(shù)十萬元(RMB)免費
技術(shù)支持由開發(fā)商獨家提供有限的技術(shù)支持全世界的自由軟件開發(fā)者提供支持
網(wǎng)絡(luò)特性另加數(shù)十萬元(RMB)購買免費且性能優(yōu)異
軟件移值難(因為是封閉系統(tǒng))易,代碼開放(有許多應(yīng)用軟件支持)
應(yīng)用產(chǎn)品開發(fā)周期長,因為可參考的代碼有限短,新產(chǎn)品上市迅速,因為有許多公開的代碼可以參考和移植
實時性能須改進,可用PT_Linux等模塊彌補
穩(wěn)定性較好較好,但在高性能系統(tǒng)中須改進

  第一,Linux系統(tǒng)是層次結(jié)構(gòu)且內(nèi)核完全開放。Linux是由很多體積小且性能高的微內(nèi)核系統(tǒng)組成。在內(nèi)核代碼完全開放的前提下,不同領(lǐng)域和不同層次的用戶可以根據(jù)自己的應(yīng)用需要方便地對內(nèi)核進行改造,低成本地設(shè)計和開發(fā)出滿足自己需要的嵌入式系統(tǒng)。

  第二,強大的網(wǎng)絡(luò)支持功能。Linux誕生于因特網(wǎng)時代并具有Unix的特性,保證了它支持所有標準因特網(wǎng)協(xié)議,并且可以利用Linux的網(wǎng)絡(luò)協(xié)議棧將其開發(fā)成為嵌入式的TCP/IP網(wǎng)絡(luò)協(xié)議棧。 此外,Linux還支持ext2、fat16、fat32、romfs等文件系統(tǒng),為開發(fā)嵌入式系統(tǒng)應(yīng)用打下了很好的基礎(chǔ)。

  第三,Linux具備一整套工具鏈,容易自行建立嵌入式系統(tǒng)的開發(fā)環(huán)境和交叉運行環(huán)境,可以跨越嵌入式系統(tǒng)開發(fā)中仿真工具的障礙。Linux也符合IEEE POSIX.1標準,使應(yīng)用程序具有較好的可移植性。

  傳統(tǒng)的嵌入式開發(fā)的程序調(diào)試和調(diào)試工具是用在線仿真器(ICE)實現(xiàn)的。它通過取代目標板的微處理器,給目標程序提供一個完整的仿真環(huán)境,完成監(jiān)視和調(diào)試程序;但一般價格比較昂貴,只適合做非常底層的調(diào)試。使用嵌入式Linux,一旦軟硬件能夠支持正常的串口功能,即使不用仿真器,也可以很好地進行開發(fā)和調(diào)試工作,從而節(jié)省一筆不小的開發(fā)費用。嵌入式Linux為開發(fā)者提供了一套完整的工具鏈(tool chain)。它利用GNU的gcc做編譯器,用gdb、kgdb、xgdb做調(diào)試工具,能夠很方便地實現(xiàn)從操作系統(tǒng)到應(yīng)用軟件各個級別的調(diào)試。

  第四,Linux具有廣泛的硬件支持特性。無論是RISC還是CISC、32位還是64位等各種處理器,Linux都能運行。Linux通常使用的微處理器是Intel X86芯片家族,但它同樣能運行于Motorola公司的68K系列CPU和IBM、Apple、Motorola公司的PowerPC CPU以及Intel公司的StrongARM CPU等處理器。Linux支持各種主流硬件設(shè)備和最新硬件技術(shù),甚至可以在沒有存儲管理單元(MMU)的處理器上運行。這意味著嵌入式Linux將具有更廣泛的應(yīng)用

2 Linux嵌入式系統(tǒng)開發(fā)平臺

2.1 系統(tǒng)軟件操作平臺

  操作系統(tǒng)是一種在計算機上運行的軟件。它的主要任務(wù)是管理計算機上的系統(tǒng)資源,為用戶提供使用計算機外部設(shè)備的接口。它存在的目的是為了管理所有硬件資源,并且提供應(yīng)用軟件一個合適的操作環(huán)境。嵌入式系統(tǒng)由于硬件的限制,通常只具有極稀少的硬件資源,如主頻較低的CPU、較小的內(nèi)存、小容量的固態(tài)電子盤芯片DoC(Disk on Chip)或DoM(Disk on Module)替代磁盤等。在使用電池的系統(tǒng)中,它還要實現(xiàn)低功耗,延長電池使用時間的功能。

  Linux作為嵌入式操作系統(tǒng)是完全可行的。因為Linux提供了完成嵌入功能的基本內(nèi)核和所需要的所有用戶界面,能處理嵌入式任務(wù)和用戶界面。將Linux看作是連續(xù)的統(tǒng)一體,從一個具有內(nèi)存管理、任務(wù)切換和時間服務(wù)它分拆的微內(nèi)核到完整的服務(wù)器,支持所有的文件系統(tǒng)和網(wǎng)絡(luò)服務(wù)。Linux作為嵌入式系統(tǒng),是一個帶有很多優(yōu)勢的新成員。它對許多CPU和硬件平臺都是易移植、穩(wěn)定、功能強大、易于開發(fā)的。

  嵌入式Linux系統(tǒng)需要下面三個基本元素:系統(tǒng)引導(dǎo)工具(用于機器加電后的系統(tǒng)定位引導(dǎo))、Linux微內(nèi)核(內(nèi)存管理、 程序管理)、初始化進程。但如果要它成為完整的操作系統(tǒng)并且繼續(xù)保持小型化,還必須加上硬件驅(qū)動程序、硬件接口程序和應(yīng)用程序組。

  Linux是基于GNU的C編譯器,作為GNU工具鏈的一部分,與gdb源調(diào)試器一起工作的。它提供了開發(fā)嵌入式Linux系統(tǒng)的所有軟件工具。

2.2 系統(tǒng)硬件平臺

  在選擇硬件時,常由于缺乏完整或精確的信息而使硬件選擇成為復(fù)雜且困難的工作。硬件開發(fā)成本常是我們很關(guān)心的。當考慮硬件成本時,須要考慮產(chǎn)品的整個成本而不僅是CPU的成本。因為合適的CPU,一旦加上總線邏輯和延時電路使之與外設(shè)一起工作,硬件系統(tǒng)就可能變得非常昂貴。如果要尋找嵌入式軟件系統(tǒng),那么,應(yīng)首先確定硬件平臺,即確定微處理器CPU的型號。

  現(xiàn)在比較流行的硬件平臺有Intel公司的StrongARM 系列,Motorola公司的DragonBall系列,NEC公司的VR系列,Hitachi公司的SH3、SH4系列等等。選定硬件平臺前,首先要確定系統(tǒng)的應(yīng)用功能和所需要的速度,并制定好外接設(shè)備和接口標準。這樣才能準確地定位所需要的硬件方案,得到性價比最高的系統(tǒng)。

3 嵌入式Linux系統(tǒng)開發(fā)模式

  嵌入式系統(tǒng)通常為一個資源受限的系統(tǒng)。直接在嵌入式系統(tǒng)的硬件平臺上編寫軟件比較困難,有時甚至是不可能的。一般流程見圖2。目前,一般采用的辦法是,先在通用計算機上編寫程序,然后,通過交叉編譯,生成目標平臺上可運行的二進制代碼格式,最后下載到目標平臺上的特定位置上運行,具體步驟如下?!          ?/P>

  第一步,建立嵌入式Linux交叉開發(fā)環(huán)境。目前,常用的交叉開發(fā)環(huán)境主要有開放和商業(yè)兩種類型。開放的交叉開發(fā)環(huán)境的典型代表是GNU工具鏈,目前已經(jīng)能夠支持x86、ARM、MIPS、PowerPC等多種處理器。商業(yè)的交叉開發(fā)環(huán)境主要有Metrowerks CodeWarrior、ARM Software Development Toolkit、SDS Cross compiler、WindRiver Tornado、Microsoft Embedded Visual C++等。交叉開發(fā)環(huán)境是指編譯、鏈接和調(diào)試嵌入式應(yīng)用軟件的環(huán)境。它與運行嵌入式應(yīng)用軟件的環(huán)境有所不同,通常采用宿主機/目標機模式,見圖3。

  第二步,交叉編譯和鏈接。在完成嵌入式軟件的編碼之后,就是進行編譯和鏈接,以生成可執(zhí)行代碼。由于開發(fā)過程大多是在Intel公司x86系列CPU的通用計算機上進行的,而目標環(huán)境的處理器芯片卻大多為ARM、MIPS、PowerPC、DragonBall等系列的微處理器,這就要求在建立好的交叉開發(fā)環(huán)境中進行交叉編譯和鏈接。

  例如,在基于ARM體系結(jié)構(gòu)的gcc交叉開發(fā)環(huán)境中,arm-linux-gcc是交叉編譯器,arm-linux-ld是交叉鏈接器。通常情況下,并不是每一種體系結(jié)構(gòu)的嵌入式微處理器都只對應(yīng)于一種交叉編譯器和交叉鏈接器。如對于M68K體系結(jié)構(gòu)的gcc交叉開發(fā)環(huán)境而言,就對應(yīng)于多種不同的編譯器和鏈接器。如果使用的是COFF格式的可執(zhí)行文件,那么在編譯Linux內(nèi)核時,需要使用m68k-coff-gcc和m68k-coff-ld,而在編譯應(yīng)用程序時則需要使用m68k-coff-pic-gcc和m68k-coff-pic-ld。編寫好的嵌入式軟件經(jīng)過交叉編譯和交叉鏈接后,通常會生成兩種類型的可執(zhí)行文件:用于調(diào)試的可執(zhí)行文件和用于固化的可執(zhí)行文件。

  第三步,交叉調(diào)試。

 ?、?硬件調(diào)試。如果不采用在線仿真器,可以讓CPU直接在其內(nèi)部實現(xiàn)調(diào)試功能,并通過在開發(fā)板上引出的調(diào)試端口,發(fā)送調(diào)試命令和接收調(diào)試信息,完成調(diào)試過程。目前,Motorola公司提供的開發(fā)板上使用的是DBM調(diào)試端口,而ARM公司提供的開發(fā)板上使用的則是JTAG調(diào)試端口。使用合適的軟件工具與這些調(diào)試端口進行連接,可以獲得與ICE類似的調(diào)試效果。

  ② 軟件調(diào)試。在嵌入式Linux系統(tǒng)中,Linux系統(tǒng)內(nèi)核調(diào)試,可以先在Linux內(nèi)核中設(shè)置一個調(diào)試樁(debug stub),用作調(diào)試過程中和宿主機之間的通信服務(wù)器。然后,可以在宿主機中通過調(diào)試器的串口與調(diào)試樁進行通信,并通過調(diào)試器控制目標機上Linux內(nèi)核的運行。

  嵌入式上層應(yīng)用軟件的調(diào)試可以使用本地調(diào)試和遠程調(diào)試兩種方法。如果采用的是本地調(diào)試,首先要將所需的調(diào)試器移植到目標系統(tǒng)中,然后就可以直接在目標機上運行調(diào)試器來調(diào)試應(yīng)用程序了;如果采用的是遠程調(diào)試,則需要移植一個調(diào)試服務(wù)器到目標系統(tǒng)中,并通過它與宿主機上的調(diào)試器共同完成應(yīng)用程序的調(diào)試。在嵌入式Linux系統(tǒng)的開發(fā)中,遠程調(diào)試時目標機上使用的調(diào)試服務(wù)器通常是gdbserver,而宿主機上使用的調(diào)試器則是gdb。兩者相互配合共同完成調(diào)試過程。

  第四步,系統(tǒng)測試。整個軟件系統(tǒng)編譯過程,嵌入式系統(tǒng)的硬件一般采用專門的測試儀器進行測試,而軟件則需要有相關(guān)的測試技術(shù)和測試工具的支持,并要采用特定的測試策略。測試技術(shù)指的是軟件測試的專門途徑,以及能夠更加有效地運用這些途徑的特定方法。在嵌入式軟件測試中,常常要在基于目標機的測試和基于宿主機的測試之間做出折衷?;谀繕藱C的測試需要消耗較多的時間和經(jīng)費,而基于宿主機的測試雖然代價較小,但畢竟是在仿真環(huán)境中進行的,因此難以完全反映軟件運行時的實際情況。這兩種環(huán)境下的測試可以發(fā)現(xiàn)不同的軟件缺陷,關(guān)鍵是要對目標機環(huán)境和宿主機環(huán)境下的測試內(nèi)容進行合理取舍。嵌入式軟件測試中經(jīng)常用到的測試工具主要有:內(nèi)存分析工具、性能分析工具、覆蓋分析工具、缺陷跟蹤工具等,在這里不加詳述。嵌入式Linux系統(tǒng)的典型構(gòu)成見圖4。

以下即為一個典型開發(fā)工具的使用流程:

① 寫入或植入引導(dǎo)碼;

② 向串口打印字符串的編碼;

③ 將gdb目標碼移植工作串口,可與另一臺運行g(shù)db程序的Linux主機系統(tǒng)對話;

④ 利用gdb讓硬件和軟件初始化碼在Linux內(nèi)核啟動時工作;

⑤ Linux內(nèi)核啟動,串口成為Linux控制口并可用于后續(xù)開發(fā);

⑥ 如果在目標硬件上已運行了完整的Linux內(nèi)核,即可調(diào)試用戶的應(yīng)用進程。

4 嵌入式Linux面臨的挑戰(zhàn)

  目前,對嵌入式Linux系統(tǒng)的開發(fā)正在蓬勃興起,并已形成了很大的市場。除了一些傳統(tǒng)的Linux公司,像RedHat、VA Linux等,正在從事嵌入式Linux的研究之外,一批新公司(如Lineo、TimeSys等)和一些傳統(tǒng)的大公司(如IBM、SGI、Motorola、Intel等)以及一些開發(fā)專用嵌入式操作系統(tǒng)的公司(如Lynx)也都在進行嵌入式Linux的研究和開發(fā)。但就目前的技術(shù)而言,嵌入式Linux的研究成果與市場的真正需求還有一些距離,因此,嵌入式Linux走向成熟還需要在以下幾個方面有所發(fā)展。

(1)Linux的實時性擴充

  實時性是嵌入式操作系統(tǒng)的基本要求。由于Linux還不是一個真正的實時操作系統(tǒng),內(nèi)核不支持事件優(yōu)先級和搶占實時特性,所以在開發(fā)嵌入式Linux的過程中,首要問題是擴展Linux的實時性能。對Linux實時性的擴展可以從兩方面進行:向外擴展和向上擴展。向外擴展即從范圍上擴展,讓實時系統(tǒng)支持的范圍更廣,支持的設(shè)備更多。目前的開發(fā)所面向的設(shè)備僅限于較簡單的有實時要求的串/并口數(shù)據(jù)采集、浮點數(shù)據(jù)計算等,而像實時網(wǎng)絡(luò)這樣實時系統(tǒng)的高級應(yīng)用還需進一步發(fā)展。向上擴展是擴充Linux內(nèi)核,從功能上擴充Linux的實時處理和控制系統(tǒng)。如嵌入式系統(tǒng)RT-Linux,它的基本原理是將Linux本身的任務(wù)以及Linux內(nèi)核本身作為一個優(yōu)先級最低的任務(wù),而實時任務(wù)作為優(yōu)先級最高的任務(wù),即在實時任務(wù)存在的情況下運行實時任務(wù),否則就運行Linux本身的任務(wù)。實時任務(wù)不同于Linux普通進程。它是以Linux的可裝載的內(nèi)核模塊(Loadable Kernel Module,LKM)的形式存在的,需要運行實時任務(wù)的時候,將這個實時任務(wù)的內(nèi)核模塊插入到內(nèi)核中去,實時任務(wù)和Linux一般進程之間的通信通過共享內(nèi)存或者FIFO通道來實現(xiàn)。

(2)改變Linux內(nèi)核的體系結(jié)構(gòu)

  Linux的內(nèi)核體系采用的是Monolithic。在這種體系結(jié)構(gòu)中,內(nèi)核的所有部分都集中在一起,而且所有的部件在一起編譯連接。這樣雖然能使系統(tǒng)的各部分直接溝通,有效地縮短任務(wù)之間的切換時間,提高系統(tǒng)的響應(yīng)速度和CPU的利用率,且實時性好;但在系統(tǒng)比較大時體積也比較大,與嵌入式系統(tǒng)容量小、資源有限的特點不符。而另外一種內(nèi)核體系結(jié)構(gòu)MicroKernel, 在內(nèi)核中只包括了一些基本的內(nèi)核功能,如創(chuàng)建和刪除任務(wù)、任務(wù)調(diào)度、內(nèi)存管理和中斷處理等部分,而文件系統(tǒng)、網(wǎng)絡(luò)協(xié)議棧等部分都是在用戶內(nèi)存空間運行。這種結(jié)構(gòu)雖然執(zhí)行效率不如Monolithic內(nèi)核,但大大減小了內(nèi)核的體積,同時也方便了整個系統(tǒng)的升級、維護和移植,更能滿足嵌入式系統(tǒng)的特點需要。為此,要使嵌入式Linux的應(yīng)用更加廣泛,若將Linux目前的Monolithic內(nèi)核結(jié)構(gòu)中的部分結(jié)構(gòu)改造成MicroKernel體系結(jié)構(gòu),可使得到的Linux既具有很好的實時性,又能滿足嵌入式系統(tǒng)體積小的要求。

  另外,Linux是一個需要占用存儲器的操作系統(tǒng)。雖然這可以通過減少一些不必要的功能來彌補,但可能會浪費很多時間,而且容易帶來很大的麻煩。許多Linux的應(yīng)用程序都要用到虛擬內(nèi)存,這在許多嵌入式系統(tǒng)中是沒有價值的。所以,并不是一個沒有磁盤的Linux嵌入式系統(tǒng)就可以運行任何Linux應(yīng)用程序。

(3)完善Linux的集成開發(fā)環(huán)境

  提供完整的集成開發(fā)環(huán)境是每一個嵌入式系統(tǒng)開發(fā)人員所期待的。一個完整的嵌入式系統(tǒng)的集成開發(fā)環(huán)境一般需要提供的工具是:編譯/連接器、內(nèi)核調(diào)試/跟蹤器和集成圖形界面開發(fā)平臺。其中的集成圖形界面開發(fā)平臺包括編輯器、調(diào)試器、軟件仿真器和監(jiān)視器等。在Linux系統(tǒng)中,具有功能強大的gcc編譯器工具鏈,使用了基于GNU的調(diào)試器gdb的遠程調(diào)試功能,一般由一臺客戶機運行調(diào)試程序調(diào)試宿主機運行的操作系統(tǒng)內(nèi)核; 在使用遠程開發(fā)時還可以使用交叉平臺的方式,如在Windows平臺下的調(diào)試跟蹤器對Linux的宿主系統(tǒng)做調(diào)試。但是,Linux在基于圖形界面的特定系統(tǒng)定制平臺的研究上,與Windows操作系統(tǒng)相比還存在差距。因此,要使嵌入式Linux在嵌入式操作系統(tǒng)領(lǐng)域中的優(yōu)勢更加明顯,整體集成開發(fā)環(huán)境還有待提高和完善。

5 嵌入式Linux的發(fā)展及應(yīng)用前景

  綜上,由于Linux具有對各種設(shè)備的廣泛支持性,因此,能方便地應(yīng)用于機頂盒、IA設(shè)備、PDA、掌上電腦、WAP手機、尋呼機、車載盒以及工業(yè)控制等智能信息產(chǎn)品中。與PC相比,手持設(shè)備、IA設(shè)備以及信息家電的市場容量要高得多,而Linux嵌入式系統(tǒng)的強大的生命力和利用價值,使越來越多的企業(yè)和高校表現(xiàn)出對它極大的研發(fā)熱情。藍點軟件公司、博利思公司、共創(chuàng)軟件聯(lián)盟、中科紅旗等公司都已將嵌入式系統(tǒng)的開發(fā)作為自己的主要發(fā)展方向之一。

  在嵌入式系統(tǒng)的應(yīng)用中,Linux嵌入式操作系統(tǒng)所具有的技術(shù)優(yōu)勢和獨特的開發(fā)模式給業(yè)界以新異。有理由相信,它能成為Internet時代嵌入式操作系統(tǒng)中的最強音。

linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉