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