基于ARM的嵌入式Linux應用程序開發研究
0 引 言
本文引用地址:http://www.104case.com/article/104204.htm當今社會,嵌入式系統已經滲透到人們工作、生活中的各個領域,嵌入式處理器已占分散處理器市場份額的94%。而嵌入式Linux系統也蓬勃發展,不僅繼承了Linux源碼開放、內核穩定高效、軟件豐富等優勢,還具備支持廣泛處理器結構和硬件平臺、占有空間小、成本低廉、結構緊湊等特點。
1 ARM處理器及開發板
在嵌入式領域,ARM已取得了極大的成功,造就了IP核商業化、市場化的神話。據統計,全球有103家巨型IT公司在采用ARM技術,20家最大的半導體,一商中有19家是ARM的用戶。ARM系列芯片已經被廣泛的應用于移動電活、手持式計算機以及各種各樣的嵌入式應用領域,成為世界上銷量最大的32位微處理器。ARM已成為業界實際的RISC芯片標準。
ARM系列處理器根據各自特點應用于不同領域。從應用的角度上ARM芯片選擇的一般原則:MMU;處理器速度;內置存儲器容量;USB接口;GPIO數量;中斷控制器;IIS(integrate interface ofsound)音頻接口;nWAIT信號;RTC(real timeclock);LCD控制器;PWM輸出等各項指標。
本文使用的是ARM9,其性能遠遠高過ARM7。開發板使用的是廣州斯道信息技術有限公司的開發板,中央處理器是三星公司的S3C2410。ARM9具有以下特點:5級流水線;采用哈佛結構;高速緩存和寫緩存的引入;支持MMU。
2嵌入式Linux系統
嵌入式操作系統是嵌入式應用軟件的基礎和開發平臺,它的出現解決了嵌入式軟件開發標準化的難題。嵌入式系統具有操作系統的最基本的功能。目前主流的嵌入式系統有以下兒種:Linux、VxWorks、QNX、Windows CE、Palm OS。
嵌入式Linux操作系統具有一些獨特的優勢:層次結構及內核完全開放;強大的網絡支持功能;具備一整套工具鏈;廣泛的硬件支持特性。
嵌入式Linux系統有很多種。本文使用的是Red Hat9操作系統。
在安裝有Windows和Linux雙系統的PC上,系統會以Linux的GRUB作為引導裝入器來選擇啟動二者。此時若直接刪除Linux分區,會導致系統無法啟動Windows或者是需要用行命令才能啟動Windows。可以先使用虛擬機安裝Linux系統,練習使用,熟悉后再在PC上安裝。
3應用程序開發
一般嵌入式開發流程如圖1所示。

這里省略前面三步,從開發應用程序開始。
3.1交叉開發環境建立
對嵌入式系統而言,只裝備必要的資源是前提條件,這也決定了嵌入式應用程序的開發環境不可能是資源有限的嵌入式系統,只能利用資源豐富的PC開發,然后建立交叉開發平臺。
交叉編譯器(cross-compiler)是進行交叉平臺開發的主要軟件工具。它是運行在一種處理器體系結構上,但是可以生成在另一種不同的處理器體系結構上運行的目標代碼的編譯器。 要建立交叉開發環境,主要需要幾個工具包:gcc,glib,binutils,gdb等。一般開發板都提供這些工具,如果不是使用的開發板,在網上也是可以下載到全部軟件包的。依次將它們安裝在PC上即可。
Linux的軟件安裝方法與Windows不同。Linux中根據不同的壓縮打包方式使用不同的命令安裝。在安裝過程中,由于軟件包之間的依賴關系,系統可能會警告還有哪些沒有安裝,可以忽略這些警告。
3.2 U-Boot
在U-Boot(UniversalBootloader)之前,先介紹一下Bootloader。簡單的說,Bootloader就是在操作系統內核運行之前的一段引導程序,類似于PC中的BIOS。通過它,可以完成對應硬件設備的初始化,并建立內存空間的映射圖的功能,為最終調用系統內核做好準備。
U-Boot是遵循GPL條款的開放源碼項目,它不僅僅支持嵌人式Linux系統的引導,U-Boot中Universal的一層含義就是在于U-Boot支持多種嵌入式操作系統,就目前來看,U-Boot對Linux的支持最完善。另外一層含義則是U-Boot支持多種常用系列的處理器。
U-Boot支持的主要功能:系統引導;基本輔助功能(操作系統接口功能;可靈活設置、傳遞多個關鍵參數給操作系統;支持目標板多種存儲方式;CRC32校驗);設備驅動;上電自檢功能;特殊功能(XIP內核引導)。
U-Boot移植主要分為兩步:配置主板和設置Flash和SDRAM時序。
3.3嵌入式Linux系統內核編譯和移植
嵌入式Linux內核的編譯都是通過make的不同命令實現的,一般分為3步:(1)內核配置。主要是用戶用于為目標板選擇處理器架構的選項。內核支持4種方法的配置,雖然界面不同,但功能是一樣的,其中make menuconfig使用最廣泛;(2)建立依賴關系。在第一次編譯時發生,產生.de-pend文件,運行make dep即可;(3)建立內核。這里建立的是壓縮的內核映像,使用make zIm-age或make bzImage。這樣就完成了編譯,下載在開發板即可。
一般來說與開發板通信有3種方式:網絡下載(tftp,ftp等),串口下載和USB下載。用tftp下載,需要配置Linux下的tftp服務,然后將PC和開發板直連線(非網線)即可;用串口下載,需要配置Linux下的串日通信工具Minicom。配置的主要是一些重要參數,如波特率。
但是只有系統內核是不夠的,要使系統正常啟動,還需要加載文件系統,所以需要制作文件系統??梢允止ぶ谱鳎枪ぷ髁刻?,一般是把現有文件系統加載到目標板,包括制作文件系統鏡像和用NFS加載文件系統方法。
開發板上一般已經燒寫好了嵌入式系統內核鏡像,文件系統和前面講的U-Boot,在掌握了燒寫方法后,可以自己下載。
3.4源程序的獲得、編譯和調試
由于Linux是開源軟件,所以運行在其下的應用軟件也是開源軟件,不管是哪一類的都免費獲得源代碼??梢灾苯釉谝延械脑创a上進行修改得到符合要求的代碼。論文中使用的就是已有的源代碼,如圖2所示。

Linux操作系統支持匯編,C,C++,Basic,Fortran,Pascal,JAVA,PHP等多種編程語言。其下的文本編輯器是Vi和Emacs,二者均有強大的編輯功能。圖形界面的編程用的是Qt或是MiniGUI。利用以上軟件,跟在Windows和其他操作系統下的軟件編寫方法完全相同。
編寫軟件的過程與在其他系統下沒有什么不同,不同的地方在與編譯和調試。嵌入式中稱之為交叉編譯和交叉調試。
交叉編譯就是將在PC上編寫好的源代碼經過編譯、鏈接生成可以在嵌入式系統上運行的代碼,如圖2所示。
在交叉調試中,調試器和被調試程序分別在PC系統和嵌入式系統中,這是與一般調試不同的地方。交叉調試一般分為軟件調試和硬件調試。
軟件調試插入調試樁的方式進行。典型的是GDB調試器,它分為GdbServer和GdbClient,前者作為調試樁安裝在arm的嵌入式系統中,后者駐于本地PC中,二者可通過串口、網口、并口通信。
硬件調試一般都使用的是仿真器,常用的如ROMMonitor、ROMEmulator、In-CircuitEmulator和In-CircuitDebugger。硬件調試功能更強大,性能更優秀,但是有的價格昂貴,額外的設備增加了成本。而ARM的JTAG端口實現在CPU內部調試,通過端口發送命令和接收信息。
JTAG采用的主要技術為邊界掃描技術,它的基本思想就是在靠近芯片的輸入輸出管腳上增加一個移位寄存器單元。當芯片處于調試狀態時候,這些邊界掃描寄存器可以將芯片和外圍的輸入輸出隔離開來。通過這些邊界掃描寄存器單元,可以實現對芯片輸入輸出信號的觀察和控制,它提供了一個便捷的方式用于觀測和控制所需要調試的芯片。通過JTAG接口可以方便地對目標系統進行測試,同時,還可以實現Flash的編程,是非常受人歡迎的調試方式。
4結 論
主機從網絡下載mp3格式歌曲,通過串口(或tftp)傳送到開發板上,用經過調試的播放器,結合教研室開發的功率放大器,很好的實現了播放音頻的功能。
在此基礎上,還可以進一步開發視頻播放功能。除了播放器應用軟件,還可以根據存儲器的大小增加其他應用程序。
linux操作系統文章專題:linux操作系統詳解(linux不再難懂)
評論