引 言
??近年來,隨著計算技術、通信技術的飛速發展,特別是互聯網的迅速普及和3C(計算機、通信、消費電子)合一的加速,微型化和專業化成為發展的新趨勢,嵌入式產品成為信息產業的主流。Linux從1991年問世到現在,短短的十幾年時間已經發展成為功能強大、設計完善的操作系統之一;可運行在X86、Alpha、Sparc、MIPS、PPC、Motorola、NEC、ARM等多種硬件平臺,而且開放源代碼,可以定制;可與各種傳統的商業操作系統分庭抗爭。越來越多的企業和研發機構都轉向嵌入式Linux的開發和研究上,在新興的嵌入式操作系統領域內也獲得了飛速發展。
嵌入式系統是以應用為中心,以計算機為基礎,軟硬件可裁剪,適用于系統對功能、可靠性、成本、功耗嚴格要求的專用計算機系統,系統結構見圖1。實時性是嵌入式系統的基本要求,其次,還要求代碼小,速度快,可靠性高。嵌入式Linux(Embedded Linux)是指對Linux經過裁剪小型化后,可固化在存儲器或單片機中,應用于特定嵌入式場合的專用Linux操作系統。嵌入式Linux的開發和研究已經成為目前操作系統領域的一個熱點。與其它嵌入式操作系統相比(詳見表1),Linux的特點如下。
表1 專用嵌入式實時操作系統與嵌入式Linux的比較
專用嵌入式實時操作系統 | 嵌入式Linux操作系統 | |
版權費 | 每生產一件產品需交納一份版權費 | 免費 |
購買費用 | 數十萬元(RMB) | 免費 |
技術支持 | 由開發商獨家提供有限的技術支持 | 全世界的自由軟件開發者提供支持 |
網絡特性 | 另加數十萬元(RMB)購買 | 免費且性能優異 |
軟件移值 | 難(因為是封閉系統) | 易,代碼開放(有許多應用軟件支持) |
應用產品開發周期 | 長,因為可參考的代碼有限 | 短,新產品上市迅速,因為有許多公開的代碼可以參考和移植 |
實時性能 | 好 | 須改進,可用PT_Linux等模塊彌補 |
穩定性 | 較好 | 較好,但在高性能系統中須改進 |
第一,Linux系統是層次結構且內核完全開放。Linux是由很多體積小且性能高的微內核系統組成。在內核代碼完全開放的前提下,不同領域和不同層次的用戶可以根據自己的應用需要方便地對內核進行改造,低成本地設計和開發出滿足自己需要的嵌入式系統。
第二,強大的網絡支持功能。Linux誕生于因特網時代并具有Unix的特性,保證了它支持所有標準因特網協議,并且可以利用Linux的網絡協議棧將其開發成為嵌入式的TCP/IP網絡協議棧。 此外,Linux還支持ext2、fat16、fat32、romfs等文件系統,為開發嵌入式系統應用打下了很好的基礎。
第三,Linux具備一整套工具鏈,容易自行建立嵌入式系統的開發環境和交叉運行環境,可以跨越嵌入式系統開發中仿真工具的障礙。Linux也符合IEEE POSIX.1標準,使應用程序具有較好的可移植性。
傳統的嵌入式開發的程序調試和調試工具是用在線仿真器(ICE)實現的。它通過取代目標板的微處理器,給目標程序提供一個完整的仿真環境,完成監視和調試程序;但一般價格比較昂貴,只適合做非常底層的調試。使用嵌入式Linux,一旦軟硬件能夠支持正常的串口功能,即使不用仿真器,也可以很好地進行開發和調試工作,從而節省一筆不小的開發費用。嵌入式Linux為開發者提供了一套完整的工具鏈(tool chain)。它利用GNU的gcc做編譯器,用gdb、kgdb、xgdb做調試工具,能夠很方便地實現從操作系統到應用軟件各個級別的調試。
第四,Linux具有廣泛的硬件支持特性。無論是RISC還是CISC、32位還是64位等各種處理器,Linux都能運行。Linux通常使用的微處理器是Intel X86芯片家族,但它同樣能運行于Motorola公司的68K系列CPU和IBM、Apple、Motorola公司的PowerPC CPU以及Intel公司的StrongARM CPU等處理器。Linux支持各種主流硬件設備和最新硬件技術,甚至可以在沒有存儲管理單元(MMU)的處理器上運行。這意味著嵌入式Linux將具有更廣泛的應用前景。
2 Linux嵌入式系統開發平臺
2.1 系統軟件操作平臺
操作系統是一種在計算機上運行的軟件。它的主要任務是管理計算機上的系統資源,為用戶提供使用計算機及其外部設備的接口。它存在的目的是為了管理所有硬件資源,并且提供應用軟件一個合適的操作環境。嵌入式系統由于硬件的限制,通常只具有極稀少的硬件資源,如主頻較低的CPU、較小的內存、小容量的固態電子盤芯片DoC(Disk on Chip)或DoM(Disk on Module)替代磁盤等。在使用電池的系統中,它還要實現低功耗,延長電池使用時間的功能。
Linux作為嵌入式操作系統是完全可行的。因為Linux提供了完成嵌入功能的基本內核和所需要的所有用戶界面,能處理嵌入式任務和用戶界面。將Linux看作是連續的統一體,從一個具有內存管理、任務切換和時間服務及其它分拆的微內核到完整的服務器,支持所有的文件系統和網絡服務。Linux作為嵌入式系統,是一個帶有很多優勢的新成員。它對許多CPU和硬件平臺都是易移植、穩定、功能強大、易于開發的。
嵌入式Linux系統需要下面三個基本元素:系統引導工具(用于機器加電后的系統定位引導)、Linux微內核(內存管理、 程序管理)、初始化進程。但如果要它成為完整的操作系統并且繼續保持小型化,還必須加上硬件驅動程序、硬件接口程序和應用程序組。
Linux是基于GNU的C編譯器,作為GNU工具鏈的一部分,與gdb源調試器一起工作的。它提供了開發嵌入式Linux系統的所有軟件工具。
2.2 系統硬件平臺
在選擇硬件時,常由于缺乏完整或精確的信息而使硬件選擇成為復雜且困難的工作。硬件開發成本常是我們很關心的。當考慮硬件成本時,須要考慮產品的整個成本而不僅是CPU的成本。因為合適的CPU,一旦加上總線邏輯和延時電路使之與外設一起工作,硬件系統就可能變得非常昂貴。如果要尋找嵌入式軟件系統,那么,應首先確定硬件平臺,即確定微處理器CPU的型號。
現在比較流行的硬件平臺有Intel公司的StrongARM 系列,Motorola公司的DragonBall系列,NEC公司的VR系列,Hitachi公司的SH3、SH4系列等等。選定硬件平臺前,首先要確定系統的應用功能和所需要的速度,并制定好外接設備和接口標準。這樣才能準確地定位所需要的硬件方案,得到性價比最高的系統。
3 嵌入式Linux系統開發模式
嵌入式系統通常為一個資源受限的系統。直接在嵌入式系統的硬件平臺上編寫軟件比較困難,有時甚至是不可能的。一般流程見圖2。目前,一般采用的辦法是,先在通用計算機上編寫程序,然后,通過交叉編譯,生成目標平臺上可運行的二進制代碼格式,最后下載到目標平臺上的特定位置上運行,具體步驟如下?! ?/P>
第一步,建立嵌入式Linux交叉開發環境。目前,常用的交叉開發環境主要有開放和商業兩種類型。開放的交叉開發環境的典型代表是GNU工具鏈,目前已經能夠支持x86、ARM、MIPS、PowerPC等多種處理器。商業的交叉開發環境主要有Metrowerks CodeWarrior、ARM Software Development Toolkit、SDS Cross compiler、WindRiver Tornado、Microsoft Embedded Visual C++等。交叉開發環境是指編譯、鏈接和調試嵌入式應用軟件的環境。它與運行嵌入式應用軟件的環境有所不同,通常采用宿主機/目標機模式,見圖3。
第二步,交叉編譯和鏈接。在完成嵌入式軟件的編碼之后,就是進行編譯和鏈接,以生成可執行代碼。由于開發過程大多是在Intel公司x86系列CPU的通用計算機上進行的,而目標環境的處理器芯片卻大多為ARM、MIPS、PowerPC、DragonBall等系列的微處理器,這就要求在建立好的交叉開發環境中進行交叉編譯和鏈接。
例如,在基于ARM體系結構的gcc交叉開發環境中,arm-linux-gcc是交叉編譯器,arm-linux-ld是交叉鏈接器。通常情況下,并不是每一種體系結構的嵌入式微處理器都只對應于一種交叉編譯器和交叉鏈接器。如對于M68K體系結構的gcc交叉開發環境而言,就對應于多種不同的編譯器和鏈接器。如果使用的是COFF格式的可執行文件,那么在編譯Linux內核時,需要使用m68k-coff-gcc和m68k-coff-ld,而在編譯應用程序時則需要使用m68k-coff-pic-gcc和m68k-coff-pic-ld。編寫好的嵌入式軟件經過交叉編譯和交叉鏈接后,通常會生成兩種類型的可執行文件:用于調試的可執行文件和用于固化的可執行文件。
第三步,交叉調試。
?、?硬件調試。如果不采用在線仿真器,可以讓CPU直接在其內部實現調試功能,并通過在開發板上引出的調試端口,發送調試命令和接收調試信息,完成調試過程。目前,Motorola公司提供的開發板上使用的是DBM調試端口,而ARM公司提供的開發板上使用的則是JTAG調試端口。使用合適的軟件工具與這些調試端口進行連接,可以獲得與ICE類似的調試效果。
② 軟件調試。在嵌入式Linux系統中,Linux系統內核調試,可以先在Linux內核中設置一個調試樁(debug stub),用作調試過程中和宿主機之間的通信服務器。然后,可以在宿主機中通過調試器的串口與調試樁進行通信,并通過調試器控制目標機上Linux內核的運行。
嵌入式上層應用軟件的調試可以使用本地調試和遠程調試兩種方法。如果采用的是本地調試,首先要將所需的調試器移植到目標系統中,然后就可以直接在目標機上運行調試器來調試應用程序了;如果采用的是遠程調試,則需要移植一個調試服務器到目標系統中,并通過它與宿主機上的調試器共同完成應用程序的調試。在嵌入式Linux系統的開發中,遠程調試時目標機上使用的調試服務器通常是gdbserver,而宿主機上使用的調試器則是gdb。兩者相互配合共同完成調試過程。
第四步,系統測試。整個軟件系統編譯過程,嵌入式系統的硬件一般采用專門的測試儀器進行測試,而軟件則需要有相關的測試技術和測試工具的支持,并要采用特定的測試策略。測試技術指的是軟件測試的專門途徑,以及能夠更加有效地運用這些途徑的特定方法。在嵌入式軟件測試中,常常要在基于目標機的測試和基于宿主機的測試之間做出折衷。基于目標機的測試需要消耗較多的時間和經費,而基于宿主機的測試雖然代價較小,但畢竟是在仿真環境中進行的,因此難以完全反映軟件運行時的實際情況。這兩種環境下的測試可以發現不同的軟件缺陷,關鍵是要對目標機環境和宿主機環境下的測試內容進行合理取舍。嵌入式軟件測試中經常用到的測試工具主要有:內存分析工具、性能分析工具、覆蓋分析工具、缺陷跟蹤工具等,在這里不加詳述。嵌入式Linux系統的典型構成見圖4。
以下即為一個典型開發工具的使用流程:
① 寫入或植入引導碼;
② 向串口打印字符串的編碼;
③ 將gdb目標碼移植工作串口,可與另一臺運行gdb程序的Linux主機系統對話;
④ 利用gdb讓硬件和軟件初始化碼在Linux內核啟動時工作;
⑤ Linux內核啟動,串口成為Linux控制口并可用于后續開發;
⑥ 如果在目標硬件上已運行了完整的Linux內核,即可調試用戶的應用進程。
4 嵌入式Linux面臨的挑戰
目前,對嵌入式Linux系統的開發正在蓬勃興起,并已形成了很大的市場。除了一些傳統的Linux公司,像RedHat、VA Linux等,正在從事嵌入式Linux的研究之外,一批新公司(如Lineo、TimeSys等)和一些傳統的大公司(如IBM、SGI、Motorola、Intel等)以及一些開發專用嵌入式操作系統的公司(如Lynx)也都在進行嵌入式Linux的研究和開發。但就目前的技術而言,嵌入式Linux的研究成果與市場的真正需求還有一些距離,因此,嵌入式Linux走向成熟還需要在以下幾個方面有所發展。
(1)Linux的實時性擴充
實時性是嵌入式操作系統的基本要求。由于Linux還不是一個真正的實時操作系統,內核不支持事件優先級和搶占實時特性,所以在開發嵌入式Linux的過程中,首要問題是擴展Linux的實時性能。對Linux實時性的擴展可以從兩方面進行:向外擴展和向上擴展。向外擴展即從范圍上擴展,讓實時系統支持的范圍更廣,支持的設備更多。目前的開發所面向的設備僅限于較簡單的有實時要求的串/并口數據采集、浮點數據計算等,而像實時網絡這樣實時系統的高級應用還需進一步發展。向上擴展是擴充Linux內核,從功能上擴充Linux的實時處理和控制系統。如嵌入式系統RT-Linux,它的基本原理是將Linux本身的任務以及Linux內核本身作為一個優先級最低的任務,而實時任務作為優先級最高的任務,即在實時任務存在的情況下運行實時任務,否則就運行Linux本身的任務。實時任務不同于Linux普通進程。它是以Linux的可裝載的內核模塊(Loadable Kernel Module,LKM)的形式存在的,需要運行實時任務的時候,將這個實時任務的內核模塊插入到內核中去,實時任務和Linux一般進程之間的通信通過共享內存或者FIFO通道來實現。
(2)改變Linux內核的體系結構
Linux的內核體系采用的是Monolithic。在這種體系結構中,內核的所有部分都集中在一起,而且所有的部件在一起編譯連接。這樣雖然能使系統的各部分直接溝通,有效地縮短任務之間的切換時間,提高系統的響應速度和CPU的利用率,且實時性好;但在系統比較大時體積也比較大,與嵌入式系統容量小、資源有限的特點不符。而另外一種內核體系結構MicroKernel, 在內核中只包括了一些基本的內核功能,如創建和刪除任務、任務調度、內存管理和中斷處理等部分,而文件系統、網絡協議棧等部分都是在用戶內存空間運行。這種結構雖然執行效率不如Monolithic內核,但大大減小了內核的體積,同時也方便了整個系統的升級、維護和移植,更能滿足嵌入式系統的特點需要。為此,要使嵌入式Linux的應用更加廣泛,若將Linux目前的Monolithic內核結構中的部分結構改造成MicroKernel體系結構,可使得到的Linux既具有很好的實時性,又能滿足嵌入式系統體積小的要求。
另外,Linux是一個需要占用存儲器的操作系統。雖然這可以通過減少一些不必要的功能來彌補,但可能會浪費很多時間,而且容易帶來很大的麻煩。許多Linux的應用程序都要用到虛擬內存,這在許多嵌入式系統中是沒有價值的。所以,并不是一個沒有磁盤的Linux嵌入式系統就可以運行任何Linux應用程序。
(3)完善Linux的集成開發環境
提供完整的集成開發環境是每一個嵌入式系統開發人員所期待的。一個完整的嵌入式系統的集成開發環境一般需要提供的工具是:編譯/連接器、內核調試/跟蹤器和集成圖形界面開發平臺。其中的集成圖形界面開發平臺包括編輯器、調試器、軟件仿真器和監視器等。在Linux系統中,具有功能強大的gcc編譯器工具鏈,使用了基于GNU的調試器gdb的遠程調試功能,一般由一臺客戶機運行調試程序調試宿主機運行的操作系統內核; 在使用遠程開發時還可以使用交叉平臺的方式,如在Windows平臺下的調試跟蹤器對Linux的宿主系統做調試。但是,Linux在基于圖形界面的特定系統定制平臺的研究上,與Windows操作系統相比還存在差距。因此,要使嵌入式Linux在嵌入式操作系統領域中的優勢更加明顯,整體集成開發環境還有待提高和完善。
5 嵌入式Linux的發展及應用前景
綜上,由于Linux具有對各種設備的廣泛支持性,因此,能方便地應用于機頂盒、IA設備、PDA、掌上電腦、WAP手機、尋呼機、車載盒以及工業控制等智能信息產品中。與PC相比,手持設備、IA設備以及信息家電的市場容量要高得多,而Linux嵌入式系統的強大的生命力和利用價值,使越來越多的企業和高校表現出對它極大的研發熱情。藍點軟件公司、博利思公司、共創軟件聯盟、中科紅旗等公司都已將嵌入式系統的開發作為自己的主要發展方向之一。
在嵌入式系統的應用中,Linux嵌入式操作系統所具有的技術優勢和獨特的開發模式給業界以新異。有理由相信,它能成為Internet時代嵌入式操作系統中的最強音。
- 嵌入式L(6648)
- 應用前景(5317)
相關推薦
評論
查看更多