天天看點

交叉編譯工具鍊中GUN常用指令簡介

一、交叉編譯工具鍊字首:arm-none-linux-gnueabi-

二、常用指令

(注:此處以彙編點亮led燈代碼為例)

      重點掌握:

    1. gcc  編譯指令 

        arm-none-linux-gnueabi-gcc -c ***.S或***c -o ***.o

        eg:

        arm-none-linux-gnueabi-gcc -c led_asm.S -o led_asm.o

    2. ld   連結:将所有的.o檔案連結生成可執行檔案   不是純粹的二進制檔案  

        arm-none-linux-gnueabi-ld -Ttext=0x43c00000 ***.o ***.o -o ***.elf

        eg:

        arm-none-linux-gnueabi-ld -Ttext=0x43c00000 led_asm.o -o led_asm.elf

        -Ttext=0x43c00000:指定程式的入口位址   連結的時候才可以指定程式的入口位址

        -Tmap.lds :指定連結腳本

    3. objdump  将.elf檔案反彙編生成反彙編檔案(.dis)

        arm-none-linux-gnueabi-objdump -D ***.elf > ***.dis

        eg:

        arm-none-linux-gnueabi-objdump -D led_asm.elf > led_asm.dis

    4. objcopy  将.elf檔案生成二進制檔案(.bin)

        arm-none-linux-gnueabi-objcopy -O binary ***.elf ***.bin

        eg:

        arm-none-linux-gnueabi-objcopy -O binary led_asm.elf led_asm.bin

        -O binary:輸出二進制檔案

    5. nm : 檢視可執行檔案的符号表

        arm-none-linux-gnueabi-nm  ***.elf

        eg:

        arm-none-linux-gnueabi-nm  led_asm.elf

    6. size : 檢視可執行檔案中各個資料段的大小

        arm-none-linux-gnueabi-size  ***.elf

        eg:

        arm-none-linux-gnueabi-size  led_asm.elf

    7. readelf : 檢視可執行檔案的頭部資訊 

        arm-none-linux-gnueabi-readelf -h ***.elf

        eg:

        arm-none-linux-gnueabi-readelf -h led_asm.elf

    重點掌握:

    8. strip : 壓縮檔案指令     

        删除可執行檔案中的符号表,符号表不影響程式的運作

        注意:不可以對中間檔案執行strip指令 比如:.o檔案

        嵌入式硬體資源存儲空間有限,可以使用strip對鏡像進行壓縮。

        arm-none-linux-gnueabi-strip 要壓縮的檔案名

        eg:

        arm-none-linux-gnueabi-strip led_asm.elf 

    重點掌握:    

    9. addr2line  根據位址資訊定位錯誤資訊

        arm-none-linux-gnueabi-addr2line -e ***.elf 錯誤位址 -a -f 

        -e:指定可執行檔案的

        -a -f: 回顯錯誤位址對應的函數的名字

        eg: 

        arm-none-linux-gnueabi-addr2line -e interface.elf 0x43c01768 -a -f

        [email protected]:02-led-c$ arm-none-linux-gnueabi-addr2line -e interface.elf 0x43c01768 -a -f

        0x43c01768

        hal_led_init

        /home/hqyj/20021/ARM/02-led-c/main.c:37

        常用于定位野指針或者空指針等錯誤資訊引起的核心崩潰。

        當核心崩潰時,再列印核心的崩潰的位址資訊。

    10. 總結 

        gnu指令名   --help  : 檢視幫助手冊

        百度gnu指令的使用

繼續閱讀