【嵌入式】程序编译流程、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 $^

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-04-26 17:28:06       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-26 17:28:06       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-26 17:28:06       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-26 17:28:06       20 阅读

热门阅读

  1. Uniapp 跨页面传复杂参、传对象

    2024-04-26 17:28:06       11 阅读
  2. pytorch与深度学习

    2024-04-26 17:28:06       14 阅读
  3. Dockerfile COPY、ADD 作用和区别

    2024-04-26 17:28:06       14 阅读
  4. elment ui 中el-input标签中@input初始化赋值触发问题

    2024-04-26 17:28:06       14 阅读
  5. C#开发-Null的整型数值比较

    2024-04-26 17:28:06       17 阅读
  6. 为什么程序开发中不推荐使用全局变量?

    2024-04-26 17:28:06       12 阅读
  7. 面试题总结第二弹

    2024-04-26 17:28:06       13 阅读
  8. Qt——QString 只保留数字

    2024-04-26 17:28:06       12 阅读