天嵌 ARM开发社区

 找回密码
 注册
查看: 2856|回复: 0

Bootloaer中断向量重定向问题

[复制链接]
bjhubingtao 发表于 2014-3-30 09:42:40 | 显示全部楼层 |阅读模式
刚开始学bootloaer,有一个地方十分不懂,希望大家给指点一下。
        1.2440 bootloaer在用Jlink下载到sdram进行调试时,程序下载到0x30000000处,通过开启MMU_Iinit(),将虚拟地址0x0000000映射到了物理地址0x30000000处,从而实现了中断向量表的重新定位
        我的理解是:当bootloader启动后,最后代码copy到sdram后运行,那么通过开启mmu,那么 不就实现了中断向量的重定向
        2.但我在其他的一些资料上,有这些说明,下面是一些网上的资料:
(1)ARM的体系结构规定在异常发生时,要从0 地址开始处读取相应的处理指令,然而S3C2440A的固定地址空间管理方法在VxWorks里会遇到问题。因为从硬件上讲,S3C2440A的地址空间是不能重分配的,它也不支持所谓的REMAP功能,一旦硬件连线决定了其RAM基地址为0x30000000(nGCS6),0地址上为ROM(nGCS0),就无法再更改。因此必须采用其他办法来解决异常向量表的访问问题。


(2).Remap的作用
  当ARM处理器上电或者Reset之后,处理器从0x0取指。因此,必须保证系统上电时,0x0处有指令可以执行。所以,上电的时候,0x0地址处必定是ROM或者Flash(NOR)。
  但是,为了加快启动的速度,也方便可以更改异常向量表,加快中断响应速度,往往把异常向量表映射到更快、更宽(32bit/16bit)的RAM中。但是异常向量表的开始地址是由ARM架构决定的,必须位于0x0处,因此,必须把RAM映射到0x0。
  (3).Remap的配置
  Remap的实现和ARM处理器的实现相关。
  1)如果处理器有专门的寄存器可以完成Remap。那么Remap是通过Remap寄存器的相应bit置1完成的。如Atmel AT91xx
  2)如果处理器没有专门的寄存器,但是memory的bank控制寄存器可以用来配置bank的起始地址,那么只要把RAM的起始地址编程为0x0,也可以完成remap。如samsung s3c4510
  3)如果上面两种机制都没有,那么Remap就不要做了。因为处理器实现决定了SDRAM对应的bank地址是不能改变的。如Samsung S3c2410.
  4.Remap配置前后要做的工作
  Remap前后,不同之处就是RAM的位置变了。为了达到Remap的目的,就是加快启动的速度和异常处理速度,一定要初始化异常堆栈和建立异常向量表的。
  5.如果象2410那样不能Remap的话怎么办?
  2410不是不能Remap吗?为了加快启动速度,可以这样做
  1)使用它的NAND boot模式。为什么NAND boot会比较快,那是因为2410里面有块小石头——“SteppingStone”,一块4KB SRAM,它是映射在0x0的。启动程序会自动被copy到这个石头里面。自然异常向量的入口放到这个地方,一样可以达到比NOR boot快的启动、异常响应速度。
  2)如果你对NOR Boot情有独衷,那么你只好把你的异常向量的入口copy到SDRAM里面,实现所谓的High Vector




总结:看完以上内容后都感觉一头雾水,对2440到底能不能实现中断向量重定位,完全搞不清了,希望高手指点一下迷雾。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号-2 )

GMT+8, 2025-5-3 00:03 , Processed in 2.036448 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表