arm-linux-gcc/ld/objcopy/objdump使用總結

arm-linux工具的功能如下:

arm-linux-addr2line 把程序地址轉換爲文件名和行號。在命令行中給它一個地址和一個可執行文件名,它就會使用這個可執行文件的調試信息指出在給出的地址上是哪個文件以及行號。

 

arm-linux-ar 建立、修改、提取歸檔文件。歸檔文件是包含多個文件內容的一個大文件,其結構保證了可以恢復原始文件內容。

arm-linux-c++flit 連接器使用它來過濾 C++ 和 Java 符號,防止重載函數衝突。

arm-linux-gprof 顯示程序調用段的各種數據。

arm-linux-ld 是連接器,它把一些目標和歸檔文件結合在一起,重定位數據,並連接符號引用。通常,建立一個新編譯程序的最後一步就是調用ld。

arm-linux-nm 列出目標文件中的符號。

arm-linux-objcopy 把一種目標文件中的內容複製到另一種類型的目標文件中。

arm-linux-objdump 顯示一個或者更多目標文件的信息。使用選項來控制其顯示的信息,它所顯示的信息通常只有編寫編譯工具的人才感興趣。

arm-linux-ranlib 產生歸檔文件索引,並將其保存到這個歸檔文件中。在索引中列出了歸檔文件各成員所定義的可重分配目標文件。

arm-linux-readelf  顯示elf格式可執行文件的信息。

arm-linux-size  列出目標文件每一段的大小以及總體的大小。默認情況下,對於每個目標文件或者一個歸檔文件中的每個模塊只產生一行輸出。

arm-linux-string 打印某個文件的可打印字符串,這些字符串最少4個字符長,也可以使用選項-n設置字符串的最小長度。默認情況下,它只打印目標文件初始化和可加載段中的可 打印字符;對於其他類型的文件它打印整個文件的可打印字符。這個程序對於瞭解非文本文件的內容很有幫助。

arm-linux-strip 丟棄目標文件中的全部或者特定符號。


arm-linux-gcc -wall -O2 -c -o $@ $<

-o 只激活預處理,編譯,和彙編,也就是他只把程序做成obj文件 

-Wall 指定產生全部的警告信息 

-O2 編譯器對程序提供的編譯優化選項,在編譯的時候使用該選項,可以使生成的執行文件的執行效率提高 

-c 表示只要求編譯器進行編譯,而不要進行鏈接,生成以源文件的文件名命名但把其後綴由 .c 或 .cc 變成 .o 的目標文件 

-S 只激活預處理和編譯,就是指把文件編譯成爲彙編代碼

 

arm-linux-ld 直接指定代碼段,數據段,BSS段的起始地址

  -Tbss ADDRESS               Set address of .bss section

  -Tdata ADDRESS              Set address of .data section

  -Ttext ADDRESS              Set address of .text section

示例:

 ${CROSS}ld -Ttext=0x33000000 led.o -o led.elf

 

使用連接腳本設置地址:

   arm-linux-ld -Tbeep.lds start.o beep.o -o beep.elf

其中beep.lds 爲連接腳本如下:

 

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-objdump

查看目標文件(.o文件)和庫文件(.a文件)信息

arm-linux-objdump -D -m arm beep.elf > beep.dis

-D 顯示文件中所有彙編信息

-m machine

指定反彙編目標文件時使用的架構,當待反彙編文件本身沒有描述架構信息的時候(比如S-records),這個選項很有用。可以用-i選項列出這裏能夠指定的架構.

 

[guowenxue@localhost asm_c_buzzer]$ cat beep.lds 

 

/***********************************************************************

 *        File:  beep.lds

 *     Version:  1.0.0

 *   Copyright:  2011 (c) Guo Wenxue <[email protected]>

 * Description:  Cross tool link text, refer to u-boot.lds

 *   ChangeLog:  1, Release initial version on "Mon Mar 21 21:09:52 CST 2011"

 *

 ***********************************************************************/

 

OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")

OUTPUT_ARCH(arm)

ENTRY(_start)

 

SECTIONS{

    . = 0x33000000;

    .text : {

        *(.text)

        *(.rodata)

    }

 

    .data ALIGN(4): {

        *(.data)

    }

 

    .bss ALIGN(4): {

        *(.bss)

    }

}

[guowenxue@localhost asm_c_buzzer]$ cat makefile 

# ***********************************************************************

# *        File:  makefile

# *     Version:  1.0.0

# *   Copyright:  2011 (c) Guo Wenxue <[email protected]>

# * Description:  Makefile used to cross compile the ASM and C source code

# *   ChangeLog:  1, Release initial version on "Mon Mar 21 21:09:52 CST 2011"

# *

# ***********************************************************************

 

CROSS = /opt/buildroot-2011.02/arm920t/usr/bin/arm-linux-

CFLAGS = 

 

beep.bin: start.S beep.c

        arm-linux-gcc $(CFLAGS) -c -o start.o start.S

        arm-linux-gcc $(CFLAGS) -c -o beep.o beep.c

        arm-linux-ld -Tbeep.lds start.o beep.o -o beep.elf

        arm-linux-objcopy -O binary -S beep.elf beep.bin

        rm -f *.elf *.o

 

install:

        cp beep.bin ~/winxp -f --reply=yes

 

clean:

        rm -f *.elf *.o

        rm -f beep.bin

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章