ARM嵌入式系統的軟件開發方法
從軟件開發的角度出發,一個嵌入式Linux系統可以分為4個層次。
(1)引導和加載Linux內核的程序,主要是用戶自己編制的Boot-loader程序。Boot-loader的功能相當于PC的BIOS,在硬件板一加電后就開始運行,它要用串行電纜把PC與硬件開發板連接起來,在PC端通過對程序的編譯,生成一個bin文件,通過簡易的JTAG探頭,把它燒寫到Nand-Flash。
Boot-loader主要完成硬件初始化,同時設置Linux啟動時所需要的參數,然后跳到Linux內核啟動代碼的第一個字節開始引導Linux。
(2)Linux內核,為特定的嵌入式硬件系統板定制的內核及內核的啟動參數。為了實現Linux內核的移植,要把編譯生成的Boot-loader,Kernal Image(內核)及Root Filesystem(根文件系統)燒寫到Hash中。在編譯內核的時候,還可以選擇需要支持的網絡協議,所支持的主要協議包括TCP/IP(如TCP、IP、UDP、ICMP、ARP、RARP、FTP、TFTP、BOOTP、DHCP、RIP、OSPF、HTTP等)。由于內核己經支持多種網絡協議,因此通過加載不同的應用程序,就可以實現相應類型的應用。
(3)和Linux內核配合使用的根文件系統,包括建立根文件系統和建立于Flash設備上的文件系統。將文件系統也燒寫到Hash后,Linux就可以在硬件板上正常運行了。
(4)用戶應用程序。為了使人機交互界面友好,通常在用戶應用程序和Linux內核層之間移植一個嵌入式圖形用戶界面(Graphic User Interface,GUI)。
2. 軟件開發環境構建
對于Linux下的ARM開發環境,最重要的是一個交叉編譯器,其次是一個標準的C庫。然而編譯一個可靠的ARM交叉編譯器,是非常復雜的工作,有兩個方法可以得到一個ARM交叉編譯器。
(1)到專門為ARM開發建立的網站下載一個別人編譯好的編譯器,如網站ftp∶//ftp.arm.linux.Org.uk/pub/armlinux/toolcham,這里提供了多個版本的交叉編譯器,它們都是基于glibc的C庫,但glibc的C庫比較龐大,不適合作為小型的嵌入式系統開發使用。所以可以選擇第二種方法去構造一個基于更小的C庫μClibc的編譯器。
(2)編譯一個交叉編譯器,雖然這個工作非常復雜,但Linux平臺下面有全世界的愛好者在共同維護,所以可以找到許多編譯一個交叉編譯器的方法。
www.μClibc.Org網站中提供了一個基于pClibc的C庫交叉編譯器的構造方法,這個編譯器是針對多平臺的。μClibc是原來μCLinux(一個專門用于沒有MMU的嵌入式芯片使用的Linux版本)開發過程中的一個C庫,現在已經獨立于μLinux項目并且進一步完善。它目前己經可以支持很多的系統平臺,而且它比glibc更加小巧,非常適合作為嵌入式的開發。很多原來基于glibc開發的軟件在μClibc下面也可以很方便地移植,甚至無須做任何改動就可以編譯運行。;μClibc對glibc的大部分函數都做了重寫,并且保持名稱一樣。利用μClibc構建嵌入式Linux系統將比glibc占用更小的空間。
構建好了軟件開發環境或交叉編譯器,就可以在PC上編譯ARM運行的程序了,對調試各個硬件程序模塊和移植ARM Linux/GUI系統很有幫助。
linux操作系統文章專題:linux操作系統詳解(linux不再難懂)
linux相關文章:linux教程











評論