概述
一、交叉编译工具链前缀: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常用命令简介所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复