汇编语言交叉编译&Makefile文件

预编译:汇编 .s 文件 -> .o文件

1
arm-linux-gcc -c -o led_on.o led_on.S

  arm-linux-gcc 交叉编译工具,是在x86平台编译arm平台代码的工具

 -c 预编译

 -o led_on.o   参数 -o 代表输出文件(out put) 后面跟输出文件名

 led_on.S 是汇编语言源码文件

 

 

链接文件:.o 文件 --> .elf 文件

1
arm-linux-ld -Ttext 0 led_on.o  -o led_on.elf

  arm-linux-ld  链接文件,是在x86平台编译arm平台代码的工具

 -Ttext  0  设置源码里 text 段,加载到内存(RAM)0地址运行。

      0 实际是 0x0000的简写,因为是 0 ,人和机器都不会产生歧义,就不区分是几进制了。

      注意:如果非0则不能用这样的简写

 led_on.o   上一步预编译好的 .o 文件

 -o led_on.elf 参数 -o 代表输出文件(out put) 后面跟输出文件名

 

 

生成机器可运行的二进制文件:

1
arm-linux-objcopy -o binary -S led_on.elf led_on.bin

  arm-linux-objcopy 编译文件,是在x86平台编译arm平台代码的工具

 -O binary   指定生成二进制文件,-O是大写。

 -S led_on.elf  指定上一步的链接文件

 led_on.bin 输出机器可执行的文件

 

 

Make链接编译文件:

说明:

   在编译时候,如果每个文件都输入好多条指令才能编译完成,效率会很低,也可能会输错命令。

  如果一个大型项目有很多文件,那将非常耗时费力。

  Makefile 类似于 windos下bat批处理文件,Linux 下 sh 的 shell 文件。

  Makefile文件名不区分大小写,但是官方推荐使用Makefile来命名。

编写Makefile文件

文件名:Makefile

1
2
3
4
5
6
all:
    arm-linux-gcc -c -o led_on.o led_on.S
    arm-linux-ld -Ttext 0 led_on.o -o led_on.elf
    arm-linux-objcopy -o binary -S led_on.elf led_on.bin<br>
clean:
    rm *.o  *.elf *.bin

  all 代表 入口函数,类似 程序的 main 函数。

  clean 代表用户可以调用的函数。

  注意: 缩进要用 Tab ,而不是用空格

使用方法:

编译:

1
Makefile

 删除所有编译的文件:

1
Makefile clean

   make会自动判断文件时间,来确定要不要重新编译已经生成过的 .o .elf .bin等文件。但是有些时候

不需要已经编译好的文件了就要全部删除,比如发布源码(给同事或放到网络上) 。

 

 

 

 

 

 

 

来源参考:

B站《韦东山_嵌入式Linux_第一期ARM裸机实战视频教程_免费试看版》
https://blog.csdn.net/weixin_34332352/article/details/116929868

 

posted @   悟透  阅读(196)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
历史上的今天:
2021-01-23 CentosUbuntu实现VM共享文件夹,短路径
点击右上角即可分享
微信分享提示