u boot引导操作系统的问题
CPU: s3c2410
编译环境:Linux + gcc
问题条件:
在以2410为CPU的开发板上用uboot来load OS(Linux或其它),启动方式为从Norflash启动。
问题描述:
在以Norflash启动的时候,Norflash被映射到2410的0开始的地址,而在uboot中在norflash的这个地址处
放的是中断向量表,在中断发生的时候硬件会自动跳转到相应地址处去跳转到相应中断处理函数。可是当
uboot将OS 启动起来之后,整个控制就转到了OS那边,中断处理的时候应该会需要OS中的中断处理函数,
而这个时候Norflash占用的地址0开始的地址区域,所以每次中断发生时都会跳转到uboot所在的中断向量
表,这种情况是怎么跳转到OS的中断处理函数的??
希望哪位大侠能不吝赐教。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
回复 1# torresliang
中断矢量表并非一定在 0 地址。在开了mmu 之后,linux的中断矢量表放在了 0xffff0000 的位置上。详情见 arm 的mmu section
你忽略了MMU
回复 2# garyv
可是RAM一般并不是挂在2410的bank0上面的,它的地址0应该并不是2410的地址0,我想它的IVT应该不能够映射到Norflash所占用的bank0的地址处(因为
Norflash的这个地址被Uboot占着),而ARM的架构好像只能够跳转到BANK0的地址0的IVT上(不确定是否一定这样)。
是不是有可能这样,在2410中有一块4K的内部RAM用于从NAND flash启动时的自动下载数据,OS有没有可能在启动之后将自己的向量表放到了这4K的区间,然后
将这4K的区间映射到了BANK0?这个我也不清楚,希望这个帖子能给一个比较解答,也算抛砖引玉吧。
OS有自己的IVT,存放在RAM里面0x00000000开始的地方(ARM)