linux 开机过程分析

linux 开机过程分析

ID:16033706

大小:28.00 KB

页数:4页

时间:2018-08-07

linux 开机过程分析_第1页
linux 开机过程分析_第2页
linux 开机过程分析_第3页
linux 开机过程分析_第4页
资源描述:

《linux 开机过程分析》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、这篇文章的目的,在将linuxkernel的boot部份做一个介绍,因为笔者觉得很少有这样的文章介绍一个作业系统最最开始的一步--把kernel本身载入至内存中,同时进行一些机器相关(machinedependent)的初始化工作,由于linux刚好使用的是大家最熟悉的386,486系列PC,所以在说明其程序流程时,也刚好可以对其相关的PC硬体架构做探讨,可以说是一举两得,不过,我必须假设读者对于组合语言及PC最基础的架构,如寄存器,分段,分页,中断服务等有大概的认识。   读者可在linuxsourcecode的/boot子目录下找到几个以.S作为副档名的组合语言档,

2、本文要说明的即是其中的bootsect.S及setup.S两个档案,及尽量简单的说明其所牵涉的相关硬体部份。bootsect.S  这个程序是linuxkernel的第一个程序,包括了linux自己的bootstrap程序,但是在说明这个程序前,必须先说明一般IBMPC开机时的动作(此处的开机是指"打开PC的电源"):  一般PC在电源一开时,是由内存中地址FFFF:0000开始执行(这个地址一定在ROMBIOS中,ROMBIOS一般是在FEOOOh到FFFFFh中),而此处的内容则是一个jump指令,jump到另一个位于ROMBIOS中的位置,开始执行一系列的动作,包

3、括了检查RAM,keyboard,显示器,软硬磁盘等等,这些动作是由系统测试码(systemtestcode)来执行的,随着制作BIOS厂商的不同而会有些许差异,但都是大同小异,读者可自行观察自家机器开机时,萤幕上所显示的检查讯息。  紧接着系统测试码之后,控制权会转移给ROM中的启动程序(ROMbootstraproutine),这个程序会将磁盘上的零道零扇区读入内存中这篇文章的目的,在将linuxkernel的boot部份做一个介绍,因为笔者觉得很少有这样的文章介绍一个作业系统最最开始的一步--把kernel本身载入至内存中,同时进行一些机器相关(machinede

4、pendent)的初始化工作,由于linux刚好使用的是大家最熟悉的386,486系列PC,所以在说明其程序流程时,也刚好可以对其相关的PC硬体架构做探讨,可以说是一举两得,不过,我必须假设读者对于组合语言及PC最基础的架构,如寄存器,分段,分页,中断服务等有大概的认识。   读者可在linuxsourcecode的/boot子目录下找到几个以.S作为副档名的组合语言档,本文要说明的即是其中的bootsect.S及setup.S两个档案,及尽量简单的说明其所牵涉的相关硬体部份。bootsect.S  这个程序是linuxkernel的第一个程序,包括了linux自己的b

5、ootstrap程序,但是在说明这个程序前,必须先说明一般IBMPC开机时的动作(此处的开机是指"打开PC的电源"):  一般PC在电源一开时,是由内存中地址FFFF:0000开始执行(这个地址一定在ROMBIOS中,ROMBIOS一般是在FEOOOh到FFFFFh中),而此处的内容则是一个jump指令,jump到另一个位于ROMBIOS中的位置,开始执行一系列的动作,包括了检查RAM,keyboard,显示器,软硬磁盘等等,这些动作是由系统测试码(systemtestcode)来执行的,随着制作BIOS厂商的不同而会有些许差异,但都是大同小异,读者可自行观察自家机器开

6、机时,萤幕上所显示的检查讯息。  紧接着系统测试码之后,控制权会转移给ROM中的启动程序(ROMbootstraproutine),这个程序会将磁盘上的零道零扇区读入内存中(这就是一般所谓的bootsector,如果你曾接触过电脑病毒,就大概听过它的大名),至于被读到内存的哪里呢?--绝对位置07C0:0000(即07C00h处),这是IBM系列PC的特性。而位在linux开机磁盘的bootsector上的正是linux的bootsect程序,也就是说,bootsect是第一个被读入内存中并执行的程序。现在,我们可以开始来看看到底bootsect做了什么。第一步  首先

7、,bootsect将它"自己"从被ROMBIOS载入的绝对地址0x7C00处搬到0x90000处,然后利用一个jmpi(jumpindirectly)的指令,跳到新位置的jmpi的下一行去执行,关键的assemblycode如下:.(搬移bootsect本身)..jmpigo,INITSECgo:...  表示将跳到CS为0x9000,IP为offset"go"的位置(CS:IP=0x9000:offsetgo),其中INITSEC=0x9000定义于程序开头的部份,而go这个label则恰好是下一行指令所在的位置。第二步  接着,将其它

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。