Part5-核心初始化-Part5.1异常向量表
异常和平时讨论的异常一样,都是去执行异常中断程序,然后再回去执行原来的程序中断处。
这段代码放在start.s刚开始地方,和DSP中讲的一样,放在程序最前面的地方异常向量表
手把手教你写代码
1、start.s
2、gboot.lds
3、makefile
创建start.S文件(touch start.S)
更改权限,在win中编写
.text .global _start _start: b reset ldr pc,_undifined_instruction _undifined_instruction: .word undifined_instruction//新开一个存储单元,将地址存进去,让上面的ldr指令变成内存操作指令,而不是伪指令 ldr pc,_softwart_interrupt ldr pc,_prefetch_abort ldr pc,_data_abort ldr pc,_not_used ldr pc,_irq ldr pc,_fiq //reset命令不用加 _softwart_interrupt: .word softwart_interrupt _prefetch_abort: .word prefetch_abort _data_abort: .word data_abort _not_used: .word not_used _irq: .word irq _fiq: .word fiq //下面是各个中断处理,现在什么都不做,用Nop代替 undifined_instruction://未定义中断 nop softwart_interrupt://软中断 nop prefetch_abort://预处理中断 nop data_abort://数据中断 nop not_used://不用 nop irq: nop fiq: nop reset: nop
创建gboot.lds文件(touch gboot.lds)
OUTPUT_ARCH(arm)//输出格式是arm格式 ENTRY(_start)//输出程序入口是在start标号处 SECTIONS{ .=0x50008000;//这是起始地址,这里用的是6410的起始地址 .=ALIGN(4); .text://这里先放的是start.o代码段,其他的放在后面 { start.o(.text) *.text } .=ALIGN(4); .data: { *(.data) } .=ALIGN(4); bss_start=.;//这里有分号 .bss: { *(.bss) } bss_end=.; }
创建makefile规则
all:start.o arm-linux-ld -Tgboot.lds -o gboot.elf $^ arm-linux-objcopy -O binary gboot.elf gboot.bin %.o:%.S arm-linux-gcc -g -c $^ %.o:%.c arm-linux-gcc -g -c $^
.PHONY: clean
clean:
rm *.o *.elf *.bin
运行make能得到.bin文件
对于210开发板
需要载入头文件
用辅助软件格式化,下载到nand flash中
再重新连接一次,make,./mkv210_image led.bin 210.bin
/home/dnw 210.bin 0x20000000
这是加了头文件的情况