问个arm处理器下uboot的问题

suncs2001 2018-04-09 03:57:00
正在学习三星4412 上的uboot流程,之前搞过单片机 stm32F1xx等类型的arm cortex M系列的cpu。 现在有个疑问,在stm32的单片机上,有个偏移向量(SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET;),bootloader跳转的时候要跳到这个地址,而应用程序里面也要设置同样的偏移向量,而且代码要下载到这个地址上,程序才能正常运行,这个地址实际就是应用程序的中断向量表的起始地址。

但是在linux的uboot上,看到了有设置中断向量表,但是这个地址与bin文件的地址并不一样,都是arm的处理器,难道跟单片机的那个机制不一样吗?
...全文
813 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jklinux 2018-04-11
  • 打赏
  • 举报
回复
引用 3 楼 suncs2001 的回复:
我的疑问是,在进入kernel阶段后,如果发生了中断,因为是arm体系的cpu,应该是从中断向量表开始执行,那在kernel阶段,中断向量表的起始地址在哪里呢。
进入内核后, uboot就不存在了, 内核里通过mmu映射0xffff0000高地址的异常向量地址到内核里的异常处理,
jklinux 2018-04-10
  • 打赏
  • 举报
回复
4412上 ,uboot代码里没开中断功能的。而且uboot指定的执行地址也不是0地址, 而是在编译时指定执行地址为0x43e00000. 也就是uboot里的异常向量表地址也是从0x43e00000地址开始的(真发生异常时会也不会用到这处理代码) 而且4412的uboot启动过程比较复杂: 0地址默认是irom(也就是bios)占用的, irom里的程序是一开机就执行的, 负责引导bl1.bin的代码, bl1再负责引导bl2.bin(uboot的前14K代码), bl2.bin的最后会读出uboot的完整代码到编译时指定的内存地址0x43e00000上执行
fly 100% 2018-04-10
  • 打赏
  • 举报
回复
将0地址映射过去的,uboot 不用中断的,所以随便放哪运行
suncs2001 2018-04-10
  • 打赏
  • 举报
回复
我的疑问是,在进入kernel阶段后,如果发生了中断,因为是arm体系的cpu,应该是从中断向量表开始执行,那在kernel阶段,中断向量表的起始地址在哪里呢。

4,465

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