|
近年來,計算機技術(shù)、通信技術(shù)及小型電子設(shè)備制造業(yè)均取得了飛速發(fā)展。以計算機、通信產(chǎn)品、消費電子為典型產(chǎn)品代表的這三大產(chǎn)業(yè)正呈現(xiàn)越發(fā)明顯的整合趨勢,即3C整合。 產(chǎn)品制造方面,各廠家都爭相以微型化和專業(yè)化作為設(shè)計、制造產(chǎn)品的核心理念,這使得具備這些特點的產(chǎn)品(即嵌入式產(chǎn)品)成為產(chǎn)業(yè)中毫無爭議的主流;產(chǎn)品系統(tǒng)軟件方面,擁有開放源碼、高硬件兼容性、高穩(wěn)定性、高定制性等特點的嵌入式Linux系統(tǒng),已讓越來越多的企業(yè)和研發(fā)機構(gòu)由傳統(tǒng)商業(yè)系統(tǒng)轉(zhuǎn)向?qū)ζ涞难芯块_發(fā);新興的嵌入式操作系統(tǒng)市場上,嵌入式Linux正呈現(xiàn)出驚人增長率。 針對這一熱點,本文以對目前嵌入式Linux的開發(fā)過程與工具選擇分析為主題,力爭向讀者展示一個清晰的開發(fā)框架及實際操作方法指向。 系統(tǒng)開發(fā)復(fù)雜度確定及成本控制 根據(jù)實際構(gòu)建方法定義,嵌入式Linux是指對標準Linux經(jīng)過裁剪、固化至設(shè)備存儲體中,完成特定嵌入式應(yīng)用的專用Linux系統(tǒng)。 進行系統(tǒng)開發(fā)需兼顧軟件、硬件兩方面資源,針對特定應(yīng)用,軟件系統(tǒng)功能要配合硬件資源來設(shè)計。 硬件方面,確定應(yīng)用范圍和性能等級是首先要考慮的,因為二者的選型決定了整個產(chǎn)品的功能及性能,也就大體確定了產(chǎn)品的硬件成本。硬件資源固定后,就可針對所選資源進行軟件選型、功能裁剪需求、工具搭配等軟件系統(tǒng)方面的分析和定奪了。圖1是一般的系統(tǒng)開發(fā)流程: 圖1一般的嵌入式Linux系統(tǒng)開發(fā)流程 作為一個功能完整的操作系統(tǒng),Linux能提供嵌入式系統(tǒng)所需的基本內(nèi)核和所有用戶界面。具有內(nèi)存管理、任務(wù)切換和時間服務(wù)及其它分拆的微內(nèi)核到完整的服務(wù)器,支持所有的文件系統(tǒng)和網(wǎng)絡(luò)服務(wù)。要使其成為易用且高效的嵌入式系統(tǒng),前期關(guān)鍵的工作分為Linux版本選擇、系統(tǒng)功能裁剪分析、文件系統(tǒng)及工具搭配幾步。 首先,按照選定的硬件選擇合適的Linux系統(tǒng)版本,標準為系統(tǒng)要支持所選硬件且系統(tǒng)執(zhí)行速度與硬件性能匹配較好。然后進行系統(tǒng)功能裁剪分析,標準為系統(tǒng)應(yīng)在滿足應(yīng)用的前提下,盡可能減小尺寸,去掉不需要的模塊。最后,為系統(tǒng)選擇合適的文件系統(tǒng)及工具,同樣以滿足應(yīng)用和減小尺寸為標準。 做好以上系統(tǒng)開發(fā)復(fù)雜度分析,不僅可較好規(guī)劃產(chǎn)品開發(fā)成本,而且對后續(xù)開發(fā)過程也起到了關(guān)鍵的需求參照作用。 開發(fā)過程與對應(yīng)開發(fā)工具選擇 嵌入式Linux系統(tǒng)的開發(fā)過程與其對應(yīng)的開發(fā)工具聯(lián)系十分緊密,完成一個系統(tǒng)的開發(fā),不僅需要大量的工具,而且多以平臺交叉開發(fā)模式為主: 嵌入式Linux開發(fā)工具選擇的基本依據(jù) 工具選擇的基本依據(jù)主要有以下幾點:
Linux原型系統(tǒng)選擇與工具準備 最終的嵌入式Linux系統(tǒng)來源都是完整的Linux操作系統(tǒng)。在開發(fā)時,對原型Linux系統(tǒng)的選擇及前期開發(fā)工具的準備對整個開發(fā)的效率及成果都有很大影響。 選擇原型系統(tǒng)時,首先要從體系架構(gòu)及設(shè)備兼容性進行分析,先找出滿足功能要求的版本及補丁,然后根據(jù)硬件實際性能及存儲容量決定最終系統(tǒng)版本。 前期工具準備包括2類工具的選擇:開發(fā)用工具和系統(tǒng)工具。前者只在開發(fā)過程中起作用,多為宿主機平臺工具。后者則是在最終的嵌入式Linux系統(tǒng)中使用,多為目標平臺工具。 Linux交叉開發(fā)環(huán)境建立 Linux交叉開發(fā)環(huán)境基本都是由GNU開源工具鏈搭建,工具鏈同樣存在版本選擇的問題。針對所開發(fā)的目標平臺選擇相應(yīng)編譯器及調(diào)試器等,同時對應(yīng)原型Linux的版本、工具鏈版本需與其配合以保證工具可正常使用,具體版本相關(guān)性請參考kernel.org及GNU給出的說明文檔。 將原型Linux及交叉開發(fā)環(huán)境都保存于宿主機上,使用串口或網(wǎng)口等連接設(shè)備將宿主機與目標機連接在一起,安裝好宿主機和目標機的通訊工具及服務(wù);安裝TFTP服務(wù)器,為目標機從主機上下載文件提供服務(wù);啟動Telnet服務(wù);安裝串口通訊工具minicom,一個交叉編譯環(huán)境就基本建立完成了。然后即可在宿主機上用交叉工具鏈對原型Linux及其他目標機用軟件進行交叉編譯、調(diào)試,并使用通訊工具將編譯好的目標代碼傳至目標機運行。 內(nèi)核及根文件系統(tǒng)開發(fā) 一個完整的嵌入式Linux系統(tǒng)包括兩大部分:內(nèi)核及根文件系統(tǒng)。 內(nèi)核 內(nèi)核開發(fā)移植完整過程包括:編寫針對特定處理器的任務(wù)調(diào)度、中斷處理等代碼;編寫針對特定硬件平臺的引導(dǎo)和初始化代碼;編寫針對特定外設(shè)的設(shè)備驅(qū)動程序代碼;交叉編譯內(nèi)核。 前兩個步驟在開源社區(qū)中基本能找到現(xiàn)成可用資源,第三個步驟目前也有很多典型設(shè)備驅(qū)動代碼可供使用,因此現(xiàn)今的開發(fā)過程已大大簡化,所做工作基本是對現(xiàn)有資源的整理及補充,如需編寫代碼,則可能涉及到匯編工具及C代碼編寫工具的使用。 最后一步交叉編譯生成按照需求配置好的內(nèi)核鏡像。完成這一任務(wù)的工具是安裝于宿主機上的GNU交叉工具鏈,其具體工具主要是gcc編譯器、ld鏈接器的目標平臺架構(gòu)版本。 首先安裝對應(yīng)目標平臺的工具鏈,將工具鏈的二進制程序路徑輸出為PATH環(huán)境變量,將其依賴的庫文件路徑輸出為LD_LIBRARY_PATH變量,然后執(zhí)行內(nèi)核配置命令make menuconfig,根據(jù)實際系統(tǒng)需求對內(nèi)核模塊進行裁剪配置并保存配置文件;然后執(zhí)行編譯命令make bzImage進行交叉編譯生成所需內(nèi)核鏡像,執(zhí)行編譯模塊命令生成內(nèi)核所需模塊。 根文件系統(tǒng) 對于根文件系統(tǒng)的開發(fā),重點在于針對不同應(yīng)用交叉編譯相應(yīng)庫文件,并搭配適當系統(tǒng)命令和應(yīng)用程序,完成整個系統(tǒng)的運作支持。一個最基本的根文件系統(tǒng)一般包括以下幾個部分: 系統(tǒng)命令:完成如文件查看、掛載、系統(tǒng)進程查看等基本工作的Linux命令集合。在對系統(tǒng)體積要求較高的嵌入式Linux系統(tǒng)開發(fā)中,最常用的是busybox工具。 配置文件:保存系統(tǒng)服務(wù),應(yīng)用程序等的配置信息。一般可參考完整Linux系統(tǒng)上的配置文件。 設(shè)備文件:系統(tǒng)中使用的設(shè)備,以文件形式存放于/dev下,一般裝有udev工具即可動態(tài)生成設(shè)備文件。 庫:內(nèi)核模塊、應(yīng)用程序等各程序運行所需庫文件。具體庫文件包含的內(nèi)容應(yīng)根據(jù)實際運行的程序來決定,可用ldd命令輔助查找程序所需庫。 應(yīng)用程序:完成系統(tǒng)應(yīng)用所需的應(yīng)用程序。如手持終端中常用的QT圖形程序。 程序開發(fā)及GDB調(diào)試模式 嵌入式上層應(yīng)用軟件的開發(fā)及調(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)試硬件層服務(wù)的基礎(chǔ)上進行調(diào)試。 整體系統(tǒng)測試 對整個系統(tǒng)的測試主要分為功能測試和性能測試兩部分。 功能測試:測試系統(tǒng)在完成指定應(yīng)用時的正確性、操控性等指標。具體測試標準視應(yīng)用而定,由測試人員執(zhí)行應(yīng)用程序完成測試。 性能測試:測試系統(tǒng)運行時的穩(wěn)定性、效率等指標。具體測試工具可使用LTP、LMBench等行業(yè)通用開源測試套件,測試結(jié)果標準也可參照上述工具給出,由測試人員執(zhí)行測試用例腳本等方式完成測試。 嵌入式Linux開發(fā)及其工具的發(fā)展趨勢 上述分析看出,嵌入式Linux系統(tǒng)對開發(fā)環(huán)境有較高要求,不僅要大量工具組合使用,且其版本兼容性問題也一直困擾開發(fā)者。鑒于此,很多Linux開發(fā)者、開源企業(yè)都將思路轉(zhuǎn)向研究開發(fā)一整套嵌入式集成開發(fā)環(huán)境以提高開發(fā)效率上來。 一個完整的嵌入式Linux集成開發(fā)平臺通常包括上述各開發(fā)步驟涉及的工具和集成用戶界面。集成開發(fā)工具的開發(fā),對嵌入式linux行業(yè)而言,是一項既有高技術(shù)生命周期,又有可觀經(jīng)濟價值的綜合開發(fā)解決方案。和過去相比,越來越多的開發(fā)者開始使用集成開發(fā)工具。 LinuxDevices第六個年度報告指出,2006年,只有56%的被調(diào)查者在使用免費工具,比去年下降了2%;而商業(yè)工具的使用,則從去年的9%提高到15%(如圖2)。 圖2 2006年嵌入式Linux開發(fā)工具采用情況 優(yōu)秀的嵌入式Linux集成開發(fā)平臺應(yīng)具備完整的開發(fā)能力、易于使用和整合、方便進行大型工程組織的協(xié)調(diào)控制、有較好產(chǎn)品品質(zhì)和支持,在現(xiàn)有嵌入式Linux集成開發(fā)工具中,這些功能都還需進一步提高以滿足行業(yè)開發(fā)專業(yè)性需求。當然其中也不乏一些較為成功的產(chǎn)品,例如本土Linux廠商中科紅旗公司新近推出的嵌入式開發(fā)工具DevsPartner1.0。 |