地址:http://hi.baidu.com/xiaoyue1800/item/a11a2c4a26da4b04c11613d9
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-objcopy -I ?可以查看支援的格式
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 <guowenxue@gmail.com>
* 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 <guowenxue@gmail.com>
# * 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