arm linux 系列工具介紹

2021-08-07 01:14:43 字數 4367 閱讀 7223

gnu gcc簡介:

gnu gcc是一套面向嵌入式領域的交叉編譯工具,支援多種程式語言、多種優化選項並且能夠支援分步編譯、支援多種反彙編方式、支援多種除錯資訊格式,目前支援x86、arm7、strongarm、ppc4xx、mpc8xx、mips r3000等多種cpu。

gnu gcc的基本功能包括:輸出預處理後的c/c++源程式(展開標頭檔案和替換巨集)

輸出c/c++源程式的彙編**

輸出二進位制目標檔案

生成靜態庫

生成可執行程式

轉換檔案格式

gcc 組成:

c/c++交叉編譯器arm-elf-gcc

arm-elf-gcc是編譯的前端程式,它通過呼叫其他程式來實現將程式原始檔編譯成目標檔案的功能。

編譯時,它首先呼叫預處理程式(cpp)對輸入的源程式進行處理,然後呼叫 cc1 將預處理後的程式編譯成彙編**,最後由arm-elf-as將彙編**編譯成目標**。

arm-elf-gcc具有豐富的命令選項,可以控制編譯的各個階段,滿足使用者的各種編譯需求。

彙編器 arm-elf-as

arm-elf-as將組合語言程式轉換為elf (executable and linking format,執行時鏈結檔案格式)格式的可重定位目標**,這些目標**同其它目標模組或函式庫易於定位和鏈結。

arm-elf-as產生乙個交叉參考表和乙個標準的符號表,產生的**和資料能夠放在多個區 (section)中。

聯結器arm-elf-ld

arm-elf-ld根據鏈結定位檔案linkcmds中的**區、資料區、bss區和棧區等定位資訊,將可重定位的目標模組鏈結成乙個單一的、絕對定位的目標程式。

該目標程式是elf格式,並且可以包含除錯資訊。

arm-elf-ld會產生乙個記憶體映象檔案map.txt,該檔案顯示所有目標模組、區和符號的絕對定位位址。它也產生交叉參考列表,顯示參考每個全域性符號的目標模組。

arm-elf-ld支援將多個目標模組鏈結成乙個單一的、絕對定位的目標程式,也能夠依此對目標模組進行鏈結,這個特性稱為增量鏈結(incremental linking)。

假如輸入檔案是乙個函式庫,arm-elf-ld會自動從函式庫裝載被其它目標模組參考的函式模組。arm-elf-ld與其它鏈結程式相比,能提供更有幫助的診斷資訊。許多鏈結器遇到第乙個錯誤即放棄鏈結,而arm-elf-ld只要有可能都繼續執行,幫助使用者識別其它錯誤,有時甚至能獲得輸出**。

庫管理器arm-elf-ar

arm-elf-ar將多個可重定位的目標模組歸檔為乙個函式庫檔案。採用函式庫檔案,應用程式能夠從該檔案中自動裝載要參考的函式模組,同時將應用程式中頻繁呼叫的函式放入函式庫檔案中,易於應用程式的開發管理。arm-elf-ar支援elf格式的函式庫檔案.

工程管理器make

make是用於自動編譯、鏈結程式的實用工具,使用make後就不需要手工的編譯每個程式檔案。要使用make,首先要編寫makefile。

makefile描述程式檔案之間的依賴關係,並提供更新檔案的命令。在乙個程式中,可執行檔案依賴於目標檔案,而目標檔案依賴於原始檔。如果makefile檔案存在,每次修改完源程式後,使用者通常所需要做的事情就是在命令列敲入「make」,然後所有的事情都由make來完成。

其他實用程式

目標檔案格式轉換工具arm-elf-objcopy支援的檔案格式有h-record、s-record、abs、bin、coff、elf。例如,它能夠將elf格式檔案轉換為其它格式的檔案,如intel h-record格式、motorola s-record等。arm-elf-nm程式用於顯示檔案中的符號資訊。

gcc編譯程式的基本過程:

arm-elf-gcc根據輸入檔案的字尾來確定檔案的型別,然後根據使用者的編譯選項(包括優化選項、除錯資訊選項等)將其編譯成相應的彙編臨時檔案(字尾為.s);

arm-elf-as將該彙編檔案編譯成目標檔案(字尾為.o);

arm-elf-ld 根據使用者的鏈結選項(包括指定鏈結命令檔案等)將目標檔案和各種庫鏈結起來生成可執行檔案。

c/c++交叉編譯器arm-elf-gcc

arm-elf-gcc是編譯的前端程式,它通過呼叫其他程式來實現將程式原始檔編譯成目標檔案。

編譯時它首先呼叫預處理程式(cpp)對輸入的源程式進行處理;然後呼叫cc1將預處理後的程式編譯成彙編**;最後由arm-elf-as將彙編**編譯成目標**。

