針對ARM-Linux程序的開(kāi)發(fā),主要分為三類(lèi):應用程序開(kāi)發(fā)、驅動(dòng)程序開(kāi)發(fā)、系統內核開(kāi)發(fā),針對不同種類(lèi)的軟件開(kāi)發(fā),有其不同的特點(diǎn)。今天我們來(lái)看看ARM-Linux開(kāi)發(fā)和MCU開(kāi)發(fā)的不同點(diǎn),以及ARM-Linux的基本開(kāi)發(fā)環(huán)境。
1. ARM-Linux應用開(kāi)發(fā)和單片機開(kāi)發(fā)的不同
這里先要做一個(gè)說(shuō)明,對于A(yíng)RM的應用開(kāi)發(fā)主要有兩種方式:一種是直接在A(yíng)RM芯片上進(jìn)行應用開(kāi)發(fā),不采用操作系統,也稱(chēng)為裸機編程,這種開(kāi)發(fā)方式主要應用于一些低端的ARM芯片上,其開(kāi)發(fā)過(guò)程非常類(lèi)似單片機,這里不多敘述。還有一種是在A(yíng)RM芯片上運行操作系統,對于硬件的操作需要編寫(xiě)相應的驅動(dòng)程序,應用開(kāi)發(fā)則是基于操作系統的,這種方式的
嵌入式應用開(kāi)發(fā)與單片機開(kāi)發(fā)差異較大。ARM-Linux應用開(kāi)發(fā)和單片機的開(kāi)發(fā)主要有以下幾點(diǎn)不同:
(1)應用開(kāi)發(fā)環(huán)境的硬件設備不同
單片機:開(kāi)發(fā)板,
仿真器(調試器),
USB線(xiàn);
ARM-Linux:開(kāi)發(fā)板,網(wǎng)線(xiàn),串口線(xiàn),SD卡;
對于A(yíng)RM-Linux開(kāi)發(fā),通常是沒(méi)有硬件的調試器的,尤其是在應用開(kāi)發(fā)的過(guò)程中,很少使用硬件的調試器,程序的調試主要是通過(guò)串口進(jìn)行調試的;但是需要說(shuō)明的是,對于A(yíng)RM芯片也是有硬件仿真器的,但通常用于裸機開(kāi)發(fā)。
(2)程序下載方式不同
單片機:仿真器(調試器)下載,或者是串口下載;
ARM-Linux:串口下載、tftp網(wǎng)絡(luò )下載、或者直接讀寫(xiě)SD、MMC卡等存儲設備,實(shí)現程序下載;
這個(gè)與開(kāi)發(fā)環(huán)境的硬件設備是有直接關(guān)系的,由于沒(méi)有硬件仿真器,故ARM-Linux開(kāi)發(fā)時(shí)通常不采用仿真器下載;這樣看似不方便,其實(shí)給ARM-Linux的應用開(kāi)發(fā)提供了更多的下載方式。
(3)芯片的硬件資源不同
單片機:通常是一個(gè)完整的計算機系統,包含片內RAM,片內FLASH,以及UART、I2C、AD、DA等各種外設;
ARM:通常只有CPU,需要外部
電路提供RAM以供ARM正常運行,外部電路提供FLASH、SD卡等存儲系統映像,并通過(guò)外部電路實(shí)現各種外設功能。由于A(yíng)RM芯片的處理能力很強,通過(guò)外部電路可以實(shí)現各種復雜的功能,其功能遠遠強于單片機。
(4)固件的存儲位置不同
單片機:通常具備片內f(wàn)lash存儲器,固件程序通常存儲在該區域,若固件較大則需要通過(guò)外部電路設計外部flash用于存儲固件。
ARM-Linux: 由于其沒(méi)有片內的flash, 并且需要運行操作系統,整個(gè)系統映像通常較大,故ARM-Linux開(kāi)發(fā)的操作系統映像和應用通常存儲在外部的MMC、SD卡上,或者采用SATA設備等。
(5)啟動(dòng)方式不同
單片機:其結構簡(jiǎn)單,內部集成flash, 通常是芯片廠(chǎng)商在程序上電時(shí)加入固定的跳轉指令,直接跳轉到程序入口(通常在flash上);開(kāi)發(fā)的應用程序通過(guò)編譯器編譯,采用專(zhuān)用下載工具直接下載到相應的地址空間;所以系統上電后直接運行到相應的程序入口,實(shí)現系統的啟動(dòng)。
ARM-Linux:由于采用ARM芯片,執行效率高,功能強大,外設相對豐富,是功能強大的計算機系統,并且需要運行操作系統,所以其啟動(dòng)方式和單片機有較大的差別,但是和家用計算機的啟動(dòng)方式基本相同。其啟動(dòng)一般包括BIOS,bootloader,內核啟動(dòng),應用啟動(dòng)等階段;
(a)啟動(dòng)BIOS: BIOS是設備廠(chǎng)家(芯片或者是電路板廠(chǎng)家)設置的相應啟動(dòng)信息,在設備上電后,其將讀取相應硬件設備信息,進(jìn)行硬件設備的初始化工作,然后跳轉到bootloader所在位置(該位置是一個(gè)固定的位置,由BIOS設置)。(根據個(gè)人理解,BIOS的啟動(dòng)和單片機啟動(dòng)類(lèi)似,需要采用相應的硬件調試器進(jìn)行固件的寫(xiě)入,存儲在一定的flash 空間,設備上電啟動(dòng)后讀取flash空間的指令,從而啟動(dòng)BIOS程序。)
(b)啟動(dòng)bootloader: 該部分已經(jīng)屬于嵌入式Linux軟件開(kāi)發(fā)的部分,可以通過(guò)代碼修改定制相應的bootloader程序,bootloader的下載通常是采用直接讀寫(xiě)SD卡等方式。即編寫(xiě)定制相應的bootloader,編譯生成bootloader映象文件后,利用工具(專(zhuān)用或通用)下載到SD卡的MBR區域(通常是存儲區的第一個(gè)扇區)。此時(shí)需要在BIOS中設置,或者通過(guò)電路板的硬件電路設置,選擇bootloader的加載位置;若BIOS中設置從SD卡啟動(dòng),則BIOS初始化結束后,將跳轉到SD卡的位置去執行bootloader,從而實(shí)現bootloader的啟動(dòng)。
Bootloader主要作用是初始化必要的硬件設備,創(chuàng )建內核需要的一些信息并將這些信息通過(guò)相關(guān)機制傳遞給內核,從而將系統的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),最終調用操作系統內核,真正起到引導和加載內核的作用。
(c)啟動(dòng)內核 :bootloader啟動(dòng)完成初始化等相關(guān)工作之后,將調用內核啟動(dòng)程序。這就進(jìn)入了實(shí)際的操作系統相關(guān)內容的啟動(dòng)了,包括相應的硬件配置,任務(wù)管理,資源管理等內核程序的啟動(dòng)。
(d)啟動(dòng)應用:在操作系統內核啟動(dòng)之后,就可以開(kāi)始啟動(dòng)需要的應用,去完成真正的業(yè)務(wù)操作了。
2. Arm-Linux 基本開(kāi)發(fā)環(huán)境
前面介紹了ARM-Linux應用開(kāi)發(fā)和單片機開(kāi)發(fā)的不同之處,相信你已經(jīng)對ARM-Linux應用開(kāi)發(fā)有了一個(gè)基本的認識了,下面將介紹一下ARM-Linux的基本開(kāi)發(fā)環(huán)境。其主要包括硬件環(huán)境和軟件環(huán)境兩個(gè)部分,這里以iMX53和
Ubuntu為例進(jìn)行說(shuō)明。
(1)硬件環(huán)境
開(kāi)發(fā)板:ARM運行的硬件環(huán)境,或者是相應項目的ARM電路板;
計算機:作為開(kāi)發(fā)主機使用,安裝Linux(如Ubuntu)),或者采用虛擬機安裝Ubuntu;
串口線(xiàn):用于開(kāi)發(fā)過(guò)程中采用終端進(jìn)行串口調試或下載程序;
網(wǎng)線(xiàn):用于連接arm-board和開(kāi)發(fā)主機,實(shí)現tftp下載內核(程序等),通過(guò)網(wǎng)絡(luò )nfs運行程序等。
SD卡(及讀卡器)或者其他存儲設備:用于存儲bootloader、內核映像等,以及最終的軟件系統的存儲;開(kāi)發(fā)過(guò)程中,通常用于保存bootloader,引導系統啟動(dòng)。
(2)軟件環(huán)境
Ubuntu: 作為操作系統,是整個(gè)軟件開(kāi)發(fā)環(huán)境的載體,相應的開(kāi)發(fā)工具都布置在此系統中。
LTIB: 這是freescale的提供的一個(gè)編譯工具鏈,能夠很方便的將源代碼文件編譯為適合的程序代碼,并對程序進(jìn)行調試;用戶(hù)也可以通過(guò)下載源碼構建自己的編譯工具鏈。
tftp: 用于從開(kāi)發(fā)主機Ubuntu上向arm-board 下載內核文件、應用文件等。
nfs網(wǎng)絡(luò )文件系統:用于在開(kāi)發(fā)主機上建立網(wǎng)絡(luò )nfs文件根系統,arm-board通過(guò)nfs網(wǎng)絡(luò )文件系統讀取開(kāi)發(fā)主機上的虛擬根文件系統,完成系統的啟動(dòng);方便系統的開(kāi)發(fā)與調試。
minicom:串口調試工具,用于在開(kāi)發(fā)主機上與arm-board通信,實(shí)現對arm-board上應用程序的操作與調試;
Eclipse:集成開(kāi)發(fā)環(huán)境,主要方便代碼的編輯、編譯等,也可采用DS5,RealView等;或者采用gedit進(jìn)行編輯,通過(guò)LTIB進(jìn)行編譯和管理。