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