前言:我对makefile文件不是很熟悉,所以只能大概分析一下

makefile文件分析

一, 判断两个关键系统变量 $(DEVKITARM)和$(DEVKITPRO),注:引用库路径都是根据这两个变量的

二, 引用gba_ruls文件,和base_ruls文件

三, 初始化所有变量

四, 编译所有文件,当遇到*.bin文件时,执行 bin2s $(outfile) || $(AS) -o $(outfile) <此命令在gba_rules文件中> (注:先把二进制文件转化成 汇编文件,然后汇编器输出对象文件,在linux下,命令或许有更改)

bin2s,二进制输出汇编文件

五, 编译main.c文件,输出对象文件后,使用链接器(LD),链接文件

链接文件,$(LD) -specs=gba_mb.specs $(LDFLAGS) $(OFILES) $(LIBPATHS) $(LIBS) -o $@<此命令在gba_rules文件中>

链接器会根据specs文件配置输出的链接文件,有关specs文件的详细资料可以网上查找,或者往下看specs文件分析

六, 最后一步, objcopy -O binary $< $@ <此命令在gba_rules文件>

嵌入式开发的关键程序,把elf输出成bin文件

七, 小处理生成的bin文件,gbafix <bin>,网上有gbafix源码

有关specs文件分析

gba_mb.specs文件大致内容如下
%rename link                old_link*link:
-T gba_mb.ld%s %(old_link)*startfile:
gba_crt0%O%s crti%O%s crtbegin%O%s

*link:

-T 指定脚本,gba_mb.ld,此脚本设置存储器各种分配,字段分配,我并不是很了解LD文件结构,需要了解的查有关资料
*startfile:
引用gba_crt0.s crti.s crtbegin.s文件作为程序开始文件
此命令表示,指定开始文件,(注:所有程序都是从_start开始,然后才到main。你可以objdump -D rom.elf > rom.s,查看有关程序的汇 编)
当然,你也可以在链接命令时添加 ( -nostdlib)而不适用gba_mb.specs配置,不使用标准库文件,但此刻生成的程序以第一个函数为 初始函数

编译过程简化版

1)gcc -c main.c -o main.o
2)gcc -specs=gba_mb.specs main.o  -o main.elf
3)objcopy -O binary main.elf main.gba
此刻已经完成好编译,在附加 gbafix处理ROM文件就OK了
如果运行不了,你可以使用objdump
objdump -D main.elf > main.s

注:GBA文件的头结构,请查有关资料,
第一个指令是 
arm: b    0x080000C0 @跳转指令
或
arm: b    0x020000c0    @跳转指令

如果是其他指令的,一律不执行第二条指令

DevKitPro(GBA),MakeFile文件大概分析(编译)相关推荐

  1. 多文件目录下makefile文件递归执行编译所有c文件 很不错

    下面是网上找到的,思路很不错,当然也无法满足所有的需求,我执行又修改了一套.解决了下面的方法存在的问题:每次编译都是全编译的问题,解决思路是.o文件需要跟编译的makefile文件同目录. 首先说说本 ...

  2. Ubuntu下使用cmake结合CmakeLists.txt生成makefile文件并进行编译

    转自1:https://www.cnblogs.com/cv-pr/p/6206921.html 转自2:https://blog.csdn.net/qqwangfan/article/details ...

  3. Linux内核Makefile文件

    Linux内核Makefile文件(翻译自内 核手册) 转载自:http://blog.chinaunix.net/uid-21651676-id-60377.html Linux 内核Makefil ...

  4. Linux——Makefile文件

    Makefile/makefile Windows环境下IDE会自动帮你完成makefile文件的编写,Linux上我们需要自己编写. Makefile文件,我们可以将其理解为一个工程文件的编译规则, ...

  5. makefile文件的一些解读

    hit2015spring晨凫追风\frac{hit2015spring}{晨凫追风}欢迎关注我的博客晨凫追风 这篇文章算是一个学习的笔记吧,在很多的程序构建过程中的一些东西 gcc编程的四个步骤 命 ...

  6. 怎么在Windows下使用Makefile文件

     [推荐阅读] virtio-net 实现机制[一](图文并茂) 浅析linux内核网络协议栈--linux bridge 深度解析linux内核模块编译makefile 前言:如果熟悉在Linux开 ...

  7. Android makefile文件解析

    Android makefile文件解析 Android编译过程详解 编译步骤 Android的编译步骤包括三步: 1.通过source build/envsetup.sh命令将sh文件中的命令加载到 ...

  8. Makefile文件的编写(实例详解)

    1.什么是Makefile? 一个工程中的源文件不计其数,其按类型.功能.模块分别放在若干个目录中,Makefile定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译 ...

  9. 【Linux基础】如何编写Makefile文件?

    文章目录 前言 一.make工具简介 1.什么是make? 2.如何安装make? 二.编写Makefile文件 1.文件组成 2.工作原理 3.Makefile文件优点 4.单级目录下的Makefi ...

  10. Makefile文件详解一(怎么在Windows下使用Makefile文件)

    前言:如果熟悉在Linux开发的话,肯定知道Makefile文件的用处,它给我们带来很多的便利.在Linux系统下并不会像Windows那么多开发工具,在Windows下,只要在开发工具上点击一个按钮 ...

最新文章

  1. 【python教程入门学习】机器学习使用Python编程是因为什么?
  2. 20. PWT、PCD(填坑篇)
  3. yolov3损失函数改进_YOLOv3论文解析
  4. matlab debug出现k,MATLAB下的程序调试
  5. 大话设计模式—观察者模式
  6. SQL SERVER 基础知识及语法总结,从头说起,一点一滴 (一)
  7. 2021年度训练联盟热身训练赛第一场 H题On Average They‘re Purple(BFS)
  8. 学生成绩管理 php,php学生成绩管理系统(模板)
  9. 【以太坊源码】I.区块和交易,合约和虚拟机
  10. 网络对抗技术实验二,第一部分,第二部分
  11. C++ 常用术语(后续补充)
  12. esp8266 wifi信号强度示意表
  13. 问题 A: 三角函数计算(python)
  14. Windows下Chcp命令的用法
  15. php中下载xls某个文件,php下载excel文件
  16. day03--java基础编程:面向对象,构造方法,代码块讲解,this super,static,final,访问修饰符,方法重写,向上/下造型,main方法,抽象类,接口,设计模式,异常,内部类
  17. arcgis利用栅格计算器修改DEM高程数据
  18. 联想WIN10进入BIOS进行设置的两种方法
  19. 2022年金属非金属矿山(地下矿山)安全管理人员特种作业证考试题库模拟考试平台操作
  20. linux质控命令,质控软件 fastp

热门文章

  1. CMMI5认证必备条件
  2. vue3 + typescript + echarts后端动态获取数据显示问题总结
  3. Redis 可视化工具 Redis Desktop Manager 和 treeNMS 的使用
  4. 二分查找(java代码实现)
  5. Bat批处理命令执行中文路径解决方法
  6. PMP学习笔记 零 启动
  7. python库参考_Python库参考手册(Python Library Reference)
  8. 详解EtherCAT主站SOEM源码_eepromtool.c
  9. JAVA如何实现视频在线播放(MP4文件在线播放)
  10. 使用js进行智慧树刷课