内核启动初步

        我一直好奇计算机是如何启动的,为什么每当按下电源键的时候就能够显示启动信息,然后等待输入密码进入桌面(我还是使用windows系统),从按下电源键到操作系统完成就绪到底完成了什么具体的操作了呢?于是,就开始从内核启动说起吧。

        一般情况下,启动是由于我们按下开机键或者复位键产生的操作,CPU会进入复位状态,它会将内存中的所有内容全部清0,然后检查内存是否有错误,如果没有就会初始化寄存器内容,对于0x86体系的CPU,CS:EIP寄存器的值是0xFFFFFFF0H,硬件会将这个地址映射到一个只读ROM存储器上,ROM上存放的指令集就是所谓的BIOS(基本输入输出系统),它包含一些低级的中断程序,一些操作系统使用这些程序处理计算机的硬件设备。BIOS主要完成对计算机硬件的检查工作,用来检查当前计算机上使用了什么设备并且各个设备是否正常,这个步骤成为POST(Power-On Self Test:上电自检),自建之后BIOS会对硬件设备进行监测和连接,并保存测试所得的数据到内存中,以供之后内核使用。最后,BIOS会找到一个有效地存储设备,并且将这个设备的第一个扇区的内容拷贝到RAM中,如果是从硬盘中启动的,一般情况下,硬盘的第一个扇区(512字节)称为主引导扇区(Master Boot Record , MBR),该扇区包含分区表(每一项包括一个分区的开始扇区和结束扇区以及对此进行处理的操作系统类型)和一个小程序,该程序用来装载启动的操作系统所在分区的第一个扇区。当BIOS将第一个扇区的内容读入到内核之后,BIOS程序的任务就完成了,但是它保存了中断向量表,内核可能会使用这些信息。BIOS会将硬盘的第一个扇区读取到内存的0x7C00H处,然后跳转到这个位置执行。

                                     POST程序包含的14个项目

序号

相应内容

序号

相应内容

1

CPU处理器内部寄存器测试

8

键盘复位和测试

2

32K RAM存储器测试

9

键盘复位和测试

3

 DMA控制器测试

10

附加RAM存储器测试

4

32K RAM存储器测试

11

其他包含在系统中的BIOS测试

5

CRT视频接口测试

12

软盘设备测试

6

8259中断控制器测试

13

 硬盘设备测试

7

8253定时器测试

14

打印机接口和串行接口测试


        对于从硬盘上引导内核的过程,一般需要两阶段的引导,在X86机器上,Linux经常使用的引导装入程序是所谓的LILO(LInux LOader),LILO或许被装在MBR上代替那个小的引导程序,或者被装在OS所在的磁盘分区的引导扇区上,无论是哪一种情况,在启动的过程中装入程序被执行时,用户都可以选择装入的操作系统。但是LILO一般由于太大而无法装入MBR中,所以LILO一般分成两个部分,第一部分包括一个小的引导程序,BIOS会将这段程序装入地址0x00007C00处,这段程序将自己移动到0x00009A00处,然后建立实模式栈,并把LILO的第二部分装入地址0x00009B00处,第二部分会一次从磁盘读取可用的操作系统列表,根据用户的选择将相应分区的引导扇区装入RAM中并执行。此后在使用BIOS完成一些初始化工作。

        LILO还会执行装入内核映像的工作,它会将内核映像装载到0x00010000处(对于低装载)或者0x00100000处(对于高装载),所以在跳转到header.S_start的时候,内存里面的代码布局为:

0x90000: header.S512字节内容

0x90200: header.S _start 及其后
低装载:0x10000:带解压的vmlinux
高装载:0x100000:带解压的vmlinux

于是,内核就开始从header.S开始执行。。。

以上的步骤还是有些疑惑,需要再查看一些关于LILO引导的资料。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值