嵌入式Linux開發綜述

嵌入式Linux開發綜述

建立目標板Linux的基本步驟

建立目標板Linux系統有4個重要的步驟:

(1)決定系統組件

Linux具有大量可選軟件,應當爲目標系統列出必須的功能清單

(2)配置並建立內核

選擇合適的Linux內核版本與適當的配置

建立內核

(3)建立根文件系統

(4)設置引導軟件與配置

開發嵌入式Linux系統最常用的主機類型

開發嵌入式Linux系統最常用的主機類型有如下:

(1)Linux工作站

通常就是一臺安裝了某個標準的Linux發行套件的PC機,如Debian、Mandrake、Red Hat等。需約2、3G或更多的磁盤空間進行嵌入式Linux開發。建議具有128或以上的RAM及交換空間。

(2)Unix工作站

由於Linux與Unix非常相似,對Linux適用的通常對Unix也適用

(3)Windows工作站

許多開發者比較習慣Windows平臺,並希望在Windows平臺上開發嵌入式Linux系統。

Cygwin:可在Windows平臺上建立跨平臺開發工具鏈;

VMWare:可在虛擬環境中執行Linux,並在Linux上進行嵌入式Linux的開發。

主機/目標機的開發體系結構

在嵌入式Linux系統開發中,存在3種主機/目標機開發體系結構

1、連接式

目標板和主機通過一個物理線路(如串行線或者以太網連接)永久的連接在一起

好處:
目標代碼的傳送無需物理存儲設備參與,只需要上述連接就足夠了,在這種方式中,主機
包含了跨平臺開發環境,而目標板則包含了適當的引導加載程序、可用的內核以及最起碼的根文件系統。

另一種做法是,以遠程組件來簡化目標板的開發工作,例如通過TFTP下載內核此外,根文件系統還可以通過NFS安裝,而不必在目標板中使用存儲介質;還可以使用連接進行調試,通常使用以太網連接進行下載功能,而使用RS232串口連接進行調試.

TFPT:Trivial File Transfer Protocol小型文件傳輸協議,比FTP簡單;

NFS:Network File System網絡文件系統,允許訪問遠程計算機上的文件。

2、使用可移動存儲設備

主機和目標板之間沒有實際的連接。先由主機將數據寫入存儲設備,然後將存儲設備轉接到目標板,並使用該存儲設備引導目標板。同樣的,在主機上包含了跨平臺開發環境。而目標板則只包含了最起碼的引導加載程序。其餘的組件被存放在可移動存儲設備上。

一種通常的操作方式使用易插拔的flash芯片:先在主機上使用flash編程器將數據寫入芯片,然後再將該芯片插入目標板上的插座中。

3、獨立開發式

在這種設置中,目標板是個獨立的開發系統,它包含了引導、操作以及開發額外軟件所必須的任何軟件。不需要跨平臺開發環境,不必在主機和目標板之間傳送任何數據。這適合以PC爲主的高級嵌入式系統的開發。

主機/目標板的調試方式

用來連接目標板與主機進行調試的接口基本上有3種類型:串行線、網絡接口和特殊的調試硬件(包括BDM、JTAG)。

1、使用串行線進行調試

這是從主機對目標板進行調試的最簡單的做法。缺點:串行連接的速度比較有限;當嵌入式系統中只有一個串行串口,或者串行連接是嵌入式系統對外唯一的接口,那麼就不可能在對系統調試的同時,以終端仿真器跟系統交互。

2、使用網絡接口進行調試

這種方式與串行線連接相比,可以提供較高的帶寬。由於可以在相同的物理網絡連接上使用多重網絡連接,可以兼顧調試與終端仿真交互。缺點:
無法使用網絡連接對Linux內核進行調試。因爲網絡協議棧本身在Linux內核裏。相對而言,內核的調試通常可以通過串行連接來進行。

3、使用特殊的調試硬件

