makefile初步制作,arm-linux- (gcc/ld/objcopy/objdump)详解

在linux中输入vi Makefile 来实现创建Makefile文件

注意:命令行前必须加TAB键

例如:将两个文件led.c和crt0.S汇编文件,制作一个Makefile文件

1 1 led.bin : crt0.S led.c
2 2 arm-linux-gcc -c -o crt0.o crt0.c
3 3 arm-linux-gcc -c -o led.o led.c
4 4 arm-linux-ld -Ttext 0x00000000 -g crt0.o led.o -o led_elf
5 5 arm-linux-objcopy -O binary -S led_elf led.bin
6 6 arm-linux-objdump -D -m arm led_elf > led.dis
7 7 clean:
8 8 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。

arm-linux-objcopy   复制选项,支持格式转换

  • -O binary     用来指定生成文件按照后面的格式来输出,其中binary是指生成二进制(.bin)文件。     
  • -S                 不从源文件中复制重定位信息和符号信息到目标文件中去

arm-linux-objdump   反编译选项 

  • -D                反编译所有段
  • -b binary     指定反编译目标文件格式
  • -m ram       指定反编译目标文件所需的架构,这里是ram架构

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏xdecode

Windows中根据端口定位持有者程序

之前被一个问题所困扰, 电脑过一段时间就无法上网, 查询netstat, 会有大量的端口被占用, 但是看不出来是哪个程序开启的 ( 最终定位到是ADSafe搞得...

1767
来自专栏Java Edge

Git仓库初始化

2667
来自专栏Jerry的SAP技术分享

Kubenetes里pod和service绑定的实现方式

我之前的文章 如何在Kubernetes里创建一个Nginx service介绍了如何创建一个Kubernetes pod和service,使用的方法是命令ku...

763
来自专栏Rainbond开源「容器云平台」

好雨云帮一周问答集锦(2017.02.13-2017.02.19)

1043
来自专栏腾讯云实验室

搭建 Nginx 静态网站

腾讯云提供了开发者实验室教你搭建 Nginx 静态网站,教程内容如下,用户可以点击开发者实验室快速上机完成实验。

7037
来自专栏码农分享

2 目录结构

vonic-webpack-starter 是vonic-template下载后的目录,自动生成结构保持不变,只需要改变Src目录下的目录结构,对修改后的结构进...

903
来自专栏游戏杂谈

替换系统自带的记事本

系统自带的记事本功能比较弱,所以一般我会选择使用notepad2.exe来替代它。

853
来自专栏机器学习实践二三事

Ipynb文件的打开

RT,ipynb文件用gedit直接打开的话,太多附加信息,此时需要在浏览器端打开 升级ipython 太低版本的ipython是不行的,出现的错误可能是这样的...

1838
来自专栏Python小屋

Python+django网页设计入门(4):用户登录与登录验证

首先,按照Python+django网页设计入门(3):使用SQLite数据库描述的步骤创建网站。

1163
来自专栏GreenLeaves

Linux下Nginx实现负载均衡

关于在本地虚拟机(VMware 14)下安装Linux同时安装Nginx,请参考Nginx学习系列之搭建环境

584

扫码关注云+社区