016交叉工具鏈

2022-05-23 06:09:09 字數 2116 閱讀 2287

1、什麼是交叉工具鏈:

從兩個層次理解,第乙個層次,交叉工具,第二個層次,鏈;

鏈是集合的意思,合併到一起,交叉工具鏈就是一系列交叉工具的集合;

2、嵌入式開發模型——交叉開發

在嵌入式開發裡面,有一種非常重要的模型叫交叉開發模型;

在這個模型中,有宿主機,目標機(開發板),宿主機和目標機的硬體平台是不一樣的,宿主機一般都是x86平台,目標機有arm等,x86很少,如果在宿主機上面編譯程式,僅僅編譯在x86平台上使用,顯然放到目標機上面就執行不了了,那麼就必須編譯出在目標機上面執行的程式,但是宿主機又是x86平台,所以就會存在一種在x86平台上產生出一種用於其他硬體平台上面執行的程式,這種開發模式就叫做交叉開發模式;

3、常用交叉工具:

(1)交叉編譯器:arm-linux-gcc

gcc是從/usr/include中尋找標頭檔案的,arm-linux-gcc可以用引數-print-serach-dirs檢視;

ld就是完成鏈結的作用,鏈結成能夠在arm平台上執行的程式;

範例:arm-linux-gcc -g -c led.s

arm-linux-ld -tled.lds -o led.elf led.o

首先是工具的名字,然後如果要用到鏈結器指令碼,使用-t指明鏈結器指令碼,使用-o指明鏈結之後程式的名字,最後指明這個程式是由哪些中間檔案鏈結而成的;

(3)交叉轉換器:arm-linux-objcopy

鏈結出來的程式都是elf格式的,這種格式的檔案不能直接在arm處理器上執行,在開發板上的linux系統上執行時,首先會由linux系統所帶的elf解析器把它解析成二進位制檔案,然後再去執行的,在arm處理器或其他處理器上能夠執行的程式一定是二進位制格式的程式;

怎麼把elf格式的檔案轉換成二進位制檔案呢?

由arm-linux-objcopy來做:

範例:arm-linux-objcopy -o binary led.elf led.bin

-o指明輸出的格式   然後跟上輸入檔案和輸出檔案的名字

bin檔案能在arm處理器上直接執行的,因為燒寫到nand flash中,並沒有linux系統的支援,就沒有人去幫你把elf轉換成二進位制,所以要在燒寫之前用objcopy轉換成二進位制,才能在arm處理器上執行;

(4)交叉elf檔案工具:arm-linux-readelf

不管是arm-linux-gcc直接編譯鏈結出來的程式,還是通過arm-linux-ld間接鏈結出來的程式,最終得到的程式都是elf格式;

arm-linux-readelf -a led.elf可以檢視elf檔案的資訊;

用arm-linux-gcc編譯乙個程式:arm-linux-gcc hello.c -o hello

把這個應用程式放到開發板上去執行,執行不了,可能的情況:第一,應用程式根本就不是執行在arm平台上的,怎麼檢查?可以使用命令file hello,

第二,大小端不對,可以使用arm-linux-readelf -a led.elf檢視大小端對不對;arm一般是小端模式;

還有一種情況就是庫資訊不對,乙個應用程式是要用到一些庫的,在你的開發板上有沒有這些庫?就得去檢查了!

可以使用:arm-linux-readelf -d hello,檢視需要哪些庫;

(5)交叉反彙編器arm-linux-objdump

反彙編器在底層的開發中是非常有用的工具,當我們編寫乙個程式放到開發板上執行,效果不是自己想要的,就可以去檢視彙編**,看是不是在彙編一級出現了錯誤。

範例:arm-linux-objdump -d -s hello ->dump(將資訊輸出到dump檔案中)

讓輸出的資訊變得簡單點:

arm-linux-gcc -g hello.c -o hello  

然後再進行反彙編:arm-linux-objdump -d -s ->dump 

可以在vim中查詢main()函式,做比較!

加上--help可以檢視用法!

我們關注的只是最後的名字ld/gcc,前面的arm是指明平台,後面的是本質!

交叉工具鏈

理,但由於嵌入式軟體的執行平台不是本地,所以要做一些特殊處理,讓編譯環境信賴的類庫脫離本地信 賴,使用嵌入式平台的類庫來進行鏈結,處理這一過程就叫作交叉編譯工具鏈。機是執行嵌入式軟體的硬體平台。o 只啟用預處理,編譯,和彙編,也就是他只把程式做成obj檔案 wall 指定產生全部的警告資訊 o2 編...

安裝交叉工具鏈

使用國嵌提供的工具包arm tools.tar.gz,首先解壓 tar xvzf arm tools.tar.gz cd arm tools tar xvzf arm linux gcc 4.3.2.tgz c 指定解壓到根目錄去 解壓到 usr local arm 4.3.2 還需修改環境變數 v...

八 交叉工具鏈

1.何為交叉工具鏈?交叉工具的集合 2.交叉工具 可以用file命令從本質上檢視用交叉工具和普通工具編譯出來的檔案的屬性是不同的,他們的執行平台不同 3.交叉開發模型 宿主機 目標機的硬體平台不一樣,在x86平台上產生用於其他平台的程式的過程就是交叉開發 4.交叉編譯器 arm linux gcc ...