ARM入門篇之(二)工具
?交叉,指在宿主機(jī)上編寫編譯好代碼,生成目標(biāo)機(jī)能夠運(yùn)行的格式文件,通過數(shù)據(jù)線連接宿主機(jī)與目標(biāo)機(jī),從宿主機(jī)上下載程序到目標(biāo)機(jī)內(nèi)
本文引用地址:http://cafeforensic.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è)過程只要你編寫好makefile這個(gè)文件,再用make命令就可一步生成最終想要的可執(zhí)行文件?
makefile由規(guī)則和變量構(gòu)成
規(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)出來
?鏈接腳本大概如下:
?OUTPUT_FORMAT("elf32littlearm",“elf32littlearm”,“elf32littlearm”)
指定輸出文件格式為elf,32位,小端,arm指令
OUTPUT_ARCH(arm)
?指定輸出平臺(tái)為ARM
ENTRY(_start)
指定入口_start
??SECTIONS{
. = 0x50000000 設(shè)置程序開始地址(OK6410首地址)
. = ALIGN(4) 代碼四字節(jié)?對齊
?.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é)束位置
}?
?
評論