torresliang 发表于 2010-12-06 13:08

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的中断处理函数的??

希望哪位大侠能不吝赐教。

garyv 发表于 2010-12-06 16:50

OS有自己的IVT,存放在RAM里面0x00000000开始的地方(ARM)

torresliang 发表于 2010-12-06 18:57

回复 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?这个我也不清楚,希望这个帖子能给一个比较解答,也算抛砖引玉吧。

garyv 发表于 2010-12-07 12:31

你忽略了MMU

linyunxian 发表于 2010-12-17 16:48

回复 1# torresliang


    中断矢量表并非一定在 0 地址。在开了mmu 之后,linux的中断矢量表放在了 0xffff0000 的位置上。详情见 arm 的mmu section
页: [1]
查看完整版本: u boot引导操作系统的问题