Linux操作系统下关于引导和初始化的问题

http://tech.ddvip.com   2007年07月10日    社区交流

内容摘要:Linux操作系统下关于引导和初始化的问题

  (5)检测一个MCA;

  (5)检测一个PS/2定点设备(鼠标总线);

  (6)检测高级电源管理器(APM)BIOS支持;

  (7)检测内核在内存中的位置,如果在低地址0x00010000,就将其移到高地址0x00001000,如在高地

  址则不做任何移动;

  (8)设置设备中断描述表(IDT)和全局描述表(GDT);

  (9)如已经有了浮点单位(FPU),则重置之;

  (10)重新调用程序中断控制器;

  (11)通过设置cr0状态寄存器的PE位,把CPU从"实模式"切换到"保护模式";

  (12)跳转到stratup_32( )汇编语言函数.

  因为在内核中不能做BIOS调用,内存信息由setup通过INT 0X15 来加以查询,并根据获得的信息生

  成一张物理内存构成图,称为e820图,再通过参数块传给内核,使内核知道系统中内存资源的配置.因为

  在做int 0x15来查询内存构成是要把调用参数之一设置成0xe820,所以叫e820图.

  l 第一个stratup_32( )函数

  在启动过程中要用到两个stratup_32( )函数,虽然它们都是汇编语言函数,但是却是两个完全不同

  的函数.我们这里所说的函数包含在/usr/src/linux-2.4.2/arch/i386/boot/compressed/head.S文件里.

  Setup()文件执行后,这个函数就被加载到物理地址为0x00100000或者物理地址为0x00001000的内存中(取

  决于内核是载入高或者低内存).

  当执行这个函数时,会执行以下的操作:

  (1)初始化段寄存器和一个临时栈.

  (2)内核中没有初始化的数据都用0填充.它是通过symbols _edata和 _end来识别的.

  (3)执行decompress_kernel( )函数.这个函数用于对Linux内核解压缩.这个时候,屏幕上将显示

  "Uncompressing Linux……"信息.解压缩完成后,就会显示"OK, booting the kernel"信息.现在有

责编:豆豆技术应用

正在加载评论...