天天看点

交叉编译工具链中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命令的使用