免费注册 查看新帖 |

Chinaunix

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

[硬件及驱动] 多核处理器的启动问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-02-04 20:36 |只看该作者 |倒序浏览
关于Linux的多核启动问题,看到过这样的代码:
start_eip = setup_trampoline(); // 得到trampoline.S代码的入口地址

*((volatile unsigned short *) phys_to_virt(0x469)) = start_eip >> 4;
*((volatile unsigned short *) phys_to_virt(0x467)) = start_eip & 0xf;
// 将trampoline.S的入口地址写入热启动的中断向量(warm reset vector)40:67

apic_write_around(APIC_ICR2, SET_APIC_DEST_FIELD(apicid));// 确定发送对象
apic_write_around(APIC_ICR, APIC_INT_LEVELTRIG | APIC_DM_INIT);   // 发送INIT IPI
apic_write_around(APIC_ICR2, SET_APIC_DEST_FIELD(apicid));  //确定发送对象
apic_write_around(APIC_ICR, APIC_DM_STARTUP | (start_eip >> 12));  //发送STARTUP IPI

想问的是,将trampoline.S的入口地址写入0x467之后,AP是怎么跳到0x467去执行代码的?
我目前知道的是,通过IPI机制,那么在发送STARTUP IPI时,ICR寄存器的vertor阈为什么要设置成(start_eip >> 12)?这个不是应该是中断号吗?
(start_eip >> 12)是工作的?怎么能够跳到0x467呢?

请教,在线等啊~~~


论坛徽章:
0
2 [报告]
发表于 2013-02-05 10:52 |只看该作者
本帖最后由 dingyujie 于 2013-02-05 10:52 编辑

看看情景分析最后一章讲多处理器那块吧

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
3 [报告]
发表于 2013-02-05 12:39 |只看该作者
什么处理器?mips启动是用异常。第一条指令的地址放在异常向量中。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP