1. 程式人生 > >基於ARM的嵌入式Linux應用程式開發

基於ARM的嵌入式Linux應用程式開發

0 引 言

  當今社會,嵌入式系統已經滲透到人們工作、生活中的各個領域,嵌入式處理器已佔分散處理器市場份額的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、WINOOWs CE、Palm OS。

  嵌入式Linux作業系統具有一些獨特的優勢:層次結構及核心完全開放;強大的網路支援功能;具備一整套工具鏈;廣泛的硬體支援特性。

  嵌入式Linux系統有很多種。本文使用的是Red Hat9作業系統。

  在安裝有WINOOWs和Linux雙系統的PC上,系統會以Linux的GRUB作為引導裝入器來選擇啟動二者。此時若直接刪除Linux分割槽,會導致系統無法啟動WINOOWs或者是需要用行命令才能啟動WINOOWs。可以先使用虛擬機器安裝Linux系統,練習使用,熟悉後再在PC上安裝。

3應用程式開發

  一般嵌入式開發流程如圖1所示。

  這裡省略前面三步,從開發應用程式開始。

  3.1交叉開發環境建立

  對嵌入式系統而言,只裝備必要的資源是前提條件,這也決定了嵌入式應用程式的開發環境不可能是資源有限的嵌入式系統,只能利用資源豐富的PC開發,然後建立交叉開發平臺。

  交叉編譯器(cross-compiler)是進行交叉平臺開發的主要軟體工具。它是執行在一種處理器體系結構上,但是可以生成在另一種不同的處理器體系結構上執行的目的碼的編譯器。 要建立交叉開發環境,主要需要幾個工具包:gcc,glib,binutils,gdb等。一般開發板都提供這些工具,如果不是使用的開發板,在網上也是可以下載到全部軟體包的。依次將它們安裝在PC上即可。

  Linux的軟體安裝方法與WINOOWs不同。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是開源軟體,所以執行在其下的應用軟體也是開源軟體,不管是哪一類的都免費獲得原始碼。可以直接在已有的原始碼上進行修改得到符合要求的程式碼。論文中使用的就是已有的原始碼,如圖2所示。

  Linux作業系統支援彙編,C,C++,Basic,Fortran,Pascal,JAVA,PHP等多種程式語言。其下的文字編輯器是Vi和Emacs,二者均有強大的編輯功能。圖形介面的程式設計用的是Qt或是MiniGUI。利用以上軟體,跟在WINOOWs和其他作業系統下的軟體編寫方法完全相同。

  編寫軟體的過程與在其他系統下沒有什麼不同,不同的地方在與編譯和除錯。嵌入式中稱之為交叉編譯和交叉除錯。

  交叉編譯就是將在PC上編寫好的原始碼經過編譯、連結生成可以在嵌入式系統上執行的程式碼,如圖2所示。

  在交叉除錯中,偵錯程式和被除錯程式分別在PC系統和嵌入式系統中,這是與一般除錯不同的地方。交叉除錯一般分為軟體除錯和硬體除錯。

  軟體除錯插入除錯樁的方式進行。典型的是GDB偵錯程式,它分為GdbServer和GdbClient,前者作為除錯樁安裝在arm的嵌入式系統中,後者駐於本地PC中,二者可通過串列埠、網口、並口通訊。

  硬體除錯一般都使用的是模擬器,常用的如ROMMonitor、ROMEmulator、In-CircuitEmulator和In-CircuitDebugger。硬體除錯功能更強大,效能更優秀,但是有的價格昂貴,額外的裝置增加了成本。而ARM的JTAG埠實現在CPU內部除錯,通過埠傳送命令和接收資訊。

  JTAG採用的主要技術為邊界掃描技術,它的基本思想就是在靠近晶片的輸入輸出管腳上增加一個移位暫存器單元。當晶片處於除錯狀態時候,這些邊界掃描暫存器可以將晶片和外圍的輸入輸出隔離開來。通過這些邊界掃描暫存器單元,可以實現對晶片輸入輸出訊號的觀察和控制,它提供了一個便捷的方式用於觀測和控制所需要除錯的晶片。通過JTAG介面可以方便地對目標系統進行測試,同時,還可以實現Flash的程式設計,是非常受人歡迎的除錯方式。

4結 論

  主機從網路下載mp3格式歌曲,通過串列埠(或tftp)傳送到開發板上,用經過除錯的播放器,結合教研室開發的功率放大器,很好的實現了播放音訊的功能。

  在此基礎上,還可以進一步開發視訊播放功能。除了播放器應用軟體,還可以根據儲存器的大小增加其他應用程式。