新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 總有一款合適你--ARM下裸機(jī)開發(fā)環(huán)境大全

總有一款合適你--ARM下裸機(jī)開發(fā)環(huán)境大全

作者: 時(shí)間:2016-12-02 來(lái)源:網(wǎng)絡(luò) 收藏
一.什么是裸機(jī)開發(fā)

裸機(jī)是一種通俗的講法,就是指ARM設(shè)備上沒(méi)有任何現(xiàn)成的程序來(lái)支持你的開發(fā)的軟件運(yùn)行。它是相對(duì)設(shè)備上有在操作系統(tǒng)的情況運(yùn)行可執(zhí)行程序而言的。

這兩種程序有很大區(qū)別。在操作系統(tǒng)環(huán)境下,基本上跟桌面程序開發(fā)沒(méi)有太多區(qū)別,而裸機(jī)程序需要自己初始化硬件環(huán)境來(lái)運(yùn)行。因?yàn)楸仨氂幸恍《螀R編寫的引導(dǎo)代碼來(lái)初始化,并且直接操作硬件。

裸機(jī)程序一般采用少量匯編加C語(yǔ)言來(lái)編譯(理論上C++可以了,但比較少)主要用來(lái)ARM匯編,硬件控制教學(xué)。硬件驗(yàn)證和驅(qū)動(dòng)開發(fā)。

大型的程序bootloader,實(shí)時(shí)操作系統(tǒng)uCOS/Nclues嚴(yán)格講也是裸機(jī)程序。

而且ARM的CPU的都有JTAG的在線硬件調(diào)試接口,通過(guò)JTAG硬件調(diào)試器,可以直接運(yùn)行和單步調(diào)試裸機(jī)程序

二.裸機(jī)開發(fā)流程.

編碼-->編譯-->調(diào)試-->下載

1.編碼采用文本編輯器或相應(yīng)IDE均可

2.編譯器目前主要是兩大類

armcc (ARM出品的編譯器)

arm-linux-gcc (GNU ARM-Linux編譯器,在非EABI的編譯器還分為arm-elf-gcc和arm-linux-gcc的區(qū)別現(xiàn)在基本不分了。)

arm-linux-gcc 編譯出來(lái)的可執(zhí)行文件格式是ELF,除了常見(jiàn)的TEXT段,BSS/DATA段外,還有會(huì)有一些調(diào)試段..而armcc編譯出來(lái)的格式是AXF。但AXF本質(zhì)是仍然是ELF格式,只不過(guò)加一些特殊的調(diào)試段。

3.調(diào)試方法

如果用JTAG在線硬件調(diào)試的那種單步調(diào)試.有兩種接口。一種是ARM公司的RDI接口,另外一種硬件調(diào)試器虛擬的gdb接口。這個(gè)要使用ELF/或AXF格式

但很多程序會(huì)用直接讓程序輸出信息到串口方式進(jìn)行調(diào)試。這種速度比較快,可以理解是廣義上的調(diào)試。這個(gè)階段要使用BIN格式。

4.下載

下載是指把可執(zhí)行的BIN文件下載到開發(fā)板上的Flash之中。讓其完全脫離調(diào)試環(huán)境完全獨(dú)立運(yùn)行。

如果一個(gè)空板,即Flash中沒(méi)有任何程序。這時(shí)需要一些特殊下載方式。比用JTAG燒錄工具下載到Flash之中。有一些CPU還有一些特殊的下載方式。比如S3C6410支持SD卡啟動(dòng)。可以把下載的文件放在SD卡上,由SD卡里的BOOTLOADER來(lái)下載。

還有一些CPU內(nèi)部帶有ROM自行啟動(dòng)一個(gè)小程序,然后通過(guò)USB下載程序。比如JZ4740。

如果Flash上燒錄有bootloader,它往往自帶有燒錄功能。 可以通過(guò)TFTP/USB/串口方式從PC機(jī)下載到設(shè)備上。

可執(zhí)行文件格式

Elf

Linux下標(biāo)準(zhǔn)可執(zhí)行結(jié)構(gòu).還有一種out是早期的較為簡(jiǎn)單的可執(zhí)行文件格式。但是在新版本里out就是ELF格式。

BIN

bin文件是由ELF轉(zhuǎn)化而來(lái),專門用下載到設(shè)備。相對(duì)于ELF它有兩個(gè)變化。第一BIN只有基本的text/bss/data段,沒(méi)有調(diào)試信息。第二。因?yàn)閎in要下載到設(shè)備的。里面各段的地址是按相應(yīng)地址對(duì)齊燒錄的。因?yàn)閮啥沃g很可能補(bǔ)一些空間的0空間。

上一頁(yè) 1 2 下一頁(yè)

評(píng)論


技術(shù)專區(qū)

關(guān)閉