【嵌入式】程序编译流程、Makefile以及链接脚本详解

记录嵌入式中程序编译流程、makefile详解

0. 授权须知

📋 个人简介

转载文章,禁止声明原创;不允许直接二次转载,转载请根据原文链接联系作者

若无需改版,在文首清楚标注作者及来源/原文链接,并删除【原创声明】,即可直接转载。
但对于未注明转载来源/原文链接的文章,我将保留追述的权利。

作者:积跬步、至千里

1.编译流程

编译流程主要分为以下4个阶段:

  • 预处理:展开所有的头文件、
    替换程序中的宏、解析条件编译并添加到文件中。
  • 编译: 将预处理的代码编译为汇编代码
  • 汇编: 将汇编语言转化为二进制目标文件
  • 链接: 将多个二进制目标文件,链接为一个最终的可执行文件

参考:【gcc&arm-linux-gcc编译过程详解】
【linux基础篇(一)——GCC和Makefile编译过程】

在这里插入图片描述

2.将编写的C代码编译为 .bin 文件流程

2.1 编写 Makefile

目标是将汇编启动问看 startup.smain.c 文件编译为 ledc.bin 文件

  • startup.s —— startup.o
  • main.c ——- main.o
  • main.o startup.o —— ledc.bin

其中 ledc.bin 需要通过 ledc.elf 文件链接到某个地址处执行

2.2 makefile文件解析

第4行:将.o文件链接为 ledc.elf 文件,并链接到 0x87800000地址处

第5行:将 ledc.elf 文件转为 ledc.bin 文件

第6行:反汇编,生成 ledc.dis 文件。

image-20240426104542576

3.lds链接脚本

用于描述文件如何把链接在一起形最终的可执行文件

image-20240426112102553

4.修改makefile文件

将上述小节文件定义为 imx6ul.lds 文件,将makefile 的链接命令修改为

arm-linux-gnueabihf-ld -Ttext 0X87800000 -o ledc.elf $^

改为:

arm-linux-gnueabihf-ld -Timx6ul.lds -o ledc.elf $^

  • 22
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

积跬步、至千里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值