一.什么是裸機(jī)開發(fā) 裸機(jī)是一種通俗的講法,就是指ARM設(shè)備上沒有任何現(xiàn)成的程序來支持你的開發(fā)的軟件運行。它是相對設(shè)備上有在操作系統(tǒng)的情況運行可執(zhí)行程序而言的。 這兩種程序有很大區(qū)別。在操作系統(tǒng)環(huán)境下,基本上跟桌面程序開發(fā)沒有太多區(qū)別,而裸機(jī)程序需要自己初始化硬件環(huán)境來運行。因為必須有一小段匯編寫的引導(dǎo)代碼來初始化,并且直接操作硬件。 裸機(jī)程序一般采用少量匯編加C語言來編譯(理論上C++可以了,但比較少)主要用來ARM匯編,硬件控制教學(xué)。硬件驗證和驅(qū)動開發(fā)。 大型的程序bootloader,實時操作系統(tǒng)uCOS/Nclues嚴(yán)格講也是裸機(jī)程序。 而且ARM的CPU的都有JTAG的在線硬件調(diào)試接口,通過JTAG硬件調(diào)試器,可以直接運行和單步調(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 編譯出來的可執(zhí)行文件格式是ELF,除了常見的TEXT段,BSS/DATA段外,還有會有一些調(diào)試段..而armcc編譯出來的格式是AXF。但AXF本質(zhì)是仍然是ELF格式,只不過加一些特殊的調(diào)試段。 3.調(diào)試方法 如果用JTAG在線硬件調(diào)試的那種單步調(diào)試.有兩種接口。一種是ARM公司的RDI接口,另外一種硬件調(diào)試器虛擬的gdb接口。這個要使用ELF/或AXF格式 但很多程序會用直接讓程序輸出信息到串口方式進(jìn)行調(diào)試。這種速度比較快,可以理解是廣義上的調(diào)試。這個階段要使用BIN格式。 4.下載 下載是指把可執(zhí)行的BIN文件下載到開發(fā)板上的Flash之中。讓其完全脫離調(diào)試環(huán)境完全獨立運行。 如果一個空板,即Flash中沒有任何程序。這時需要一些特殊下載方式。比用JTAG燒錄工具下載到Flash之中。有一些CPU還有一些特殊的下載方式。比如S3C6410支持SD卡啟動?梢园严螺d的文件放在SD卡上,由SD卡里的BOOTLOADER來下載。 還有一些CPU內(nèi)部帶有ROM自行啟動一個小程序,然后通過USB下載程序。比如JZ4740。 如果Flash上燒錄有bootloader,它往往自帶有燒錄功能。 可以通過TFTP/USB/串口方式從PC機(jī)下載到設(shè)備上。 可執(zhí)行文件格式 Elf Linux下標(biāo)準(zhǔn)可執(zhí)行結(jié)構(gòu).還有一種out是早期的較為簡單的可執(zhí)行文件格式。但是在新版本里out就是ELF格式。 BIN bin文件是由ELF轉(zhuǎn)化而來,專門用下載到設(shè)備。相對于ELF它有兩個變化。第一BIN只有基本的text/bss/data段,沒有調(diào)試信息。第二。因為bin要下載到設(shè)備的。里面各段的地址是按相應(yīng)地址對齊燒錄的。因為兩段之間很可能補(bǔ)一些空間的0空間。 ELF轉(zhuǎn)換為BIN用arm-linux-objcopy 以下語句把elf_name轉(zhuǎn)換成bin_name。 arm-linux-objcopy -O binary -S elf_name bin_name HEX: HEX主要是把BIN內(nèi)容轉(zhuǎn)換成相應(yīng)的ASCII的文本格式,并且每一行都帶下載地址。 HEX文件都是由記錄(RECORD)組成的。在HEX文件里面,每一行代表一個記錄。記錄的基本格式為: +---------------------------------------------------------------+ | RECORD | RECLEN | LOAD | RECTYPE | INFO or DATA | CHKSUM | | MARK ':' | | OFFSET | | | | +---------------------------------------------------------------+ | 1-byte | 1-byte | 2-byte | 1-byte | n-byte | 1-byte | +---------------------------------------------------------------+ 關(guān)于HEX/BIN區(qū)別,參見 http://blog.ednchina.com/wwh_nuaa/74736/message.aspx 不同產(chǎn)家的HEX格式有細(xì)微的差別,比如MOTO的HEX格式稱為S-Record格式,Intel格式稱為 Intel-HEX ,兩者的差別參見 http://blog.chinaunix.net/u1/58640/showart_1864111.html http://www.upsdn.net/html/2004-12/95.html 多用于可編程器的的離線下載或者單片機(jī)程序的下載。ARM開發(fā)不常用。 三.裸機(jī)開發(fā)環(huán)境. 常見的裸機(jī)開發(fā)環(huán)境 3.1 ADS開發(fā)環(huán)境 并口。 1.HOST操作系統(tǒng): Windows 2.編譯器 : armcc 3.IDE : ADS 4.適用CPU :ARM7/ARM9 5.HOST硬件接口:并口JTAG調(diào)試板 6.調(diào)試軟件 :AXD+H-Jtag 特點:硬件調(diào)試成本比較低,但是調(diào)試和下載速度慢。 3.2 ADS開發(fā)環(huán)境 USB。 1.HOST操作系統(tǒng): Windows 2.編譯器 : armcc 3.IDE : ADS 4.適用CPU :ARM7/ARM9 5.HOST硬件接口:USB接口的J-Link 6.調(diào)試軟件 : AXD+J-LinK RDI 3.3 arm-linux-gcc USB。 1.HOST操作系統(tǒng): Linux 2.編譯器 : arm-elf-gcc /arm-linux-gcc 3.IDE : 任何支持GCC的IDE(如Eclipse等) 4.適用CPU :ARM7/ARM9/ARM11 5.HOST硬件接口:USB接口的OpenJtag 6.調(diào)試軟件 : OpenOCD/gdb 注:有WINDOWS相應(yīng)版本 3.4 RVDS USB 1.HOST操作系統(tǒng): Windowsj/Linux 2.編譯器 : armcc 3.IDE : RealView/Eclipse 4.適用CPU :ARM全系列 5.HOST硬件接口:USB接口的J-Link 6.調(diào)試軟件 : J-Link GDB 注:RVDS是RealView Developer Suite的縮寫是,ARM開發(fā)的ADS的升級版,在Eclipse基礎(chǔ)上改進(jìn)。因此可以在多個操作系統(tǒng)運行。 另外armcc可以直接在Makefile調(diào)用,不需要通IDE。這也是很多大型軟件編譯方法 |