uboot异常向量表---嵌入式回归第六篇
来源:互联网 发布:知乎赞同最多 编辑:程序博客网 时间:2024/05/18 01:03
异常向量表:
1. 异常向量表定义:因为内部或者外部的一些事件,导致处理器停下正在处理的工作,转而去处理这些发生的事件
2. 异常类型:七种异常(这个前面有提到过)
3. 异常入口:
可以看到Normal address这一栏 ,这个地址表示某个异常发生时,处理器会自动的跳转这个地址来执行这个地方的程序,也就是当一种异常发生的时候,ARM处理器会跳转到对应该异常的固定地址去执行异常处理程序,而这个固定的地址,就称之为异常向量。(从表可以有两组异常向量地址可以选择,这个可以通过CPRS15寄存器来配置)
4. 向量表:
下面根据上面的知识点和datasheet写一个最简单的uboot基本起始代码,就是相当一个简单开机执行步骤!
这里包含一个Makefile, 一个start.S文件, 一个链接器脚本gboot.lds文件
start.S
<span style="font-size:18px;">.text.global_start_start:breset@跳转到reset标号处 0地址处理就的是reset异常模式ldrpc, _undefined_instruction@ldr伪指令 相当于装载指令ldrpc, _software_interruptldrpc, _prefetch_abortldrpc, _data_abortldrpc, _not_usedldrpc, _irqldrpc, _fiq@新开一个内存单元 将地址值装载到内存中_undefined_instruction: .word undefined_instruction @这里再给每种异常模式定义一个标号_software_interrupt:.word software_interrupt_prefetch_abort:.word prefetch_abort_data_abort:.word data_abort_not_used:.word not_used_irq:.word irq_fiq:.word fiqundefined_instruction:nopsoftware_interrupt:nopprefetch_abort:nopdata_abort:nopnot_used: @地址0x00000014处 这里什么也不做nopirq:nopfiq:nopreset:nop</span>gboot.lds
<span style="font-size:18px;">OUTPUT_ARCH(arm)ENTRY(_start)/*ENTRY表示程序的入口是在_start标号处*/SECTIONS {. = 0x50008000;/*链接器脚本中定义程序在内存中运行的起始地址*/. = ALIGN(4);/*4字节对齐*/.text :/*这里是代码段*/{start.o (.text)/*第一个文件是start.o*/*(.text)}. = ALIGN(4);.data : /*数据段*/{*(.data)}. = ALIGN(4);bss_start = .; /*这里用一个变量把bss段起始位置记录下来*/.bss : /*bss段*/{*(.bss) }bss_end = .;/*这里用一个变量把bss段结束地址记录下来*/}</span>
Makefile
<span style="font-size:18px;">all: start.o #最终目标arm-linux-ld -Tgboot.lds -o gboot.elf $^ #生成elf格式文件arm-linux-objcopy -O binary gboot.elf gboot.bin @转化工具生成二进制目标文件%.o : %.S #只编译不链接arm-linux-gcc -g -c $^%.o : %.carm-linux-gcc -g -c $^.PHONY: cleanclean:rm *.o *.elf *.bin</span>
这里特别注意这里三种不同格式文件的注释方式:(编译回显的乱码可以加选项去掉)
后边就可以将gboot.bin下载到开发板上运行了!不过这时候是什么效果也看不到的!万事开头难!
1 0
- uboot异常向量表---嵌入式回归第六篇
- 嵌入式学习-uboot-lesson4.1-异常向量表
- 异常向量表
- 设置异常向量表
- bootloader 异常向量表
- 异常向量表
- 异常向量表
- 异常向量表
- u-boot异常向量表
- 二十三.异常向量表
- 异常向量表的设定
- Bootloader之异常向量表
- tiny6410异常向量表初始化
- 异常向量表的创建
- 异常向量表和中断向量表的区别
- uboot关闭看门狗和中断---嵌入式回归第八篇
- ARM的异常及向量表
- ARM-linux异常向量表的建立
- awk 中使用 OFS.
- Struts1运用Java注解实现简单的权限控制
- nyoj 86 找球号(一)<水,二分>
- [算法练习]找出40000以内的素数
- ZOJ 3944People Counting
- uboot异常向量表---嵌入式回归第六篇
- UVA_457题的一些思考
- 解决Execution failed for task ':app:clean'. > Unable to delete directory问题
- 两个等长数组2n个数,找出中位数
- LeetCode 345. Reverse Vowels of a String
- iOS开发使用AFN请求服务器数据,报错误码-1016的解决办法(图解)
- Android图片选择器、多选框架
- ubuntu 软件安装和配置
- scala学习