问个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的处理器,难道跟单片机的那个机制不一样吗?
...全文
706 点赞 收藏 4
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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阶段,中断向量表的起始地址在哪里呢。
回复
发动态
发帖子
Linux_Kernel
创建于2007-08-27

4008

社区成员

Linux/Unix社区 内核源代码研究区
申请成为版主
社区公告
暂无公告