通常會使用BDM或JTAG接口。這些接口依靠的是CPU芯片中內嵌的BDM或JTAG特殊功能。只要將一個特殊的調試器連接到CPU上的JTAG或BDM相關管腳,就可以完全控制CPU的行爲。因此,當遇到新的嵌入式目標板、或者對目標板上的Linux內核進行調試時,通常會使用JTAG和BDM。

BDM:Background Debug Mode,背景調試模式

JTAG:Joint Test Action Group,聯合測試小組,採用IEEE 1149.1,測試存取口和邊界掃描標準。

嵌入式Linux系統的一般架構

如圖所示,包含4個部分:(1)硬件(2)內核(3)文件系統等(4)應用程序/庫。

1、硬件

目標板的硬件必須符合一些要求方能執行Linux系統。一般如下:至少32位CPU;一般情況下必須配備MMU(對於不配備MMU的考慮使用uClinux);RAM容量必須滿足系統的需要;一些最起碼的I/O能力,以便在線調試;具有某種形式的永久性或網絡存儲設備以便內核加載及(或)存取根文件系統。

Linux內核

Linux內核是Linux操作系統的中心組件。使用內核的目的是希望以一致的方式管理硬件,以及爲用戶軟件提供高層抽象層。內核大致可以分成兩個部分:底層接口層和高層抽象層。

底層接口層專屬於硬件配置,內核運行其上,並以硬件無關的高層抽象層提供對硬件資源的直接控制。比如,對於PPC和ARM系統,儘管其寄存器或內存分頁的處理方式不同,但卻可以使用通用的API來存取內核裏高層的組件。通常底層部分會處理CPU特有的操作、架構特有的內存操作以及設備的基本I/O。

2、文件系統和網絡協議等

在Linux內核的底層接口層與高層抽象層之間,內核有時會用到與特定設備上的結構化數據交互的組件,例如文件系統和網絡協議。通常,Linux內核至少需要一個具有合適結構的根文件系統。Linux內核會從中加載第一個應用程序、加載模塊併爲進程提供工作目錄。

3、應用程序/庫

內核上面是應用程序和工具程序。鏈接庫通常與應用程序動態鏈接在一起。

嵌入式Linux系統的啓動過程

在系統啓動過程裏,有3個主要軟件組件參與其中:(1)引導加載程序;(2)內核;(3)Init進程。

1、引導加載程序

引導加載程序是系統啓動過程中執行的第一個軟件,它與目標板的硬件有高度的依賴關係。Linux有許多引導加載程序可用。引導加載程序在完成底層硬件初始化工作後會接着跳到內核的啓動程序代碼執行。

2、內核

內核一開始的啓動程序代碼會因架構不同而有很大的差異,而且在爲C程序代碼設置合適的執行環境之前,它會先爲自己進行初始化工作。

完成以上工作後,內核會跳到與架構無關的start_kernel函數執行,此函數會初始化高層內核功能,安裝根文件系統,以及啓動init進程。

3、Init進程

啓動各種應用程序(根據設置而定)。

嵌入式Linux系統的引導配置的類型

Linux系統的引導配置與所選用的引導加載程序、它的配置以及主機中軟硬件的類型有非常密切的關係。

1、固態存儲媒體引導配置方式

固態存儲媒體用於存放最初的引導加載程序、配置參數、內核和根文件系統。嵌入式Linux系統在開發的不同階段可能會使用不同的引導配置,但大部分在開發完成後使用固態存儲媒體。

2、磁盤引導配置方式

磁盤引導配置方式廣泛應用於工作站及服務器中,此時內核和根文件系統位於磁盤上。最初的內核加載程序不是從磁盤上加載,第二個內核加載程序就是直接從磁盤獲得內核本身。這可以用於嵌入式系統的開發階段。但是它要求目標板上能夠使用硬盤或者具有模仿硬盤的裝置。

3、網絡引導配置方式

網絡引導配置方式中,存在兩種情況:(1)內核位於固態存儲設備上或磁盤上,需要通過NFS安裝根文件系統;(2)只有內核加載程序位於目標板的存儲設備上,需要通過TFTP下載內核和根文件系統(或NFS)。這種方式往往用於開發初期。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章