简单Makefile中指定链接脚本(地址)的代码

来源:互联网 发布:浏览器 网络连接错误 编辑:程序博客网 时间:2024/06/05 18:06

一、led是用汇编写的,仅此一个文件


Makefile文件代码:

led.bin: led.o arm-linux-ld -Ttext 0x0 -o led.elf $^ //注意到这里是-Ttext 0x0,而非链接脚本,所以文件目录下也没有链接脚本arm-linux-objcopy -O binary led.elf led.binarm-linux-objdump -D led.elf > led_elf.disgcc mkv210_image.c -o mkx210./mkx210 led.bin 210.bin%.o : %.Sarm-linux-gcc -o $@ $< -c%.o : %.carm-linux-gcc -o $@ $< -c clean:rm *.o *.elf *.bin *.dis mkx210 -f


二、led使用c来编写,另外还有一个start.S文件来进行必要的初始化(主要是栈)


start.S文件代码:

/* * 文件名:led.s * 描述:演示汇编设置栈并且调用C语言程序来点亮LED */#define WTCON0xE2700000#define SVC_STACK0xd0037d80.global _start// 把_start链接属性改为外部,这样其他文件就可以看见_start了_start:// 第1步:关看门狗(向WTCON的bit5写入0即可)ldr r0, =WTCONldr r1, =0x0str r1, [r0]// 第2步:设置SVC栈ldr sp, =SVC_STACK// 从这里之后就可以开始调用C程序了bl led_blink// led_blink是C语言实现的一个函数// 汇编最后的这个死循环不能丢b .

Makefile文件代码:

led.bin: start.o led.oarm-linux-ld -Tlink.lds -o led.elf $^ //注意这里使用了链接脚本,所以在目录下应该有一个链接脚本arm-linux-objcopy -O binary led.elf led.binarm-linux-objdump -D led.elf > led_elf.disgcc mkv210_image.c -o mkx210./mkx210 led.bin 210.bin%.o : %.Sarm-linux-gcc -o $@ $< -c -nostdlib%.o : %.carm-linux-gcc -o $@ $< -c -nostdlibclean:rm *.o *.elf *.bin *.dis mkx210 -f

链接脚本代码:

SECTIONS{. = 0xd0024000;.text : {start.o* (.text)}    .data : {* (.data)}bss_start = .; .bss : {* (.bss)}bss_end  = .;}


阅读全文
0 0
原创粉丝点击