文章編號(hào):1672-5913(2008)16-0021-02
摘要:本文從實(shí)際應(yīng)用的角度出發(fā),重點(diǎn)對(duì)Linux嵌入式系統(tǒng)開(kāi)發(fā)中硬件平臺(tái)選型問(wèn)題進(jìn)行論述。
關(guān)鍵詞:嵌入式系統(tǒng);ARM;Linux操作平臺(tái)
中圖分類號(hào):G642
文獻(xiàn)標(biāo)識(shí)碼:B
1嵌入式Linux系統(tǒng)
嵌入式系統(tǒng)是軟件和硬件的綜合體。它是以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),軟硬件可裁減,從而能夠適應(yīng)實(shí)際應(yīng)用中對(duì)功能、可靠性、成本、體積、功耗等嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)。Linux具有強(qiáng)大的功能,很好地支持了各種現(xiàn)代編程技術(shù),將Linux應(yīng)用于嵌入式系統(tǒng)的開(kāi)發(fā)有如下一些優(yōu)點(diǎn):
1) 內(nèi)核完全開(kāi)放,使得設(shè)計(jì)者可以自己設(shè)計(jì)和開(kāi)發(fā)出真正的硬件實(shí)時(shí)系統(tǒng)和軟件實(shí)時(shí)系統(tǒng)。
2)Linux本身具有一整套工具鏈,使用者可以較容易地自行建立嵌入式系統(tǒng)的開(kāi)發(fā)環(huán)境和交叉編譯及運(yùn)行環(huán)境。
3) 強(qiáng)大的網(wǎng)絡(luò)支持,可以利用Linux的網(wǎng)絡(luò)協(xié)議棧將其開(kāi)發(fā)成為嵌入式的TCP/IP網(wǎng)絡(luò)協(xié)議棧。
2硬件平臺(tái)的選擇
2.1處理器的選擇
設(shè)計(jì)者在選擇處理器時(shí)要考慮的主要因素有:
(1) 處理性能。處理器的性能取決于多個(gè)方面的因素,如時(shí)鐘頻率、內(nèi)部寄存器的大小、指令是否對(duì)等處理所有的寄存器等。如果是面向高性能的應(yīng)用設(shè)計(jì),那么建議考慮某些新的處理器,其價(jià)格相對(duì)低廉,如IBM和Motorola Power PC。
(2) 技術(shù)指標(biāo)。當(dāng)前許多嵌入式處理器都集成了外圍設(shè)備,采用這類CPU可以減少系統(tǒng)的體積,降低系統(tǒng)的開(kāi)發(fā)成本。開(kāi)發(fā)人員首先考慮的是,系統(tǒng)所要求的一些硬件能否無(wú)需過(guò)多的膠合邏輯(GL,Glue Logic)就可以連接到處理器上;其次是考慮該處理器的一些支持芯片,如DMA控制器、內(nèi)存管理器、中斷控制器、串行設(shè)備、時(shí)鐘等的配套。
(3) 功耗。嵌入式微處理器最大并且增長(zhǎng)最快的市場(chǎng)是手持設(shè)備、電子記事本、PDA、手機(jī)、GPS導(dǎo)航器、智能家電等消費(fèi)類電子產(chǎn)品。這些產(chǎn)品中選購(gòu)的微處理器,典型的特點(diǎn)是要求高性能、低功耗。
(4) 軟件工具。僅有一個(gè)處理器,沒(méi)有較好的軟件開(kāi)發(fā)工具的支持也是不行的,因此選擇合適的軟件開(kāi)發(fā)工具對(duì)系統(tǒng)的實(shí)現(xiàn)會(huì)起到很好的作用。
(5) 內(nèi)置調(diào)試工具。使用具有內(nèi)置調(diào)試工具的處理器可以大大縮小調(diào)試周期,降低調(diào)試的難度。
(6) 供應(yīng)商是否提供評(píng)估板。許多處理器供應(yīng)商可以提供評(píng)估板來(lái)驗(yàn)證理論是否正確,決策是否得當(dāng)。
2.2硬件選擇的其他因素
(1)生產(chǎn)規(guī)模。打算做一套,多套,還是規(guī)模生產(chǎn),如果生產(chǎn)規(guī)模比較大,可以自己設(shè)計(jì)和制備硬件,這樣可以降低成本。反之,最好從第三方購(gòu)買主板和I/O板卡。
(2) 市場(chǎng)目標(biāo)。如果想使產(chǎn)品盡快發(fā)售,以獲得競(jìng)爭(zhēng)力,就要盡可能買成熟的硬件;反之,可以自己設(shè)計(jì)硬件,降低成本。
(3) 軟件對(duì)硬件的依賴性。軟件是否可以在硬件沒(méi)有到位的時(shí)候并行設(shè)計(jì)或先行開(kāi)發(fā)。
3軟件平臺(tái)的選擇
嵌入式軟件的編寫和開(kāi)發(fā)調(diào)試的主要流程為:代碼編程、交叉編譯、交叉鏈接、重定位、下載到目標(biāo)板和調(diào)試等幾個(gè)步驟,因此軟件平臺(tái)的選擇也涉及到以下幾個(gè)方面。
3.1操作系統(tǒng)的選擇
(1) 操作系統(tǒng)選擇應(yīng)考慮的因素
硬件方案確定之后,操作系統(tǒng)的選擇就相對(duì)輕松了。硬件的不同,會(huì)影響操作系統(tǒng)的選擇。低端無(wú)MMU(Memory Management Unit,存儲(chǔ)器管理單元)的CPU,要使用uClinux 操作系統(tǒng);而相對(duì)高端的硬件,則可以用普通的嵌入式 Linux 操作系統(tǒng)。uClinux 和普通的 Linux 有各自的優(yōu)勢(shì)和缺點(diǎn)。可用于嵌入式系統(tǒng)軟件開(kāi)發(fā)的操作系統(tǒng)很多,但關(guān)鍵是如何選擇一個(gè)適合開(kāi)發(fā)項(xiàng)目的操作系統(tǒng)。筆者認(rèn)為應(yīng)該從以下幾點(diǎn)進(jìn)行考慮。
① 操作系統(tǒng)提供的開(kāi)發(fā)工具:有些實(shí)時(shí)操作系統(tǒng)(RTOS)只支持該系統(tǒng)供應(yīng)商的開(kāi)發(fā)工具,因此還必須向操作系統(tǒng)供應(yīng)商獲取編譯器、調(diào)試器等;而有些操作系統(tǒng)使用廣泛,且有第三方工具可用,因此選擇余地較大。
② 操作系統(tǒng)向硬件接口移植的難度:操作系統(tǒng)到硬件的移植是一個(gè)重要的問(wèn)題,是關(guān)系到整個(gè)系統(tǒng)能否按期完工的一個(gè)關(guān)鍵因素。因此,要選擇可移植性程度高的操作系統(tǒng),避免操作系統(tǒng)難以向硬件移植而帶來(lái)的種種困難,加速系統(tǒng)的開(kāi)發(fā)進(jìn)度。
③ 操作系統(tǒng)的內(nèi)存要求:均衡考慮是否需要額外花錢去購(gòu)買RAM或EEPROM來(lái)迎合操作系統(tǒng)對(duì)內(nèi)存的較大要求。
④ 開(kāi)發(fā)人員是否熟悉此操作系統(tǒng)及其提供的API。
⑤ 操作系統(tǒng)是否提供硬件的驅(qū)動(dòng)程序。
⑥ 操作系統(tǒng)的可剪裁性。有些操作系統(tǒng)具有較強(qiáng)的可剪裁性,如嵌入式Linux、Tornado/VxWorks等等。
⑦ 操作系統(tǒng)的實(shí)時(shí)性能。
(2) 幾類嵌入式Linux系統(tǒng)的比較
嵌入式Linux系統(tǒng)方面的產(chǎn)品主要分為三類。第一類是專門為L(zhǎng)inux的嵌入式應(yīng)用而做的,如何讓Linux更小、更容易嵌入到體積要求和功能、性能要求更高的硬件中去,是他們的產(chǎn)品開(kāi)發(fā)方向。第二類是專門為L(zhǎng)inux的實(shí)時(shí)特性設(shè)計(jì)的產(chǎn)品,將Linux開(kāi)發(fā)成實(shí)時(shí)系統(tǒng)尤其是硬實(shí)時(shí)系統(tǒng),應(yīng)用于一些關(guān)鍵的控制場(chǎng)合。第三類的產(chǎn)品是將實(shí)時(shí)性和嵌入式方案結(jié)合起來(lái)的方案。因此要根據(jù)自己的嵌入式要求和實(shí)時(shí)性要求,選擇適合自己的嵌入式Linux;同時(shí),和選擇硬件的原則一樣,如果可能,盡量選擇使用普通的嵌入式 Linux 系統(tǒng)。
3.2編程語(yǔ)言的選擇
編程語(yǔ)言的選擇主要考慮以下因素。
(1) 通用性:不同種類的微處理器都有自己專用的匯編語(yǔ)言,這就為系統(tǒng)開(kāi)發(fā)者設(shè)置了一個(gè)巨大的障礙,使得系統(tǒng)編程更加困難,軟件重用無(wú)法實(shí)現(xiàn)。而高級(jí)語(yǔ)言一般和具體機(jī)器的硬件結(jié)構(gòu)聯(lián)系較少,多數(shù)微處理器都有良好的支持,通用性較好。
(2) 可移植性程度:匯編語(yǔ)言和具體的微處理器密切相關(guān),為某個(gè)微處理器設(shè)計(jì)的程序不能直接移植到另一個(gè)不同種類的微處理器上使用,移植性差;而高級(jí)語(yǔ)言對(duì)所有微處理器都是通用的,程序可以在不同的微處理器上運(yùn)行,可移植性較好。
(3) 執(zhí)行效率:一般來(lái)說(shuō),越是高級(jí)的語(yǔ)言,其編譯器和開(kāi)銷就越大,應(yīng)用程序也就越大、越慢;但單純依靠低級(jí)語(yǔ)言,如匯編語(yǔ)言來(lái)進(jìn)行應(yīng)用程序的開(kāi)發(fā),帶來(lái)的問(wèn)題是編程復(fù)雜、開(kāi)發(fā)周期長(zhǎng)。因此,存在一個(gè)開(kāi)發(fā)時(shí)間和運(yùn)行性能間的權(quán)衡問(wèn)題。
(4) 可維護(hù)性:低級(jí)語(yǔ)言如匯編語(yǔ)言,可維護(hù)性不高。高級(jí)語(yǔ)言程序往往是模塊化設(shè)計(jì),各個(gè)模塊之間的接口是固定的。當(dāng)系統(tǒng)出現(xiàn)問(wèn)題時(shí),可以很快地將問(wèn)題定位到某個(gè)模塊內(nèi),并盡快解決。另外,模塊化設(shè)計(jì)也便于系統(tǒng)功能的擴(kuò)充和升級(jí)。
在嵌入式系統(tǒng)開(kāi)發(fā)過(guò)程中使用的語(yǔ)言種類很多,比較廣泛應(yīng)用的高級(jí)語(yǔ)言有Ada、C/C++、Modula-2和Java等。Ada語(yǔ)言定義嚴(yán)格,易讀易懂,有較豐富的庫(kù)程序支持,目前在國(guó)防、航空、航天等相關(guān)領(lǐng)域應(yīng)用比較廣泛。C語(yǔ)言具有廣泛的庫(kù)程序支持,是目前在嵌入式系統(tǒng)中應(yīng)用最廣泛的編程語(yǔ)言,在將來(lái)很長(zhǎng)一段時(shí)間內(nèi)仍占重要地位。C++是一種面向?qū)ο蟮木幊陶Z(yǔ)言,目前在嵌入式系統(tǒng)設(shè)計(jì)中也得到了廣泛的應(yīng)用。Modula-2定義清晰,支持豐富,具有較好的模塊化結(jié)構(gòu),在教學(xué)科研方面有較廣泛的應(yīng)用。Java語(yǔ)言相對(duì)年輕,但有很強(qiáng)的跨平臺(tái)特性,目前發(fā)展勢(shì)頭較為強(qiáng)勁。
3.3集成開(kāi)發(fā)環(huán)境考慮的因素
(1) 系統(tǒng)調(diào)試器的功能。系統(tǒng)調(diào)試特別是遠(yuǎn)程調(diào)試是一個(gè)重要的功能。
(2) 支持庫(kù)函數(shù)。許多開(kāi)發(fā)系統(tǒng)提供大量實(shí)用的庫(kù)函數(shù)和模板代碼,如大家比較熟悉的C++編譯器就帶有標(biāo)準(zhǔn)的模板庫(kù)。與選擇硬件和操作系統(tǒng)的原則一樣:除非必要,盡量采用標(biāo)準(zhǔn)的glibc。
(3) 編譯器開(kāi)發(fā)商是否持續(xù)升級(jí)編譯器。
(4) 連接程序是否支持所有的文件格式和符號(hào)格式。
3.4硬件調(diào)試工具的選擇
好的軟件調(diào)試程序可以有效地發(fā)現(xiàn)BUG,但是如果再選擇一個(gè)好的硬件調(diào)試就會(huì)達(dá)到事半功倍的效果。常用的硬件調(diào)試工具有以下幾種:
(1) 實(shí)時(shí)在線仿真器(ICE,In-Circuit Emulator)。可以對(duì)程序進(jìn)行單步運(yùn)行、斷點(diǎn)、反匯編、內(nèi)存檢查、源程序級(jí)等的調(diào)試。
(2) 邏輯分析儀。最常用于硬件調(diào)試,也可用于軟件調(diào)試。它是一種無(wú)源器件,主要用于監(jiān)視系統(tǒng)總線的事件。
(3)ROM仿真器??刹迦隦OM插座中的器件,用于仿真ROM芯片,從而避免了每次修改程序后直接燒結(jié)的麻煩。
3.5軟件組件的選擇
有些軟件組件是免費(fèi)的,有些軟件組件是授權(quán)的。授權(quán)軟件組件的費(fèi)用一般都很高,但大都經(jīng)過(guò)嚴(yán)格的測(cè)試,可靠性高,調(diào)試時(shí)間短?,F(xiàn)在也有一些免費(fèi)的自由軟件組件,它們的性能、可靠性也很好。因此開(kāi)發(fā)人員在選擇的時(shí)候要加以權(quán)衡,確定哪種方案更好。
4展望
嵌入式技術(shù)的應(yīng)用越來(lái)越廣泛,有無(wú)限大的應(yīng)用領(lǐng)域,可謂無(wú)所不在、無(wú)處不在、多種途徑、多種選擇。Linux在嵌入式系統(tǒng)中具有強(qiáng)大的生命力和利用價(jià)值,很多公司和大學(xué)都在應(yīng)用中不斷地研究和開(kāi)發(fā)??梢灶A(yù)見(jiàn),ARM與Linux在未來(lái)會(huì)更加壯大,在嵌入式產(chǎn)品市場(chǎng)上占有越來(lái)越大的份額。
參考文獻(xiàn):
[1] 馬忠梅,李善平,等.ARM9Linux 嵌入式系統(tǒng)教程[M]. 北京: 北京航空航天大學(xué)出版社,2004.
[2] 孫天澤,袁文菊,等. 嵌入式設(shè)計(jì)及Linux驅(qū)動(dòng)開(kāi)發(fā)指南[M]. 北京:電子工業(yè)出版社,2005.
[3] 田澤. 嵌入式系統(tǒng)開(kāi)發(fā)與應(yīng)用[M]. 北京: 北京航空航天大學(xué)出版社,2004.
[4] 何立民. 嵌入式系統(tǒng)的定義與發(fā)展歷史[J]. 單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2004,(1).