前言:我对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源码
%rename link old_link
*link:
-T gba_mb.ld%s %(old_link)
*startfile:
gba_crt0%O%s crti%O%s crtbegin%O%s
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
objdump -D main.elf > main.s
arm: b 0x080000C0 @跳转指令
或
arm: b 0x020000c0 @跳转指令