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