知識架構及層次 — 程序編譯及調(diào)試
嵌入式交叉編譯器安裝配置
- 宿主機
執(zhí)行編譯、鏈接嵌入式軟件的計算機
- 目標機
運行嵌入式軟件的硬件平臺
- “本地”編譯器
用來生成在與編譯器本身所在的計算機和操作系統(tǒng)(平臺)相同的環(huán)境下運行的目標代碼,例如 Windows 環(huán)境生成 Windows 目標代碼。
- 交叉編譯器
用來生成在其它平臺上運行的目標代碼,例如 Windows
ARM微處理器/Linux系統(tǒng)下編譯器
編譯器命名規(guī)則
- arch [-vendor] [-os] [-(gnu)eabi]-工具名稱
- arch – 體系架構,如 ARM,MIPS
- vendor – 工具鏈提供商,CPU名稱或者開發(fā)板廠商
- os – 目標操作系統(tǒng),如 linux
- (gnu) eabi – 使用的庫,包括 glibc、eabi、uclibc 三種
例: arm-none-eabi-gcc
用于編譯 ARM 架構的裸機系統(tǒng)
例:arm-none-linux-gnueabi-gcc
用于基于 ARM 架構的 Linux 系統(tǒng),基于GCC,使用 Glibc 庫
經(jīng)過Codesourcery 公司優(yōu)化過推出的編譯器,用于編譯 ARM 架構的 u-boot、Linux內(nèi)核、linux應用等。
幾個重要目錄:
編譯器工具所在目錄:FriendlyARM/toolchain/4.9.3/bin
編譯器頭文件所在目錄:FriendlyARM/toolchain/4.9.3/arm-cortexa9-linux-gnueabihf/sys-root/usr/include
庫文件所在目錄:FriendlyARM/toolchain/4.9.3/arm-cortexa9-linux-gnueabihf/sys-root/usr/lib
編譯器下載及安裝
可以去官網(wǎng)下載,http://www.linaro.org/downloads/
但是速度比較慢,可以直接用我下載好的。
鏈接:?https://pan.baidu.com/s/1jL_G6kbTC9h_bF8HHXBWxw?提取碼: 67u4
1.先把下載好的安裝包移動到根目錄下的tmp目錄中(/tmp)
2.使用tar命令解壓安裝包,即在Terminal中輸入以下命令:(前面的sudo表示使用root權限執(zhí)行該命令)
sudo tar -xjvf /tmp/arm-linux-gcc-4.6.4-arm-x86_64.tar.bz2 -C /
注意是大寫的字母C,此命令會把安裝包解壓到根目錄下的opt的TuxamitoSoftToolchains里面(/opt/TuxamitoSoftToolchains)
3.解壓完成后,再在(/usr/local)中創(chuàng)建一個新目錄arm,即在Terminal中輸入以下命令:
sudo mkdir /usr/local/arm
創(chuàng)建arm目錄成功后,還需要給它解放全部權限,即在Terminal中輸入以下命令:
sudo chmod 777 /usr/local/arm
4.在解壓出來的目錄中找到并把整個gcc-4.6.4目錄復制到剛剛建好的arm目錄中,命令如下:
先cd切換到gcc-4.6.4所在目錄(切換后先ls看一下有沒有gcc-4.6.4目錄):
cd /opt/TuxamitoSoftToolchains/arm-arm1176jzfssf-linux-gnueabi/
在執(zhí)行 cp 復制命令,-r 表示整個目錄以及里面的任何東西
sudo cp -r gcc-4.6.4 /usr/local/arm
5.打開(/etc/profile)配置環(huán)境變量和庫變量,目的是以后可以在任何位置使用該交叉編譯器,命令如下:
sudo vi /etc/profile
用vi或者vim打開后,在文件最后添加兩行,并輸入以下代碼:第一行是添加執(zhí)行程序的環(huán)境變量,第二行是庫文件的路徑
export PATH=$PATH:/usr/local/arm/gcc-4.6.4/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/arm/gcc-4.6.4/lib
然后保存退出即可。
6.使用source命令重新加載生效該配置文件
source /etc/profile
1
7.檢驗是否安裝成功,在 Terminal 輸入以下命令輸出版本信息:
arm-linux-gcc -v
arm-linux-gcc工具使用
arm-linux-gcc語法形式:arm-linux-gcc [ option | filename ]...
通常情況下,產(chǎn)生一個新的程序需要經(jīng)過四個階段:預處理、編譯、匯編,鏈接
當然我們可以通過參數(shù)決定該編譯操作執(zhí)行到何步結束
參數(shù)繁多,在Linux環(huán)境下尋求幫助:man arm-linux -gcc
-E
- 只對文件進行預處理,但不進行編譯、匯編和鏈接。
例:arm-linux -gcc -E hello.c -o hello1.c
預處理后,hello1.c 中的內(nèi)容:
-S
- 只對文件進行編譯(產(chǎn)生匯編文件.s),但是并不進行匯編和鏈接。
例: arm-linux -gcc -S hello.c
上例中就會產(chǎn)生一個匯編文件 hello.s
-c
只對文件進行編譯和匯編,但是并不進行鏈接,也就是說只把程序做成 obj 文件。
例: arm-linux -gcc -c hello.c –o hello.o
-o
指定目標名稱,缺省的時候,gcc 編譯出來的文件是 a.out
例:
arm-linux -gcc hello.c 默認編譯出 hello.out
arm-linux -gcc -o hello.bin hello.c 指定目標名詞是 hello.bin
arm-linux -gcc -o hello.s -S hello.c
-include file
包含某個代碼,簡單來說,就是編譯某個文件時需要另一個文件的時候,就可以用它設定,功能就相當于在代碼中使用#include。
例:arm-linux -gcc hello.c -include type.h
-I dir
如果使用#include"file"的時候,gcc/g++ 會先在當前目錄查找你所指定的頭文件,如果沒有找到,編譯器會到缺省的頭文件目錄找;
如果使用-I指定了目錄, 編譯器會先到你所指定的目錄查找,然后再按常規(guī)的順序去找。
例: arm-linux -gcc -o hello -I/xxx/include hello.c
-I
就是取消前一個參數(shù)的功能,所以一般在-I dir之后使用
-iprefix prefix 和 -iwithprefix dir
這兩個參數(shù)一般一起使用,當-I的目錄查找失敗,會到prefix+dir下查找
-l庫名
指定編譯的時候使用的庫(靜態(tài)庫.a / 動態(tài)庫.so)
例:arm-linux-gcc -lpthread hello.c
指定用到了 phtread.c 庫
-L目錄
指定編譯的時候,搜索庫的路徑。比如自己的庫,就可以用-L指定到你的庫所在的目錄,不然編譯器將只在標準庫的目錄找。這個dir就是目錄的名稱。
例:arm-linux-gcc –L./ hello.c –o hello
gcc 優(yōu)化
gcc 提供了為了滿足用戶不同程度的的優(yōu)化需要,提供了近百種優(yōu)化選項,用來對 {編譯時間,目標文件長度,執(zhí)行效率} 這個三維模型進行不同的取舍和平衡。優(yōu)化的方法不一而足,總體上將有以下幾類:
精簡操作指令;
盡量滿足cpu的流水操作;
通過對程序行為的猜測,重新調(diào)整代碼的執(zhí)行順序;
充分使用寄存器;
對簡單的調(diào)用進行展開等
-O0,-O1,-O2,-O3
O0:不做任何優(yōu)化,這是默認的編譯選項
O3:優(yōu)化級別最高
-g
- 編譯器在編譯的時候產(chǎn)生調(diào)試信息。
例:arm-linux –gcc –o hello -g hello.c
課后作業(yè)
(1) 看門狗部件屬于(硬件模塊),其核心功能為(偵測軟件代碼跑飛)和(當系統(tǒng)“跑飛”而進入死循環(huán)時,恢復系統(tǒng)的運行)。文章來源:http://www.zghlxwxcb.cn/news/detail-795904.html
(2) 假設C程序代碼 fun.c,將其編譯成目標代碼 fun.o,編譯命令為arm-linux-gcc -c fun.c -o fun.o;如果 fun.c 使用了庫函數(shù) libcurses.a,將其和 main.c 一起編譯成可執(zhí)行文件 smartfun,則編譯命令為arm-linux-gcc -c fun.c main.c -lcurses -o smartfun。文章來源地址http://www.zghlxwxcb.cn/news/detail-795904.html
到了這里,關于【嵌入式】Linux開發(fā)工具arm-linux-gcc安裝及使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!