当前位置:   article > 正文

uboot异常向量表---嵌入式回归第六篇

uboot异常向量表

异常向量表:

1. 异常向量表定义:因为内部或者外部的一些事件,导致处理器停下正在处理的工作,转而去处理这些发生的事件

2. 异常类型:七种异常(这个前面有提到过)


3. 异常入口:

可以看到Normal address这一栏 ,这个地址表示某个异常发生时,处理器会自动的跳转这个地址来执行这个地方的程序,也就是当一种异常发生的时候,ARM处理器会跳转到对应该异常的固定地址去执行异常处理程序,而这个固定的地址,就称之为异常向量。(从表可以有两组异常向量地址可以选择,这个可以通过CPRS15寄存器来配置)

4. 向量表:


下面根据上面的知识点和datasheet写一个最简单的uboot基本起始代码,就是相当一个简单开机执行步骤!

这里包含一个Makefile, 一个start.S文件, 一个链接器脚本gboot.lds文件

start.S

  1. <span style="font-size:18px;">.text
  2. .global _start
  3. _start:
  4. b reset @跳转到reset标号处 0地址处理就的是reset异常模式
  5. ldr pc, _undefined_instruction @ldr伪指令 相当于装载指令
  6. ldr pc, _software_interrupt
  7. ldr pc, _prefetch_abort
  8. ldr pc, _data_abort
  9. ldr pc, _not_used
  10. ldr pc, _irq
  11. ldr pc, _fiq
  12. @新开一个内存单元 将地址值装载到内存中
  13. _undefined_instruction: .word undefined_instruction @这里再给每种异常模式定义一个标号
  14. _software_interrupt: .word software_interrupt
  15. _prefetch_abort: .word prefetch_abort
  16. _data_abort: .word data_abort
  17. _not_used: .word not_used
  18. _irq: .word irq
  19. _fiq: .word fiq
  20. undefined_instruction:
  21. nop
  22. software_interrupt:
  23. nop
  24. prefetch_abort:
  25. nop
  26. data_abort:
  27. nop
  28. not_used: @地址0x00000014处 这里什么也不做
  29. nop
  30. irq:
  31. nop
  32. fiq:
  33. nop
  34. reset:
  35. nop
  36. </span>
gboot.lds

  1. <span style="font-size:18px;">OUTPUT_ARCH(arm)
  2. ENTRY(_start)/*ENTRY表示程序的入口是在_start标号处*/
  3. SECTIONS {
  4. . = 0x50008000;/*链接器脚本中定义程序在内存中运行的起始地址*/
  5. . = ALIGN(4);/*4字节对齐*/
  6. .text :/*这里是代码段*/
  7. {
  8. start.o (.text)/*第一个文件是start.o*/
  9. *(.text)
  10. }
  11. . = ALIGN(4);
  12. .data : /*数据段*/
  13. {
  14. *(.data)
  15. }
  16. . = ALIGN(4);
  17. bss_start = .; /*这里用一个变量把bss段起始位置记录下来*/
  18. .bss : /*bss段*/
  19. {
  20. *(.bss)
  21. }
  22. bss_end = .;/*这里用一个变量把bss段结束地址记录下来*/
  23. }
  24. </span>

Makefile

  1. <span style="font-size:18px;">all: start.o #最终目标
  2. arm-linux-ld -Tgboot.lds -o gboot.elf $^ #生成elf格式文件
  3. arm-linux-objcopy -O binary gboot.elf gboot.bin @转化工具生成二进制目标文件
  4. %.o : %.S #只编译不链接
  5. arm-linux-gcc -g -c $^
  6. %.o : %.c
  7. arm-linux-gcc -g -c $^
  8. .PHONY: clean
  9. clean:
  10. rm *.o *.elf *.bin
  11. </span>

这里特别注意这里三种不同格式文件的注释方式:(编译回显的乱码可以加选项去掉)


后边就可以将gboot.bin下载到开发板上运行了!不过这时候是什么效果也看不到的!万事开头难!



声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/973665
推荐阅读
相关标签
  

闽ICP备14008679号