❶ 嵌入式linux系統開發的具體步驟
第一步、建立交叉編譯環境
沒有交叉開發經驗的讀者,可能一時很難接受這個概念。首先,要明白兩個概念:一般
我們工作的機器,稱為開發機、主機;我們製作好的系統將要放到某台機器,如手機或另一
台PC機,這台機我們稱為目標主機。
我們一般開發機上已經有一套開發工具,我們稱之為原生開發套件,我們一般就是用它
們來寫程序,那麼,那什麼又是交叉編譯環境呢?其實一點也不神秘,也就是在開發機上再
安裝一套開發工具,這套開發工具編譯出來的程序,如內核、系統工作或者我們自己的程序,
是放在目標主機上運行的。
那麼或許有初學者會問,直接用原生開發工具為目標主機編譯程序不就完了?至少我當
初是這么想的。一般來說,我們的開發機都是X86 平台,原生開發套件開發的工具,也針
對X86 平台,而我們的目標主機可能是PowerPC、IXP、MIPS……所以,我們的交叉編譯
環境是針對某一類具體平台的。
一般來講,交叉開發環境需要二進制工具程序、編譯器、C鏈接庫,嵌入式開發常用的
這三類軟體是:
Binutils
Gcc
uClibc
當然,GNU包含的工具套件不僅於此,你還要以根據實際需要,進行選擇
第二步、編譯內核
開發工具是針對某一類硬體平台,內核同樣也是。這一步,我們需要用第一步中建立的
工具,對內核進行編譯,對於有內核編譯經驗的人來說,這是非常簡單的;
第三步、建立根文件系統
也就是建立我們平常看到的bin、dev、proc……這一大堆目錄,以及一些必備的文件;
另外,我們還需要為我們的目標系統安裝一些常用的工具軟體,如ls、ifconfig……當然,
一個辦法是找到這些工具的源代碼,用第一步建立的交叉編譯工具來編譯,但是這些軟體一
是數量多,二是某些體積較大,不適合嵌入式系統,這一步,我們一般都是用busybox來完
成的,包括系統引導軟體init;
最後,我們為系統還需要建立初始化的引導文件,如inittab……
❷ 嵌入式設備的嵌入式設備上的Linux系統開發
Linux正在嵌入式開發領域穩步發展。因為Linux使用GPL(請參閱本文後面的參考資料),所以任何對將Linux定製於PDA、掌上機或者可佩帶設備感興趣的人都可以從網際網路免費下載其內核和應用程序,並開始移植或開發。許多Linux改良品種迎合了嵌入式/實時市場。它們包括RTLinux(實時Linux)、uclinux(用於非MMU設備的Linux)、MontavistaLinux(用於ARM、MIPS、PPC的Linux分發版)、ARM-Linux(ARM上的Linux)和其它Linux系統
嵌入式Linux開發大致涉及三個層次:引導裝載程序、Linux內核和圖形用戶界配鎮鉛面(或稱GUI)。引導裝載程序通常是在任何硬體上執行的第一段代碼。在象台式機這樣的常規系統中,通常將引導裝載程序裝入主引導記錄(MasterBootRecord,(MBR))中,或者裝入Linux駐留的磁碟的第一個扇區中。通常,在台式機或其它系統上,BIOS將控制移交給引導裝載程序。
專用軟體可以直接與遠程系統上的快閃記憶體設備進行交互並將引導裝載程序安裝在快閃記憶體的給定位置中。快閃記憶體設備是與存儲設備功能類似的特殊晶元,而且它們能持久存儲信息—即,在重新引導時不會擦除其內容。旅腔
某些種類的嵌入式設備具有微小的引導代碼—根據幾個位元組的指令—它將初始化一些DRAM設置並啟用目標上的一個串列(或者USB,或者乙太網)埠與主機程序通信。然後,主機程序或裝入程序可以使用這個連接將引導裝載程序傳送到目標上,並將它寫入快閃記憶體。設置工具鏈在主機機器上創建一個用於編譯將在目標上運行的內核和應用程序的構建環境—這是因為目標硬體可能沒有與主機兼容的二進制執行級別。
工具鏈由一套用於編譯、匯編和鏈接內核及應用程序的組件組成。這些組件包括:Binutils—用於操作二進制文件的實用程序集合。它們包括諸如ar、as、objmp、obj這樣的實用程序。G—GNUC編譯器。Glibc—所有用戶應用程序都將鏈接到的C庫。避免使用任何C庫函數的內核和其它應用程序可以在沒有該培好庫的情況下進行編譯。構建工具鏈建立了一個交叉編譯器環境。本地編譯器編譯與本機同類的處理器的指令。交叉編譯器運行在某一種處理器上,卻可以編譯另一種處理器的指令。重頭設置交叉編譯器工具鏈可不是一項簡單的任務:它包括下載源代碼、修補補丁、配置、編譯、設置頭文件、安裝以及很多很多的操作。另外,這樣一個徹底的構建過程對內存和硬碟的需求是巨大的。如果沒有足夠的內存和硬碟空間,那麼在構建階段由於相關性、配置或頭文件設置等問題會突然冒出許多問題。
因此能夠從網際網路上獲得已預編譯的二進制文件是一件好事(但不太好的一點是,它們大多數只限於基於ARM的系統,但遲早會改變的)。一些比較流行的已預編譯的工具鏈包括那些來自Compaq(FamiliarLinux)、LART(LARTLinux)和Embedian(基於Debian但與它無關)的工具鏈—所有這些工具鏈都用於基於ARM的平台。從用戶的觀點來看,圖形用戶界面(GUI)是系統的一個最至關重要的方面:用戶通過GUI與系統進行交互。所以GUI應該易於使用並且非常可靠。但它還需要是有內存意識的,以便在內存受限的、微型嵌入式設備上可以無縫執行。所以,它應該是輕量級的,並且能夠快速裝入。
另一個要考慮的重要方面涉及許可證問題。一些GUI分發版具有允許免費使用的許可證,甚至在一些商業產品中也是如此。另一些許可證要求如果想將GUI合並入項目中則要支付版稅。
最後,大多數開發人員可能會選擇XFree86,因為XFree86為他們提供了一個能使用他們喜歡的工具的熟悉環境。但是市場上較新的GUI,象CenturySoftware的(Nano-X)和TrolltechQT/Embedded,與X在嵌入式Linux的競技舞台中展開了激烈競爭,這主要是因為它們佔用很少的資源、執行的速度很快並且具有定製窗口構件的支持。