新聞中心

ARM入門篇之(二)工具

作者: 時(shí)間:2016-11-21 來(lái)源:網(wǎng)絡(luò) 收藏
(1) 交叉工具鏈,可以理解為交叉工具集

?交叉,指在宿主機(jī)上編寫編譯好代碼,生成目標(biāo)機(jī)能夠運(yùn)行的格式文件,通過(guò)數(shù)據(jù)線連接宿主機(jī)與目標(biāo)機(jī),從宿主機(jī)上下載程序到目標(biāo)機(jī)內(nèi)

本文引用地址:http://www.2s4d.com/article/201611/319418.htm

工具鏈,就是交叉?編譯器(arm-linux-gcc),交叉連接器(arm-linux-ld),交叉轉(zhuǎn)換器(arm-linux-objcopy),交叉ELF文件閱讀器(arm-linux-readelf),交叉反匯編器(arm-linux-objdump)等工具的集合

?

(2)Makefile管理

?makefile,描述了整個(gè)程序的編譯,鏈接等的規(guī)則

包括:什么樣的源文件需要編譯,鏈接;使用什么工具編譯,鏈接;編譯,鏈接時(shí)依賴哪些文件;?最后產(chǎn)生我們先要的最終執(zhí)行文件

而上面這一個(gè)過(guò)程只要你編寫好makefile這個(gè)文件,再用make命令就可一步生成最終想要的可執(zhí)行文件?

makefile由規(guī)則和變量構(gòu)成

規(guī)則:描述了如何通過(guò)依賴文件,使用什么工具命令,最終生成?目標(biāo)文件

格式如下:

目標(biāo):依賴??

[Tab]命令

例如:

start.o:start.S

?[Tab]arm-linux-gcc -g -o start.o -c start.S

?變量:

系統(tǒng)定義的變量:($@)代表目標(biāo),($^)代表所有依賴,($<)代表第一個(gè)依賴,(%)通配符?

例如上面的例子用變量就是:

%.o:%.S

[Tab]arm-linux-gcc -g -o $@ -c $^??

默認(rèn)情況下,make命令會(huì)自動(dòng)找到文件名叫makefile的文件,當(dāng)你把makefile改名后,可以用命令:

make -f 文件名?

(3)鏈接腳本(.lds)

段:一個(gè)可執(zhí)行程序通常由代碼段,數(shù)據(jù)段。bss段構(gòu)成,所以在腳本文件中也要體現(xiàn)出來(lái)

?鏈接腳本大概如下:

?OUTPUT_FORMAT("elf32littlearm",“elf32littlearm”,“elf32littlearm”)

指定輸出文件格式為elf,32位,小端,arm指令

OUTPUT_ARCH(arm)

?指定輸出平臺(tái)為ARM

ENTRY(_start)

指定入口_start

??SECTIONS{

. = 0x50000000 設(shè)置程序開始地址(OK6410首地址)

. = ALIGN(4) 代碼四字節(jié)?對(duì)齊

?.text: 指定代碼段

{

start.o(.text)? 第一個(gè)部分代碼為Start.o

*(.text)? 其他部分代碼放在start.o代碼后面

}?

.= ALIGN(4)?

? .data:{ *(.data) }? 數(shù)據(jù)段

. = ALIGN(4)

bss_start = . ? bss段的開始位置

.bss:{ *(.bss) } bss段

bss_end = .? bss段的結(jié)束位置

}?

?



關(guān)鍵詞: ARM入門工

評(píng)論


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

關(guān)閉