记录嵌入式中程序编译流程、makefile详解
0. 授权须知
📋 个人简介
- 💖 作者简介:大家好,我是喜欢记录零碎知识点的小菜鸟。😎
- 📝 个人主页:欢迎访问我的 Ethernet_Comm 博客主页🔥
- 🎉 支持我:点赞👍+收藏⭐️+留言📝
- 📣 系列专栏:沁恒蓝牙mesh二次开发 🍁
- 💬格言:写文档啊不是写文章,重要的还是直白!🔥
转载文章,禁止声明原创;不允许直接二次转载,转载请根据原文链接联系作者
若无需改版,在文首清楚标注作者及来源/原文链接,并删除【原创声明】,即可直接转载。
但对于未注明转载来源/原文链接的文章,我将保留追述的权利。作者:积跬步、至千里
1.编译流程
编译流程主要分为以下4个阶段:
- 预处理:展开所有的头文件、
替换程序中的宏、解析条件编译并添加到文件中。 - 编译: 将预处理的代码编译为汇编代码
- 汇编: 将汇编语言转化为二进制目标文件
- 链接: 将多个二进制目标文件,链接为一个最终的可执行文件
参考:【gcc&arm-linux-gcc编译过程详解】
【linux基础篇(一)——GCC和Makefile编译过程】
2.将编写的C代码编译为 .bin 文件流程
2.1 编写 Makefile
目标是将汇编启动问看 startup.s
和 main.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
文件。
3.lds链接脚本
用于描述文件如何把链接在一起形最终的可执行文件
4.修改makefile文件
将上述小节文件定义为 imx6ul.lds
文件,将makefile 的链接命令修改为
arm-linux-gnueabihf-ld -Ttext 0X87800000 -o ledc.elf $^
改为:
arm-linux-gnueabihf-ld -Timx6ul.lds -o ledc.elf $^