北风留影 发表于 2015-4-13 11:49:44

Xen源代码分析(三)——x86_32.s

X86_32.s文件,启动汇编程序的最后阶段,主要工作为装入堆栈指针, Xen会在栈顶分配一个cpu_info结构,这个结构包含很多重要的成员:1)客户系统的切换上下文2)当前运行的vcpu指针3)物理处理器编号.
1,IDT的处理,整个idt_table的向量入口都初始化ignore_int,这个中断处理函数打印"Unknown interrupt(cr2=XXXXXXXX)"信息后系统进入循环
2,如果是BSP,跳转到__start_xen否则,跳转到start_secondary



1 .code32
2         
3         /* Enable full CR4 features. */
4         mov   mmu_cr4_features,%eax
5         mov   %eax,%cr4
6         
7         /* Initialise stack. */
8         /*在栈顶分配一个cpu_info结构(参见下图),这个结构包含很多重要的成员:
9         1)客户系统的切换上下文2)当前运行的vcpu指针3)物理处理器编号*/
10         mov   stack_start,%esp
11         or      $(STACK_SIZE-CPUINFO_sizeof),%esp
12         
13         /* Reset EFLAGS (subsumes CLI and CLD). */
14         pushl   $0
15         popf
16
17         lidt    idt_descr/*加载中断描述符表*/
18
19         test    %ebx,%ebx
20         jnz   start_secondary
21
22         /* Initialise IDT with simple error defaults. */
23         lea   ignore_int,%edx
24         mov   $(__HYPERVISOR_CS physical mapping table. Ring 0 can access all memory.    */
99 #define GUEST_DESC(d)                                                   \
100         .long ((MACH2PHYS_VIRT_END - 1) >> 12) & 0xffff,                \
101               ((MACH2PHYS_VIRT_END - 1) >> 12) & (0xf
页: [1]
查看完整版本: Xen源代码分析(三)——x86_32.s