Linux嵌入式系統開(kāi)發(fā)平臺選型探討
關(guān)鍵詞:嵌入式系統 Linux開(kāi)發(fā)平臺 選型
??1 嵌入式系統與Linux
按照電氣工程師協(xié)會(huì )的一個(gè)定義:嵌入式系統是用來(lái)控制或監視機器、裝置或工廠(chǎng)等的大規模系統的設備。具體說(shuō)來(lái),它是電腦軟件和硬件的綜合體;是以應用為中心,以計算機技術(shù)為基礎,軟硬件可裁減,從而能夠適應實(shí)際應用中對功能、可靠性、成本、體積、功耗等嚴格要求的專(zhuān)用計算機系統。一般來(lái)說(shuō),嵌入式系統不能使用通用型計算機,而且運行的是固化的軟件,終端用戶(hù)很難或者不可能改變固件。而Linux也早已成為IT界家喻戶(hù)曉的一個(gè)名字。概括說(shuō)來(lái),將Linux應用于嵌入式系統的開(kāi)發(fā)有如下一些優(yōu)點(diǎn):
① Linux自身具備一整套工具鏈,容易自行建立嵌入式系統的開(kāi)發(fā)環(huán)境和交叉運行環(huán)境,并且可以跨越在嵌入式系統開(kāi)發(fā)中仿真工具(ICE)的障礙。
② 內核的完全開(kāi)放,使得可以自己設計和開(kāi)發(fā)出真正的硬實(shí)時(shí)系統;對于軟實(shí)時(shí)系統,在Linux中也容易得到實(shí)現。
③ 強大的網(wǎng)絡(luò )支持,使得可以利用Linux的網(wǎng)絡(luò )協(xié)議棧將其開(kāi)發(fā)成為嵌入式的TCP/IP網(wǎng)絡(luò )協(xié)議棧。
2 嵌入式系統設計的過(guò)程
按照嵌入式系統的工程設計方法,嵌入式系統的設計可以分成三個(gè)階段:分析、設計和實(shí)現。分析階段是確定要解決的問(wèn)題及需要完成的目標,也常常被稱(chēng)為“需求階段”;設計階段主要是解決如何在給定的約束條件下完成用戶(hù)的要求;實(shí)現階段主要是解決如何在所選擇的硬件和軟件的基礎上進(jìn)行整個(gè)軟、硬件系統的協(xié)調實(shí)現。在分析階段結束后,通常開(kāi)發(fā)者面臨的一個(gè)棘手的問(wèn)題就是硬件平臺和軟件平臺的選擇,因為它的好壞直接影響著(zhù)實(shí)現階段的任務(wù)完成。
通常硬件和軟件的選擇包括:處理器、硬件部件、操作系統、編程語(yǔ)言、軟件開(kāi)發(fā)工具、硬件調試工具、軟件組件等。
在上述選擇中,通常,處理器是最重要的,同時(shí)操作系統和編程語(yǔ)言也是非常關(guān)鍵的。處理器的選擇往往同時(shí)會(huì )限制操作系統的選擇,操作系統的選擇又會(huì )限制開(kāi)發(fā)工具的選擇。
3 硬件平臺的選擇
3.1 處理器的選擇
嵌入式系統的核心部件是各種類(lèi)型的嵌入式處理器。據不完全統計,目前全世界嵌入式處理器的品種總量已經(jīng)超過(guò)1000多種,流行體系結構有30幾個(gè)系列。但與全球PC市場(chǎng)不同的是,沒(méi)有一種微處理器和微處理器公司可以主導嵌入式系統,僅以32位的CPU而言,就有100種以上嵌入式微處理器。由于嵌入式系統設計的差異性極大,因此選擇是多樣化的。
調查上市的CPU供應商,有些公司如Motorola、Intel、AMD很有名氣,而有一些小的公司,如QED(Santa Clara.CA)雖然名氣很小,但也生產(chǎn)很優(yōu)秀的微處理器。另外,有一些公司,如ARM、MIPS等,只設計但并不生產(chǎn)CPU,他們把生產(chǎn)權授予世界各地的半導體制造商。ARM是近年來(lái)在嵌入式系統有影響力的微處理器制造商,ARM的設計非常適用于小的電源供電系統。Apple在Newton手持計算機中使用ARM,另外有幾款數字無(wú)線(xiàn)電話(huà)也在使用ARM。
設計者在選擇處理器時(shí)要考慮的主要因素有:
① 處理性能。一個(gè)處理器的性能取決于多個(gè)方面的因素,如時(shí)鐘頻率,內部寄存器的大小,指令是否對等處理所有的寄存器等。對于許多需用處理器的嵌入式系統設計來(lái)說(shuō),目標不是在于挑選速度最快的處理器,而是在于選取能夠完成作業(yè)的處理器和I/O子系統。如果是面向高性能的應用設計,那么建議考慮某些新的處理器,其價(jià)格相對低廉,如IBM和Motorola Power PC。
② 技術(shù)指標。當前,許多嵌入式處理器都集成了外圍設備的功能,減少了芯片的數量,降低了整個(gè)系統的開(kāi)發(fā)費用。開(kāi)發(fā)人員首先考慮的是,系統所要求的一些硬件能否無(wú)需過(guò)多的膠合邏輯(GL,Glue Logic)就可以連接到處理器上。其次是考慮該處理器的一些支持芯片,如DMA控制器,內存管理器,中斷控制器,串行設備、時(shí)鐘等的配套。
③ 功耗。嵌入式微處理器最大并且增長(cháng)最快的市場(chǎng)是手持設備、電子記事本、PDA、手機、GPS導航器、智能家電等消費類(lèi)電子產(chǎn)品。這些產(chǎn)品中選購的微處理器,典型的特點(diǎn)是要求高性能、低功耗。許多CPU生產(chǎn)廠(chǎng)家已經(jīng)進(jìn)入了這個(gè)領(lǐng)域。今天,用戶(hù)可以買(mǎi)到一顆嵌入式的微處理器,其速度像筆記本中的Pentium一樣快;而它僅使用普通電池供電即可,并且價(jià)格很便宜。如果用于工業(yè)控制,則對這方面的考慮較弱。
④ 軟件支持工具。僅有一個(gè)處理器,沒(méi)有較好的軟件開(kāi)發(fā)工具的支持也是不行的,因此選擇合適的軟件開(kāi)發(fā)工具對系統的實(shí)現會(huì )起到很好的作用。
⑤ 是否內置調試工具。處理器如果內置調試工具可以大大縮小調試周期,降低調試的難度。
⑥ 供應商是否提供評估板。許多處理器供應商可以提供評估板來(lái)驗證理論是否正確,決策是否得當。
3.2 硬件部件選擇的其它因素
① 生產(chǎn)規模。打算做1套?多套?還是規模生產(chǎn)?如果生產(chǎn)規模比較大,可以自己設計和制備硬件,這樣可以降低成本。反之,最好從第三方購買(mǎi)主板和I/O板卡。
② 開(kāi)發(fā)的市場(chǎng)目標。如果想使產(chǎn)品盡快發(fā)售,以獲得競爭力,此時(shí)要盡可能買(mǎi)成熟的硬件;反之,可以自己設計硬件,降低成本。
③ 軟件對硬件的依賴(lài)性。軟件是否可以在硬件沒(méi)有到位的時(shí)候并行設計或先行開(kāi)發(fā)。
④ 只要可能,盡量選擇使用普通的硬件。在 CPU 及架構的選擇上,一個(gè)原則是:只要有可替代的方案,盡量不要選擇 Linux 尚不支持的硬件平臺。
4 軟件平臺的選擇
圖1所示的嵌入式軟件的開(kāi)發(fā)流程,主要涉及到代碼編程、交叉編譯、交叉連接、下載到目標板和調試等幾個(gè)步驟,因此軟件平臺的選擇也涉及到以下幾個(gè)方面。
4.1 操作系統的選擇
(1)操作系統選擇應考慮的因素
硬件方案確定之后,操作系統的選擇就相對輕松了。硬件的不同,會(huì )影響操作系統的選擇。低端無(wú)MMU(Memory Management Unit,存儲器管理單元)的CPU,要使用uClinux 操作系統;而相對高端的硬件,則可以用普通的嵌入式 Linux 操作系統。uClinux 和普通的 Linux 有各自的優(yōu)勢和缺點(diǎn)??捎糜谇度胧较到y軟件開(kāi)發(fā)的操作系統很多,但關(guān)鍵是如何選擇一個(gè)適合開(kāi)發(fā)項目的操作系統。經(jīng)過(guò)多年的開(kāi)發(fā)實(shí)踐,筆者認為應該從以下幾點(diǎn)進(jìn)行考慮:
① 操作系統提供的開(kāi)發(fā)工具。有些實(shí)時(shí)操作系統(RTOS)只支持該系統供應商的開(kāi)發(fā)工具,因此,還必須向操作系統供應商獲取編譯器、調試器等;而有些操作系統使用廣泛,且有第三方工具可用,因此,選擇的余地比較大。
② 操作系統向硬件接口移植的難度。操作系統到硬件的移植是一個(gè)重要的問(wèn)題,是關(guān)系到整個(gè)系統能否按期完工的一個(gè)關(guān)鍵因素。因此,要選擇那些可移植性程度高的操作系統,避免操作系統難以向硬件移植而帶來(lái)的種種困難,加速系統的開(kāi)發(fā)進(jìn)度。
③ 操作系統的內存要求。均衡考慮是否需要額外花錢(qián)去購買(mǎi)RAM或EEPROM來(lái)迎合操作系統對內存的較大要求。
④ 開(kāi)發(fā)人員是否熟悉此操作系統及其提供的API。
⑤ 操作系統是否提供硬件的驅動(dòng)程序,如網(wǎng)卡等。
⑥ 操作系統的可剪裁性。有些操作系統具有較強的可剪裁性,如嵌入式Linux、Tornado/VxWorks等等。
⑦ 操作系統的實(shí)時(shí)性能。
(2)幾類(lèi)嵌入式Linux系統的比較
嵌入式Linux系統方面的產(chǎn)品主要分為三類(lèi):
第一類(lèi)是專(zhuān)門(mén)為L(cháng)inux的嵌入式應用而做的。如何讓Linux更小、更容易嵌入到體積要求和功能、性能要求更高的硬件中去,是他們的產(chǎn)品開(kāi)發(fā)方向,如MontaVista的MontaVista Linux等。第二類(lèi)是專(zhuān)門(mén)為L(cháng)inux的實(shí)時(shí)特性設計的產(chǎn)品。將Linux開(kāi)發(fā)成實(shí)時(shí)系統尤其是硬實(shí)時(shí)系統,應用于一些關(guān)鍵的控制場(chǎng)合(不僅僅是信息電器)。如,Fsmlabs公司開(kāi)發(fā)出來(lái)的RT-Linux產(chǎn)品已經(jīng)用在工業(yè)控制的很多方面;葡萄牙的Coimbra大學(xué)已經(jīng)利用RT-Linux實(shí)現了化工生產(chǎn)控制廠(chǎng)里用來(lái)控制反應和程序控制的系統。第三類(lèi)的產(chǎn)品是將實(shí)時(shí)性和嵌入式方案結合起來(lái)的方案。很多公司都這么做,并且提供集成化的開(kāi)發(fā)方案,如Lineo、TimeSys等等。
因此選擇操作系統時(shí),要根據自己的嵌入式要求和實(shí)時(shí)性要求,選擇適合自己的嵌入式Linux;同時(shí),和選擇硬件的原則一樣,如果可能,盡量選擇使用普通的嵌入式 Linux 系統。
4.2 編程語(yǔ)言的選擇
編程語(yǔ)言的選擇主要考慮以下因素:
① 通用性。不同種類(lèi)的微處理器都有自己專(zhuān)用的匯編語(yǔ)言。這就為系統開(kāi)發(fā)者設置了一個(gè)巨大的障礙,使得系統編程更加困難,軟件重用無(wú)法實(shí)現。而高級語(yǔ)言一般和具體機器的硬件結構聯(lián)系較少,多數微處理器都有良好的支持,通用性較好。
② 可移植性程度。匯編語(yǔ)言和具體的微處理器密切相關(guān),為某個(gè)微處理器設計的程序不能直接移植到另一個(gè)不同種類(lèi)的微處理器上使用,移植性差;而高級語(yǔ)言對所有微處理器都是通用的,程序可以在不同的微處理器上運行,可移植性較好。
③ 執行效率。一般來(lái)說(shuō),越是高級的語(yǔ)言,其編譯器和開(kāi)銷(xiāo)就越大,應用程序也就越大、越慢;但單純依靠低級語(yǔ)言,如匯編語(yǔ)言來(lái)進(jìn)行應用程序的開(kāi)發(fā),帶來(lái)的問(wèn)題是編程復雜、開(kāi)發(fā)周期長(cháng)。因此,存在一個(gè)開(kāi)發(fā)時(shí)間和運行性能間的權衡問(wèn)題。
④ 可維護性。低級語(yǔ)言如匯編語(yǔ)言,可維護性不高。高級語(yǔ)言程序往往是模塊化設計,各個(gè)模塊之間的接口是固定的。當系統出現問(wèn)題時(shí),可以很快地將問(wèn)題定位到某個(gè)模塊內,并盡快得到解決。另外,模塊化設計也便于系統功能的擴充和升級。
幾種開(kāi)發(fā)語(yǔ)言的比較:
在嵌入式系統開(kāi)發(fā)過(guò)程中使用的語(yǔ)言種類(lèi)很多,比較廣泛應用的高級語(yǔ)言有:Ada、C/C++、Modula-2和Java等。Ada語(yǔ)言定義嚴格,易讀易懂,有較豐富的庫程序支持,目前在國防、航空、航天等相關(guān)領(lǐng)域應用比較廣泛,未來(lái)仍將在這些領(lǐng)域占有重要地位。C語(yǔ)言具有廣泛的庫程序支持,目前在嵌入式系統中是應用最廣泛的編程語(yǔ)言,在將來(lái)很長(cháng)一段時(shí)間內仍將在嵌入式系統應用領(lǐng)域占重要地位。C++是一種面向對象的編程語(yǔ)言,目前在嵌入式系統設計中也得到了廣泛的應用,如GNU C++。Visual C++,是一種集成開(kāi)發(fā)環(huán)境,支持可視化編程,廣泛應用于GUI程序開(kāi)發(fā)。但C與C++相比,C++的目標代碼往往比較龐大和復雜,在嵌入式系統應用中應充分考慮這一因素。Modula-2定義清晰,支持豐富,具有較好的模塊化結構,在教學(xué)科研方面有較廣泛的應用。雖然該語(yǔ)言的開(kāi)發(fā)應用一直比較平緩,但近兩年在歐洲有所復蘇。Java語(yǔ)言相對年輕,但有很強的跨平臺特性,目前發(fā)展勢頭較為強勁。Java語(yǔ)言的“一次編程,到處可用”的特性,使得它在很多領(lǐng)域備受歡迎。隨著(zhù)網(wǎng)絡(luò )技術(shù)和嵌入式技術(shù)的不斷發(fā)展,Java及嵌入式Java的應用也將越來(lái)越廣泛,但是Java消耗硬件資源較大。
4.3 集成開(kāi)發(fā)環(huán)境考慮的因素
集成開(kāi)發(fā)環(huán)境IDE(Integrated Development Environment)應考慮以下因素:
① 系統調試器的功能。系統調試特別是遠程調試是一個(gè)重要的功能。
② 支持庫函數。許多開(kāi)發(fā)系統提供大量使用的庫函數和模板代碼,如大家比較熟悉的C++編譯器就帶有標準的模板庫。它提供了一套用于定義各種有用的集裝、存儲、搜尋、排序對象。與選擇硬件和操作系統的原則一樣:除非必要,盡量采用標準的 glibc。
③ 編譯器開(kāi)發(fā)商是否持續升級編譯器。
④ 連接程序是否支持所有的文件格式和符號格式。
4.4 硬件調試工具的選擇
好的軟件調試程序可以有效地發(fā)現大多數的錯誤,但是如果再選擇一個(gè)好的硬件調試就會(huì )達到事半功倍的效果。常用的硬件調試工具有以下幾種:
① 實(shí)時(shí)在線(xiàn)仿真器(ICE,In-Circuit Emulator)。用戶(hù)從仿真插頭向ICE看,ICE應是一個(gè)可被控制的MCU。ICE是通過(guò)一根短電纜連接到目標系統上的。該電纜的一端有一個(gè)插件,插到處理器的插座上,而處理器則插到這個(gè)插件上。ICE支持常規的調試操作,如單步運行、斷點(diǎn)、反匯編、內存檢查、源程序級的調試等等。
② 邏輯分析儀。邏輯分析儀最常用于硬件調試,但也可用于軟件調試。它是一種無(wú)源器件,主要用于監視系統總線(xiàn)的事件.
③ ROM仿真器。ROM仿真器用于插入目標上的ROM插座中的器件,用于仿真ROM芯片??梢詫⒊绦蛳螺d到ROM仿真器中,然后調試目標上的程序,就好像程序燒結在PROM中一樣,從而避免了每次修改程序后直接燒結的麻煩。
④ 在線(xiàn)調試OCD或在線(xiàn)仿真(on-chip emulator)
特別的硅基材料以及定制和CPU引腳的串行連接,在這種特殊的CPU芯片上使用OCD (On-Chip Debugging),才能發(fā)揮出OCD的特點(diǎn)。用低端適配器就可以把OCD端口和主工作站以及前端調試軟件連接起來(lái)。從OCD的基本形式看來(lái),它的特點(diǎn)和單一的ROM監測器是一致的,但是不像后者那樣,需要專(zhuān)門(mén)的程序以及額外的通信端口。
4.5 軟件組件的選擇
有些軟件組件是免費的,有些軟件組件是授權的。授權軟件組件的費用一般都很高,但大都經(jīng)過(guò)嚴格的測試,可靠性高,調試時(shí)間短?,F在也有一些免費的自由軟件組件,它們的性能、可靠性也很好。因此開(kāi)發(fā)人員在選擇的時(shí)候要加以權衡,確定哪種方案更好。
5 展 望
國外的開(kāi)發(fā)已經(jīng)如火如荼,國內的開(kāi)發(fā)也不甘示弱。Linux在嵌入式系統中具有強大的生命力和利用價(jià)值,很多公司和大學(xué)都不同程度地表現出對這個(gè)方面的興趣。有理由相信,嵌入式Linux的發(fā)展將帶領(lǐng)我們進(jìn)入嵌入式系統的新時(shí)代!
linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)
評論