Uboot移植 2: v210的启动机制、异常向量表地址映射

本文详细介绍了ARM处理器中的异常处理,包括未定义指令、软中断、预取址终止和数据异常等,并分析了6410与V210的启动流程。V210启动机制试图通过增大iROM和SRAM来改善启动过程,但因SRAM限制,引入了uboot-spl.bin。此外,还讨论了异常向量表地址映射问题,以及如何在不可更改的iROM区域处理异常。
摘要由CSDN通过智能技术生成

一、start.S代码分析-涉及v210的启动机制

1、头文件有两个位置,一个是位于uboot根目录下的include文件夹,另一个是arch/arm/include,注意:之所以要在这两个文件夹找头文件,是因为在Makefile里面指定了的

 

譬如:

2、

_undefined_instruction:未定义指令异常。CPU在运行过程中碰到一句它无法识别的指令,可能是由于干扰或者flash介质的校验错误读上来一句它无法识别的指令,所以必须得停下来去处理这个异常;

_software_interrupt:软中断。一般用于linux操作系统的系统调用,也就是说从用户模式进入保护模式;

_prefetch_abort:预取址终止。cpu取不到下一条指令,一般发生于什么情况呢,比方说开发板只有512M内存,如果程序当中有一条指令让程序跳转到1G的地方去运行,显然会发生错误,就会产生这个异常;

_data_abort:同理,这个也是告诉CPU去一个不存在的地方取数据,那CPU也取不到数据,不得不停下来处理这个异常;

_irq:就是我们一般意义上的中断。包括定时器中断,外部触发中断,串口中断等等;

_fiq:快中断。一般用于一些实时性很高的场合

3、ldr 指令的区别

4、由3易理解ldr    pc, _undefined_instruction

5、要了解v210的启动机制,需先了解它上一代产品6410的启动机制:

分四步:

1) 上电启动iROM中的程序,主要完成两件事,一初始化时钟和看门狗等外围设备,二将flash或者SD卡中的头4k的内容(图中BL1)拷贝到片内RAM中(图中Stepping Stone)

2) 这4k很小干不了什么事情,可以做些简单的配置,主要是为了配置好DDR主存(图中SDRAM),配置好后再把剩下的BootLoader大部分(图中BL2)加载到主存(图中SDRAM)

3)  然后再把程序的入口跳转到加载到主存中的BL2运行

4)BL2再把图中的OS镜像(linux或者安卓)加载到主存当中,再跳转到OS的入口运行

针对这种机制,uboot就被做成如下形式:

uboot.bin会被放在SD等介质中,上电以后,iROM会把4K的内容加载到SRAM(图中的Stepping Stone)当中,这头4K的程序会判断自己是在SRAM当中还是在SDRAM当中,如果是在SRAM当中就会去配置SDRAM,然后就会把整个bootloader(图中uboot.bin)加载到SDRAM当中,然后再跳转到已加载进SDRAM的bootloader入口开始运行,这个bootloader入口也会判断自己是在主存(SDRAM)当中还是在静态内存(SRAM)当中,如果确实是在主存当中,就会跳过这4K运行bootloader的大部分程序,包括驱动程序、命令行等等,最后再把OS加载进主存当中,把程序指针指向OS的入口处,这样就完成了整个bootloader的启动过程。

6、再看v210的启动机制就比较容易理解了

和6410的区别主要是增大了iROM和SRAM,本意是想能够将整个bootloader加载进SRAM中的,不再局限于那4K,以便从容不迫的配置SDRAM加载OS,但是uboot起码有一百多到两百多KB,SRAM太小了。所以uboot绕开了这个机制,把uboot做成了两个镜像uboot.bin、uboot-spl.bin,其中uboot-spl.bin就相当于之前的4K

二、异常向量表地址映射

根据arm手册我们知道一旦异常发生会被映射到0X00000000或者0xffff0000,这个可以通过cp15协处理器去配。ldr pc,_undefined_instruction指令被放在0XD0020014处,发生异常后会跳转到0x00000004这个地方进行处理,但是0x00000004是在iROM中的,iROM区是不可更改的,所以你不能让它跳到你自己编好的异常处理程序当中,那怎么办呢?下节讲解。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值