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