Xen源代码分析(一)——head.s

本文介绍了Xen在x86架构下的启动过程,从head.s开始,详细讲解了从GRUB引导到调用C函数`__start_xen`的初始化步骤,包括页表设置、命令行参数解析、多重启动信息验证等关键操作。通过阅读,读者可以理解Xen启动时的汇编到C的过渡以及如何准备系统环境。
摘要由CSDN通过智能技术生成

      启动汇编部分代码是xen 的引导启动程序,位于./xen/arch/x86/boot目录下。代码描述了从xen加载到调用第一个C函数“__start_xen”之间的初始化系统环境过程。主要涉及的文件流程为head.S->trampoline.S->x86_32.s,其中head.s为冲GRUB进入XEN的入口文件,首先看看head.s部分都做了什么(只看32位体系)。

/* 只能由 grub 来引导,head.S 是从GRUB进入XEN 的入口文件;

开始执行的第一个汇编文件,包括初始化页表,解析早期命令行参数等工作

*/

#include <xen/config.h>

#include <xen/multiboot.h>

#include <public/xen.h>

#include <asm/asm_defns.h>

#include <asm/desc.h>

#include <asm/page.h>

#include <asm/msr.h>

        .text

        .code32

/*xen运行时,cpu已经处于保护模式了,和LINUX内核的处理方式一致,虚拟地址等于物理地址加上固定值*/

/*xen\include\asm-x86\x86_32\page.h中有__XEN_VIRT_START的定义*/

#define sym_phys(sym)     ((sym) - __XEN_VIRT_START)

 

/**

*xen 编译时的映像布局由xen\arch\x86\xen.lds.S 控制:

         ...

#ifdef __x86_64__

#define FORMAT "elf64-x86-64"

#else

#define FORMAT "elf32-i386"

#endif

 

ENTRY(start)

 

#endif

 

OUTPUT_FORMAT(FORMAT, FORMAT, FORMAT)

 

#ifdef __x86_64__

OUTPUT_ARCH(i386:x86-64)

#else

OUTPUT_ARCH(i386)

#endif

 

PHDRS

{

  text PT_LOAD ;

}

SECTIONS

{

  . = __XEN_VIRT_START + 0x100000;

  _start = .;

  .text : {

        _stext = .;            //Text and read-only data

       *(.text)

       *(.text.cold)

       *(.text.unlikely)

       *(.fixup)

       *(.gnu.warning)

       _etext = .;             //End of text section

  } :text = 0x9090

                 ...

**/

 

/*根据INTEL手册GDT第一项无用,故而从0x08开始*/

/*ring0,code,32-bit mode*/

#define BOOT_CS32        0x0008

 

/*ring0,code,64-bit mode*/

#define BOOT_CS64        0x0010

 

/*ring0,data*/

#define BOOT_DS          0x0018

 

/*real-mode code*/

#define BOOT_PSEUDORM_CS 0x0020

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值