但是,許多這類開發工具都不兼容非X86平臺,而且也沒有很好地實現歸檔備案或集成。在其它開發環境下,組件間的高度集成并沒有完全兌現。因此,要想完全從這些免費的軟件組件開始創建一個完整的跨平臺開發環境,開發者應意識到這將需要大量的調研、實施、培訓和維護方面的工作。
Linux是少數既可以在嵌入式設備上運行也可作為開發環境的操作系統之一。這一特性可讓開發者在轉向此開發系統之前于常用硬件(比如X86桌面系統)之上開發、調試和測試應用程序和庫,因此可減少對標準參考平臺和指令集仿真器的依賴。這一技術僅適用于應用程序和庫,但不適用于設備驅動程序,因為后者的開發依賴于Linux架構。
開放源代碼團體及一些軟件供應商可提供設備驅動程序開發工具。由于設備驅動程序比標準應用程序距離硬件更近,因此它們的開發比較困難。所幸的是,Linux桌面系統可以利用一些Windows及其它操作系統所沒有的工具。有足夠經驗開發設備驅動程序的開發人員可能已經習慣將Linux作為他們的桌面開發系統了。
Linux的快速發展及其桌面方案的不斷涌現提出了一個重要問題:所選擇的工具方案怎樣在不同的Linux分布式系統上運行?它們依賴于主機平臺的軟件配置嗎?
有些Linux工具提供獨立于主機平臺的開發環境,包括一系列可支持開發工具的應用軟件、庫和實用程序。這一方法幾乎將開發環境與主機配置完全隔離開來,因此主機可以是任何Linux分布式系統,而且任何更新和修改都不會影響開發環境的功能。
這種方法的主要缺點是對存儲空間的要求有所增加——約200MB,因為它自己實際上相當于一個微型Linux分布式系統。
可用的工具
一個嵌入式Linux產品的開發需要幾個階段,包括為目標板配置和構建基本Linux OS;調試應用程序、庫、內核及設備驅動程序/內核模塊;出貨前終方案的優化、測試和驗證。
有數百種開放源代碼開發工具可供選擇。只要開發者原意花時間和精力去調研、實施和維護一系列各不相同的工具,總能找出一個完整的解決方案,完成幾乎任何開發任務。
在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工具及其它存儲器分析程序可完成部分測試和驗證任務。但總的來說,它們缺乏關鍵特性、集成功能及廣泛的硬件支持。這些開放源代碼分析工具的評估過程與評估調試方案的過程基本相同。
的分析就是,一個設計得恰到好處的開發環境應能夠提供商用和開放源代碼兩個世界所具有的特性:
* 交鑰匙開發能力;
* 易于使用和集成;
* 大型工程組織的協調控制;
* 品質和支持保證;
* 持續性;
* 按照自己的判斷力使用開放源代碼的能力。