arm 編譯相關命令arm-linux- (gcc/ld/objcopy/objdump)詳解

在linux中輸入vi Makefile 來實現創建Makefile文件

注意:命令行前必須加TAB鍵

例如:將兩個文件led.c和crt0.S彙編文件,製作一個Makefile文件

led.bin : crt0.S led.c
    arm-linux-gcc -c -o crt0.o crt0.c
    arm-linux-gcc -c -o led.o led.c
    arm-linux-ld -Ttext 0x00000000 -g crt0.o led.o -o led_elf
    arm-linux-objcopy -O binary -S led_elf led.bin
    arm-linux-objdump -D -m arm led_elf > led.dis
clean:
    rm -f led_elf led.dis led.bin *.o

 led.bin : crt0.S led.c 指的是依賴關係,led.bin是目標文件,:後面是依賴文件

 

arm-linux-gcc  編譯選項

  • -o  編譯及鏈接,會生成一個exe可執行文件
  • -Wall  指定產生全部的警告信息 
  •  -O/-O2/-O3   數字越高,代表優化的更多,可以使生成的執行文件的提高執行效率
  • -c 編譯不鏈接,會生成一個*.obj文件,若後面加了-o,則表示指定輸出文件名稱
  • -static   靜態鏈接,生成的文件會非常大, 好處在於不需要動態鏈接庫,也可以運行
  • -S 只激活預處理和編譯,就是指把文件編譯成爲彙編代碼

例如:
arm-linux-gcc -c -o  led.o led.c   :編譯不鏈接

arm-linux-gcc   -o  led  led.c       :編譯以及鏈接

 

arm-linux-ld    連接選項

  • -Ttext 0x00000000              指代碼段頭地址爲0x00000000
  • -T鏈接腳本                          指使用鏈接腳本來進行更復雜的地址設置,包括了代碼段,數據段,bss段等
  • -o                                        後面指的將多個文件連接在一起,生成一個obj文件,上面的名稱是led_elf。
  •  -pie                    生成動態鏈接地址段,一般在新版uboot裏會看到

 

arm-linux-objcopy   複製選項,支持格式轉換

  • -O binary     用來指定生成文件按照後面的格式來輸出,其中binary是指生成二進制(.bin)文件。     
  • -S                 不從源文件中複製重定位信息和符號信息到目標文件中去

 

arm-linux-objdump   反編譯選項 

  • -D                反編譯所有段
  • -b binary     指定反編譯目標文件格式
  • -m ram       指定反編譯目標文件所需的架構,這裏是ram架構

 

 

 

 

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