色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          ARM入門篇之(二)工具

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

          ?交叉,指在宿主機(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é)束位置

          }?

          ?



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

          評論


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

          關(guān)閉