1.命令格式

arm-elf-gcc [options] file…

在命令arm-elf-gcc後面跟乙個或多個選項,選項間用空格隔開,然後跟乙個或多個目標檔案。

例如,將test.c 編譯成目標檔案test.o 並且生成除錯資訊:

arm-elf-gcc –g –c –o test.o test.c

2.命令選項列表

輸出控制選項:

-c 將輸入的原始檔編譯成目標檔案

-s 將c/c++檔案生成彙編檔案

-o file 將輸出內容存於檔案file

-pipe 在編譯的不同階段之間採用管道通訊方式

-v 列印出編譯過程中執行的命令

-x language 說明檔案的輸入型別為language

c語言選項:

-ansi 支援所有ansi c程式

警告選項:

-w 關閉所有警告

-wall 開啟所有警告

-wimplicit 如果有隱含申明,顯示警告資訊

-wno-implicit 不顯示對隱含申明的警告

除錯選項:

-g 在檔案中產生除錯資訊(除錯資訊的檔案格式有stabs、coff、xcoff、dwarf)

優化選項:

-o0 不優化

-o1 一級優化

-o2 二級優化

-o3 **優化

預處理選項:

-e 執行c的預處理器

-c 在運用-e進行預處理時不去掉注釋

-d macro 定義巨集macro為1

-d macro=defn 定義巨集macro為defn

彙編選項:

-wa,option 將選項option傳遞 給彙編器

搜尋路徑選項:

-i dir 設定搜尋路徑為dir

-i- 指定只對 #include 「file」,有效的標頭檔案搜尋目錄

原始檔型別的識別

arm-elf-gcc能夠自動根據檔名字尾識別檔案型別.

檔名字尾和檔案型別的對應關係如下:

*.c ——c原始檔

*.i ——經過預處理後的c原始檔

*.h ——c標頭檔案

*.ii ——經過預處理後的c++原始檔

*.cc ——c++原始檔

*.cxx ——c++原始檔

*.cpp ——c++原始檔

*.c ——c++原始檔

*.s ——不需要預處理的彙編檔案

*.s ——需要預處理的彙編檔案

此外,使用者可通過-x language說明檔案的輸入型別,此時可以不用以上的字尾規則。

-x language

其中的language可為:

c ——c原始檔

c++ ——c++原始檔

c-header ——c標頭檔案

cpp-output ——經過預處理後的c原始檔

c++-cpp-output ——經過預處理後的c++原始檔

assembler ——不需要預處理的彙編檔案

assembler-with-cpp ——需要預處理的彙編檔案

例如,編譯乙個不需要預處理的c程式:

arm-elf-gcc –c –g –x cpp-output test.c

arm-linux-objcopy

一. arm-linux-objcopy被用來複製乙個目標檔案的內容到另乙個檔案中,可用於不同原始檔的之間的格式轉換

二. 示例:

arm-linux-objcopy –o binary –s elf_file bin_file

三. 常用的選項:

input-file , outflie

輸入和輸出檔案,如果沒有outfile,則輸出檔名為輸入檔名

2.-l bfdname或—input-target=bfdname

用來指明原始檔的格式,bfdname是bfd庫中描述的標準格式名,如果沒指明,則arm-linux-objcopy自己分析

3.-o bfdname 輸出的格式

4.-f bfdname 同時指明原始檔,目的檔案的格式

5.-r sectionname 從輸出檔案中刪除掉所有名為sectionname的段

6.-s 不從原始檔中複製重定位資訊和符號資訊到目標檔案中

7.-g 不從原始檔中複製除錯符號到目標檔案中

arm linux下編譯perf工具

因查詢linux系統下 kworker占用過高的原因,用perf工具來分析。perf為 linux kernel自帶的效能檢測工具。在linux3.10核心下編譯perf工具。1.cd 到 kerne tools perf路徑下 2.export path home huanghm work dsp...

Linux監控工具介紹系列 free

free命令可以顯示當前系統未使用的和已使用的記憶體數目,還可以顯示被核心使用的記憶體緩衝區。free 選項 b 以byte為單位顯示記憶體使用情況 k 以kb為單位顯示記憶體使用情況 m 以mb為單位顯示記憶體使用情況 o 不顯示緩衝區調節列 s 間隔秒數 持續觀察記憶體使用狀況 t 顯示記憶體總...

littlefs系列 介紹

1 littlefs主要用在微控制器和flash上,是一種嵌入式檔案系統。主要有3個特點 1 掉電恢復 在寫入時即使復位或者掉電也可以恢復到上乙個正確的狀態。2 擦寫均衡 有效延長flash的使用壽命 3 有限的ram rom 節省rom和ram空間 2 已有的檔案系統 1 非掉電恢復,基於bloc...