概述
嵌入式Linux具有穩定、可擴充性及開放原始程式碼等特點,可相容多種處理器和主機,廣泛適用於各種產品和應用。但是,交叉編譯、裝置驅動程式開發/除錯,以及更小尺寸等要求對嵌入式Linux開發人員來說都是嚴峻的挑戰。為應對這些挑戰,針對嵌入式Linux開發的專用工具應運而生,而且發展十分迅速。
但是,許多這類開發工具都不相容非X86平台,而且也沒有很好地實現歸檔備案或整合。在其它開發環境下,組件間的高度整合并沒有完全兌現。因此,要想完全從這些免費的軟體組件開始製作一個完整的跨平台開發環境,開發人員應意識到這將需要大量的調查、實施、訓練和維護方面的工作。
Linux是少數既可以在嵌入式裝置上執行也可作為開發環境的作業系統之一。這一特性可讓開發人員在轉向此開發系統之前於常用硬體(比如X86案頭系統)之上開發、除錯和測試應用程式和庫,因此可減少對標準參考平台和指令集模擬器的依賴。這一技術僅適用於應用程式和庫,但不適用於裝置驅動程式,因為後者的開發依賴於Linux架構。
開放原始程式碼團體及一些軟體供貨商可提供裝置驅動程式開發工具。由於裝置驅動程式比標準應用程式距離硬體更近,因此它們的開發比較困難。所幸的是,Linux案頭系統可以利用一些Windows及其它作業系統所沒有的工具。有足夠經驗開發裝置驅動程式的開發人員可能已經習慣用Linux開發系統了。
Linux的快速發展及其案頭方案的不斷湧現突顯了一個重要問題:所選擇的工具方案應如何在不同的Linux分布式系統上執行?它們依賴於主機平台的軟體配置嗎?
有些Linux工具提供獨立於主機平台的開發環境,包括一系列可支援開發工具的應用軟體、庫和公用程式。這一方法幾乎將開發環境與主機配置完全隔離開來,因此主機可以是任何Linux分布式系統,而且任何更新和修改都不會影響開發環境的功能。
這種方法的主要缺點是對儲存空間的要求有所增加─約200MB,因為它自己實際上相當於一個微型Linux分布式系統。
可用的工具
一個嵌入式Linux產品的開發需要幾個階段,包括為目標板配置和建構基本Linux OS;除錯應用程式、庫、核心及裝置驅動程式/核心模組;出貨前最終方案的最佳化、測試和驗證。
有數百種開放原始程式碼開發工具可供選擇。只要開發人員原意花時間和精力去調查、實施和維護一系列各不相同的工具,總能找出一個完整的解決方案,完成幾乎任何開發工作單位。
圖1
開發人員必須精確地考慮到這些工具的鬆散集合能提供什麼樣的功能,以及需要付出多大的努力才能形成完整的解決方案。"
在Linux應用程式和庫的除錯方面,GNU Debugger (GDB)作為一種標準已有幾年的曆史。它是一種命令列程式,由多個不同的圖形使用者介面前端予以支援,每個前端都能以多種方式提供除錯控制功能。儘管GDB不是一個完美的方案,但它足夠應對各種除錯任務,而且已經得到開放原始程式碼團體的廣泛支援。
Linux核心或裝置驅動程式的除錯要比應用程式的除錯繁瑣得多。
在做調查時,以下方面應特別注意:
什麼除錯方法支援要開發產品的硬體?
需要什麼核心支援程式?
還需要其它什麼支援程式?
除錯介面怎麼樣,如何使用?
該工具需要除錯核心模組及處理虛擬位址轉換嗎?
還需要其它什麼工具才能提供完整的方案?
經過進一步的調查,開發人員往往發現工具A和工具B並沒有提供完全一致的功能,因為它們是在彼此獨立的情況下開發的。結果,開發人員必須精確地考慮到這些工具的鬆散集合能提供什麼樣的功能,還需要付出多大的努力才能形成完整的解決方案。
如果不同處理器類型間的整合、可用性、互連作業性和移植性很關鍵的話,開發人員應考慮購買商用開發工具。這主要是因為將開發一個'免費'方案所付出的努力考慮進去,商用開發工具並不算貴。
Linux BSP
Linux系統有兩大主要部份:帶裝置驅動程式的Linux核心;以及根檔案系統,包括系統所需的全部支援應用程式、服務和庫。
除了駐留在目標板上的OS組件外,還需要製作一個由GNU Compiler Collection構成的交叉編譯環境,為庫和二進位程式(binutils)提供支援。
雖然幾乎每一個組件都可在網上找到,但在硬體或裝置驅動程式支援、整合測試資訊、交叉編譯指南或軟體相容性方面卻很難收集到太多資訊。儘管開發人員可從網上免費下載各種組件以配置嵌入式Linux作業系統,但每個組件在版本、支援、穩定性和測試等方面的狀態則需要開發人員自己決定。然後,開發人員還要完成最後的OS整合和測試,以及為所開發產品提供終身Linux OS維護。
另一方面,嵌入式Linux供貨商所提供的商用Linux板支援工具套件一般都是經過預先安裝和測試的,而且提供支援和維護。其它須考慮的因素包括Linux案頭主機將會添加不同的庫和核心功能,以及由於組織內的開發人員變動而引起的長期維護問題。
品質保證部門一般會執行一系列嚴格的驗證和效能測試,其中包括記憶體流失檢測/糾正、程式碼最佳化和任務追蹤等。那些想利用開放原始程式碼工具開發針對非X86平台的嵌入式Linux產品開發人員將會發現這一任務甚至要比選擇開放原始程式碼除錯方案難得多。Linux Trace Toolkit、Valgrind工具及其它記憶體剖析器可完成部份測試和驗證任務。但總的來說,它們缺乏關鍵特性、整合功能及廣泛的硬體支援。這些開放原始程式碼分析工具的評估過程與評估除錯方案的過程基本相同。
最後的分析就是,一個設計得恰到好處的開發環境應能夠供貨商用和開放原始程式碼兩個世界所具有的最好特性:
* 完整的開發能力;
* 便於使用和整合;
* 大型工程組織的協調控制;
* 品質和支援保證;
* 持久性;
* 按照自己的判斷力使用開放原始程式碼的能力。
作者:David Beal 嵌入式Linux總監 Email:dbeal@metrowerks.com Metrowerks公司