我是靠谱客的博主 眼睛大音响,最近开发中收集的这篇文章主要介绍交叉编译工具链中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
        hqyj@hqyj: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命令的使用

最后

以上就是眼睛大音响为你收集整理的交叉编译工具链中GUN常用命令简介的全部内容,希望文章能够帮你解决交叉编译工具链中GUN常用命令简介所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部