免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1005 | 回复: 0
打印 上一主题 下一主题

kernel中断与boot的关系 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-18 17:17 |只看该作者 |倒序浏览
网上看的一问一答:
我的意思是说:当kernel跑起来后,如果发生外部中断,从硬件上理解应该是跳去执行0x18处的指令,此处的指令是由bootloader决定的,vivi的此处代码如下:
ENTRY(_start)
ENTRY(ResetEntryPoint)
@
@ Exception vector ...
@
@ 0x00: Reset
b Reset
@ 0x04 Undefine instruction exception
UndefEntryPoint:
b HandleUndef
◎0x08: Software interrupt exception
SWIEntryPoint:
b HandleSWI
....
但,此时我在kernel中运行啊!!
答:当kernel bootup 的时候要建立MM page table,那么虚拟地址0被映射到RAM,中断发生时虚拟地址0处的中断向量与bootloader完全无关了。对于那些不带MMU 的CPU如S3C4510, AT91系列,bootloader必须使用memory remap的方法把RAM remap 到地址0。

asmlinkage void __init start_kernel(void)
|
|--- trap_init();
void __init trap_init(void)
{
extern void __trap_init(void *);
__trap_init((void *)vectors_base());
if (vectors_base() != 0)
printk(KERN_DEBUG "Relocating machine vectors to 0x%08x\n",
vectors_base());
#ifdef CONFIG_CPU_32
modify_domain(DOMAIN_USER, DOMAIN_CLIENT);
#endif
}
#ifdef __ARM_ARCH_4__
#define vectors_base() ((cr_alignment & CR_V) ? 0xffff0000 : 0)
#else
#define vectors_base() (0)
#endif
#define CR_V (1


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/66024/showart_2125258.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP