欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    第2章 Linux操作系统的启动.ppt

    • 资源ID:87456842       资源大小:394KB        全文页数:51页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第2章 Linux操作系统的启动.ppt

    第2章Linux系统的启动n n本章从系统的初始化过程介绍对Linux内核源码的分析的一种方法。系统的初始化流程包括:系统引导,实模式下的初始化,保护模式下的初始化共三个部分。和系统的引导过程相关的概念还有单用户模式、运行级别等。对这些概念的正确理解是配置和维护系统的必要条件。2.1操作系统的启动一般来说,操作系统的引导过程分两个步骤。一般来说,操作系统的引导过程分两个步骤。首先,计算机硬件经过开机自检(首先,计算机硬件经过开机自检(PowerOnPowerOnSelf-TestSelf-Test,POSTPOST)之后,从软盘或硬盘的固定之后,从软盘或硬盘的固定位置装载一小段代码,这段代码一般称为位置装载一小段代码,这段代码一般称为“引导引导装载器装载器”。然后,由引导装载器负责装入并运行。然后,由引导装载器负责装入并运行操作系统。引导装载器非常小,一般只有几百个操作系统。引导装载器非常小,一般只有几百个字节,而操作系统庞大而复杂。上述分成两阶段字节,而操作系统庞大而复杂。上述分成两阶段的引导过程,可将计算机中的固化软件保持得足的引导过程,可将计算机中的固化软件保持得足够小,同时也便于实现对不同操作系统的引导。够小,同时也便于实现对不同操作系统的引导。2.1.1 系统引导过程简介系统启动过程主要由以下几个步骤组成系统启动过程主要由以下几个步骤组成(以硬盘启动为例以硬盘启动为例):(1)(1)开机开机(2)(2)BIOSBIOS加电自检加电自检(PowerOnSelfTestPowerOnSelfTest,POST)POST),内内存地址为存地址为 0 0ffff:0000ffff:0000(3)(3)将硬盘第一个扇区将硬盘第一个扇区(0(0头头0 0道道1 1扇区,扇区,也就是也就是BootBootSector)Sector)读入内存地址读入内存地址 0000:70000:7c00c00处。处。(4)(4)检查检查(WORD)0000:7dfeWORD)0000:7dfe是否等于是否等于 0 0 xaa55xaa55,若不等若不等于则转去尝试其他启动介质,于则转去尝试其他启动介质,如果没有其他启动介质则如果没有其他启动介质则显示显示 NoROMBASICNoROMBASIC然后死机。然后死机。(5)(5)跳转到跳转到 0000:70000:7c00c00处执行处执行 MBRMBR中的程序。中的程序。(6)(6)MBRMBR首先将自己复制到首先将自己复制到 0000:06000000:0600处,处,然后继续执然后继续执行。行。(7)(7)在主分区表中搜索标志为活动的分区。在主分区表中搜索标志为活动的分区。如果发现没有活如果发现没有活动分区或有不止一个活动分区,动分区或有不止一个活动分区,则停止。则停止。(8)(8)将活动分区的第一个扇区读入内存地址将活动分区的第一个扇区读入内存地址0000:70000:7c00c00处。处。(9)(9)检查检查(WORD)0000:7dfeWORD)0000:7dfe是否等于是否等于 0 0 xaa55xaa55,若不等于若不等于则显示则显示 MissingOperatingSystemMissingOperatingSystem然后停止,然后停止,或尝或尝试软盘启动。试软盘启动。(10)(10)跳转到跳转到0000:70000:7c00c00处继续执行特定系统的启动程序。处继续执行特定系统的启动程序。(11)(11)启动系统。启动系统。以上步骤中以上步骤中 2 2,3 3,4 4,55步是由步是由 BIOSBIOS的引导程序完的引导程序完成。成。6 6,7 7,8 8,9 9,1010步由步由MBRMBR中的引导程序完成。一中的引导程序完成。一般多系统引导程序般多系统引导程序(如如 SmartBootManagerSmartBootManager、BootStarBootStar、PQBootPQBoot 等等)都是将标准主引导记录替换成自都是将标准主引导记录替换成自己的引导程序,己的引导程序,在运行系统启动程序之前让用户选择要在运行系统启动程序之前让用户选择要启动的分区。而某些系统自带的多系统引导程序启动的分区。而某些系统自带的多系统引导程序(如如LILOLILO,NTLoaderNTLoader等等)则可以将自己的引导程序放在系统所处则可以将自己的引导程序放在系统所处分区的第一个扇区中,在分区的第一个扇区中,在 LinuxLinux中即为是两个扇区的中即为是两个扇区的SuperBlockSuperBlock。n n注:以上各步骤中使用的是标准注:以上各步骤中使用的是标准 MBRMBR,其他多系统引导其他多系统引导程序的引导过程与此不同。程序的引导过程与此不同。2.1.2 硬盘结构1.1.硬盘参数硬盘参数当硬盘的容量还非常小的时候,当硬盘的容量还非常小的时候,人们采用与软盘类人们采用与软盘类似的结构生产硬盘。硬盘盘片的每一条磁道都具有相同的似的结构生产硬盘。硬盘盘片的每一条磁道都具有相同的扇区数。扇区数。由此产生了所谓的由此产生了所谓的3 3DD参数参数(DiskGeometry)DiskGeometry)以及相应的寻址方式。到目前为止,通常还是沿用这种以及相应的寻址方式。到目前为止,通常还是沿用这种 CHS(Cylinder/Head/Sector)CHS(Cylinder/Head/Sector)来表示硬盘参数。其中:来表示硬盘参数。其中:磁头数磁头数(Heads)Heads)表示硬盘总共有几个磁头,也就是有几面表示硬盘总共有几个磁头,也就是有几面盘片,盘片,最大为最大为 256(256(用用 88个二进制位存储个二进制位存储);柱面数;柱面数(Cylinders)Cylinders)表示硬盘每一面盘片上有几条磁道,表示硬盘每一面盘片上有几条磁道,最大为最大为 1024(1024(用用 1010个二进制位存储个二进制位存储);扇区数;扇区数(SectorsperSectorspertrack)track)表示每一条磁道上有几个扇区,表示每一条磁道上有几个扇区,最大为最大为63(63(用用 66个二进制位存储个二进制位存储)。每个扇区一般是。每个扇区一般是 512512个字节。个字节。2.2.基本基本 INT13HINT13H调用简介调用简介BIOSBIOSintint13H13H调用是调用是 BIOSBIOS提供的磁盘基本输入提供的磁盘基本输入输出中断调用,输出中断调用,它可以完成磁盘它可以完成磁盘(包括硬盘和软盘包括硬盘和软盘)的复的复位、读写、校验、定位、诊断和格式化等功能。位、读写、校验、定位、诊断和格式化等功能。它使用的是它使用的是 CHSCHS寻址方式,寻址方式,因此最大只能访问因此最大只能访问 88GBGB左右的硬盘左右的硬盘(本文中如不作特殊说明,本文中如不作特殊说明,均以均以 1 1M=M=10485761048576字节为单位字节为单位)。3.3.现代硬盘结构简介现代硬盘结构简介在老式硬盘中,在老式硬盘中,由于每个磁道的扇区数相等,由于每个磁道的扇区数相等,所以所以外道的记录密度要远低于内道,外道的记录密度要远低于内道,因此会浪费很多磁盘空因此会浪费很多磁盘空间。为了进一步提高硬盘容量,人们改用等密度结构生产间。为了进一步提高硬盘容量,人们改用等密度结构生产硬盘。硬盘。也就是说,也就是说,外圈磁道的扇区比内圈磁道多。外圈磁道的扇区比内圈磁道多。采用采用这种结构后,这种结构后,硬盘不再具有实际的硬盘不再具有实际的3 3DD参数,参数,寻址方式也寻址方式也改为线性寻址,改为线性寻址,即以扇区为单位进行寻址。为了与使用即以扇区为单位进行寻址。为了与使用3 3DD寻址的老软件兼容寻址的老软件兼容(如使用如使用BIOSINT13HBIOSINT13H接口的软件接口的软件),在硬盘控制器内部安装了一个地址翻译器,在硬盘控制器内部安装了一个地址翻译器,由它负责由它负责将老式将老式3 3DD参数翻译成新的线性参数。不同的工作模式参数翻译成新的线性参数。不同的工作模式(如(如LBALBA、LARGELARGE、NORMALNORMAL)对应不同的对应不同的3 3DD参数。参数。4.4.扩展扩展 INT13HINT13H虽然现代硬盘都已经采用了线性寻址,但是由于基虽然现代硬盘都已经采用了线性寻址,但是由于基本本INT13HINT13H的制约,使用的制约,使用 BIOSBIOS的的INT13HINT13H接口的程序接口的程序(如(如 DOSDOS等)还只能访问等)还只能访问8 8GG以内的硬盘空间。为了打以内的硬盘空间。为了打破这一限制,破这一限制,MicrosoftMicrosoft等几家公司制定了扩展等几家公司制定了扩展 INTINT13H13H标准标准(ExtendedINT13H)ExtendedINT13H),采用线性寻址方式存取采用线性寻址方式存取硬盘,突破了硬盘,突破了88GG的限制,并还加入了对可拆卸介质的限制,并还加入了对可拆卸介质(如如活动硬盘活动硬盘)的支持。的支持。2.1.3 引导扇区1.1.BootSectorBootSector的组成的组成BootSectorBootSector也就是硬盘的第一个扇区,也就是硬盘的第一个扇区,它由它由 MBRMBR(MasterBootRecord)(MasterBootRecord),DPT(DiskPartitionTable)DPT(DiskPartitionTable)和和 BootRecordIDBootRecordID三部分组成。三部分组成。MBRMBR又称作主引导记录,又称作主引导记录,占用占用 BootSectorBootSector的前的前 446446个字节个字节(0(0to0 x1BD)to0 x1BD),存放系统主引导程序存放系统主引导程序(它负责从活动分区中装载并运行系它负责从活动分区中装载并运行系统引导程序统引导程序)。DPTDPT即主分区表占用即主分区表占用 6464个字节个字节(0(0 x1BEx1BEto0 x1FD)to0 x1FD),记录了磁盘的基本分区信息。记录了磁盘的基本分区信息。主分区表分主分区表分为四个分区项,为四个分区项,每项每项 1616字节,字节,分别记录了每个主分区分别记录了每个主分区的信息的信息(因此最多可以有四个主分区因此最多可以有四个主分区)。BootRecordIDBootRecordID即引导区标记占用两个字节即引导区标记占用两个字节(0(0 x1FEand0 x1FF)x1FEand0 x1FF),对于对于合法引导区,合法引导区,它等于它等于 0 0 xAA55xAA55,这是判别引导区是否合这是判别引导区是否合法的标志。法的标志。BootSector的具体结构如下图所示:2.2.分区表结构简介分区表结构简介分区表由四个分区项构成,分区表由四个分区项构成,每一项的结构如下:每一项的结构如下:n nBYTEState:BYTEState:分区状态,分区状态,0=0=未激活,未激活,0 0 x80=x80=激活激活(注意此项注意此项)n nBYTEBYTEStartHeadStartHead:分区起始磁头号分区起始磁头号n nWORDWORDStartSCStartSC:分区起始扇区和柱面号,分区起始扇区和柱面号,底字节的低底字节的低6 6位为扇区号,高位为扇区号,高2 2位为柱面号的第位为柱面号的第 9 9,1010位,位,高字节为高字节为柱面号的低柱面号的低 88位位n nBYTEType:BYTEType:分区类型,分区类型,如如 0 0 x0B=FAT32x0B=FAT32,0 x83=0 x83=LinuxLinux等,等,0000表示此项未用表示此项未用n nBYTEBYTEEndHeadEndHead:分区结束磁头号分区结束磁头号n nWORDWORDEndSCEndSC:分区结束扇区和柱面号,分区结束扇区和柱面号,定义同前定义同前n nDWORDRelative:DWORDRelative:在线性寻址方式下的分区相对扇区在线性寻址方式下的分区相对扇区地址地址(对于基本分区即为绝对地址对于基本分区即为绝对地址)n nDWORDSectors:DWORDSectors:分区大小分区大小(总扇区数总扇区数)在在 DOS/WindowsDOS/Windows系统下,系统下,基本分区必须以柱面基本分区必须以柱面为单位划分为单位划分(Sectors*HeadsSectors*Heads个扇区个扇区),如对于如对于 CHSCHS为为 764/256/63764/256/63的硬盘,的硬盘,分区的最小尺寸为分区的最小尺寸为 256*256*63*512/1048576=7.87563*512/1048576=7.875MBMB。由于硬盘的第一个扇区已经被引导扇区占用,由于硬盘的第一个扇区已经被引导扇区占用,所以所以一般来说,一般来说,硬盘第一个磁道硬盘第一个磁道(0(0头头0 0道道)的其余的其余 6262个扇区个扇区是不会被分区占用的。是不会被分区占用的。某些分区软件甚至将第一个柱面某些分区软件甚至将第一个柱面全部空出来。全部空出来。3.3.扩展分区扩展分区由于主分区表中只能分四个分区,由于主分区表中只能分四个分区,无法满足需求,无法满足需求,因此设计了一种扩展分区格式。因此设计了一种扩展分区格式。基本上说,基本上说,扩展分区的扩展分区的信息是以链表形式存放的,信息是以链表形式存放的,但也有一些特别的地方。但也有一些特别的地方。首先,首先,主分区表中要主分区表中要有一个基本扩展分区项,有一个基本扩展分区项,所有扩展分区都隶属于它,所有扩展分区都隶属于它,也就是说其他所有扩展分也就是说其他所有扩展分区的空间都必须包括在这区的空间都必须包括在这个基本扩展分区中。个基本扩展分区中。对于对于DOS/WindowsDOS/Windows来说,来说,扩展分区的类型为扩展分区的类型为 0 0 x05x05或或 0 0 x0F(LBAx0F(LBA模式模式)。除基本扩展分区以外的除基本扩展分区以外的其他所有扩展分区则以链其他所有扩展分区则以链表的形式级联存放,表的形式级联存放,后一后一个扩展分区的数据项记录个扩展分区的数据项记录在前一个扩展分区的分区在前一个扩展分区的分区表中,表中,但两个扩展分区的但两个扩展分区的空间并不重叠。空间并不重叠。扩展分区类似于一个完整的硬盘,扩展分区类似于一个完整的硬盘,必须进一步分区必须进一步分区才能使用。才能使用。但每个扩展分区中只能存在一个其他分区。但每个扩展分区中只能存在一个其他分区。此分区在此分区在 DOS/WindowsDOS/Windows环境中即为逻辑盘。因此每一环境中即为逻辑盘。因此每一个扩展分区的分区表个扩展分区的分区表(同样存储在扩展分区的第一个扇区同样存储在扩展分区的第一个扇区中中)中最多只能有两个分区数据项中最多只能有两个分区数据项(包括下一个扩展分区的包括下一个扩展分区的数据项数据项)。以上所有扩展分区表中的第二个分区项以上所有扩展分区表中的第二个分区项(指向下一个指向下一个扩展分区扩展分区)的相对扇区地址均相对于主扩展分区,的相对扇区地址均相对于主扩展分区,而不是而不是前一个扩展分区。前一个扩展分区。2.2 Linux 的引导过程 不同计算机平台引导过程的区别主要在于第一阶段的不同计算机平台引导过程的区别主要在于第一阶段的引导过程。对引导过程。对 PCPC机上的机上的 LinuxLinux系统而言,计算机(即系统而言,计算机(即 BIOSBIOS)负责从软盘或硬盘的第一个扇区(即引导扇区)负责从软盘或硬盘的第一个扇区(即引导扇区)中读取引导装载器,然后,由引导装载器从磁盘或其他位中读取引导装载器,然后,由引导装载器从磁盘或其他位置装入操作系统。从软盘引导时,置装入操作系统。从软盘引导时,BIOSBIOS读取并运行引导读取并运行引导扇区中的代码。引导扇区中的代码读取软盘前几百个块扇区中的代码。引导扇区中的代码读取软盘前几百个块(依赖于实际的内核大小),然后将这些代码放置在预先(依赖于实际的内核大小),然后将这些代码放置在预先定义好的内存位置。利用软盘引导定义好的内存位置。利用软盘引导 LinuxLinux时,没有文件时,没有文件系统,内核处于连续的扇区中,这样安排可简化引导过程。系统,内核处于连续的扇区中,这样安排可简化引导过程。但是,如果利用但是,如果利用LILOLILO(LInuxLInux LOaderLOader)也可从包含文件也可从包含文件系统的软盘上引导系统的软盘上引导 LinuxLinux。从硬盘引导时,由于硬盘是可分区的,因此引导过程从硬盘引导时,由于硬盘是可分区的,因此引导过程比软盘复杂一些。比软盘复杂一些。BIOSBIOS首先读取并运行硬盘主引导记录首先读取并运行硬盘主引导记录中的代码,这些代码首先检验主引导记录中的分区表,寻中的代码,这些代码首先检验主引导记录中的分区表,寻找到活动分区(即标志为可引导分区的分区),然后读取找到活动分区(即标志为可引导分区的分区),然后读取并运行活动分区之引导扇区中的代码。活动分区引导扇区并运行活动分区之引导扇区中的代码。活动分区引导扇区的作用和软盘引导扇区的作用一样:从分区中读取内核映的作用和软盘引导扇区的作用一样:从分区中读取内核映象并启动内核。和软盘引导不同的是,内核映象保存在硬象并启动内核。和软盘引导不同的是,内核映象保存在硬盘分区文件系统中,而不象软盘那样保存在后续的连续扇盘分区文件系统中,而不象软盘那样保存在后续的连续扇区中,因此,硬盘引导扇区中的代码还需要定位内核映象区中,因此,硬盘引导扇区中的代码还需要定位内核映象在文件系统中的位置,然后装载内核并启动内核。在文件系统中的位置,然后装载内核并启动内核。LinuxLinux系统的常见引导方式有两种:系统的常见引导方式有两种:LILOLILO引导和引导和LoadinLoadin引导;其中引导;其中LILOLILO可实现多重引导,可实现多重引导,LoadinLoadin可在可在DOSDOS下引导下引导LinuxLinux。此外,此外,LinuxLinux内核也自带了一个内核也自带了一个bootsectbootsect-loader-loader。由于由于bootsectbootsect-loader-loader只能实现只能实现LinuxLinux的引导,不像前两个那样具有很大的灵活性,所以的引导,不像前两个那样具有很大的灵活性,所以在普通应用场合实际上很少使用。但由于在普通应用场合实际上很少使用。但由于bootsectbootsect-loaderloader短小、没有多余的代码、并且是内核源码的有机组短小、没有多余的代码、并且是内核源码的有机组成部分。下面将主要对成部分。下面将主要对bootsectbootsect-loader-loader文件进行分析。文件进行分析。bootsectbootsect-loader-loader在内和源码中对应的程序是在内和源码中对应的程序是/arch/i386/boot/bootsect.sarch/i386/boot/bootsect.s。几个相关文件是:几个相关文件是:n n(1 1)/arch/i386/boot/bootsect.sarch/i386/boot/bootsect.sn n(2 2)/include/include/linux/config.hlinux/config.hn n(3 3)/include/include/asm/boot.hasm/boot.hn n(4 4)/include/include/linux/autoconf.hlinux/autoconf.h2.2.1 Linux系统引导过程分析 开启开启Intelx86PCIntelx86PC的电源后,机器就会开始执行的电源后,机器就会开始执行ROMBIOSROMBIOS的一系列系统测试动作,包括检查的一系列系统测试动作,包括检查RAMRAM、键键盘、显示器和软硬磁盘等。接着控制权转移给盘、显示器和软硬磁盘等。接着控制权转移给ROMROM中的中的启动程序启动程序(ROMbootstraproutine)ROMbootstraproutine);该程序会将磁盘上该程序会将磁盘上的第的第0 0轨第轨第0 0扇区(称为扇区(称为bootsectorbootsector或或MasterBootMasterBootRecord,MBRRecord,MBR,系统的引导程序就放在此处)读入内存,系统的引导程序就放在此处)读入内存,放入自放入自0 0 x07C0:0 x0000 x07C0:0 x0000开始的开始的512512个字节处;然后处理个字节处;然后处理机跳转到该处开始执行(位于该处的)机跳转到该处开始执行(位于该处的)MBRMBR引导程序,引导程序,CS:IP=0 x07C0:0 x0000CS:IP=0 x07C0:0 x0000。加电后处理机运行在与加电后处理机运行在与80868086相兼容的实模式下。相兼容的实模式下。如果要用如果要用bootsectbootsect-loader-loader进行系统引导,则必须把进行系统引导,则必须把bootsect.sbootsect.s编译连接后对应的二进制代码置于编译连接后对应的二进制代码置于MBRMBR;当当ROMBIOSROMBIOS把把bootsect.sbootsect.s编译连接后对应的二进制代码编译连接后对应的二进制代码装入内存后,机器的控制权就完全转交给装入内存后,机器的控制权就完全转交给bootsectbootsect;也就也就是说,是说,bootsectbootsect将是第一个被读入内存中并执行的程序。将是第一个被读入内存中并执行的程序。BootsectBootsect接管机器控制权后,将依次进行以下一些动作:接管机器控制权后,将依次进行以下一些动作:(1 1)首先,首先,bootsectbootsect将它将它“自己自己”(自位置自位置0 0 x07C0:0 x0000 x07C0:0 x0000开始的开始的512512个字节个字节)从被从被ROMBIOSROMBIOS载载入的地址入的地址0 0 x07C0:0 x0000 x07C0:0 x0000处搬到处搬到0 0 x9000:0000 x9000:0000处处;这这一任务由一任务由bootsect.sbootsect.s的前十条指令完成;第十一条指令的前十条指令完成;第十一条指令“jmpijmpigogo,INITSEG”INITSEG”则把机器跳转到则把机器跳转到“新新”的的bootsectbootsect的的“jmpijmpigogo,INITSEG”INITSEG”后的那条指令后的那条指令“go:go:movmov didi,#0 x4000-12”#0 x4000-12”;之后,继续执行之后,继续执行bootsectbootsect的剩的剩下的代码;在下的代码;在bootsect.sbootsect.s中定义了几个常量:中定义了几个常量:BOOTSEG=0 x07C0biosBOOTSEG=0 x07C0bios载入载入 MBRMBR的约定位置的段址;的约定位置的段址;INITSEG=0 x9000INITSEG=0 x9000bootsect.sbootsect.s的前十条指令将自己搬到的前十条指令将自己搬到此处此处(段址段址)SETUPSEG=0 x9020SETUPSEG=0 x9020装入装入Setup.sSetup.s的段址的段址 SYSSEG=0 x1000SYSSEG=0 x1000系统区段址系统区段址 这些常量的定义可参见这些常量的定义可参见/include/include/asm/boot.hasm/boot.h;在下在下面的分析中这些常量会经常用到。面的分析中这些常量会经常用到。(2 2)以以0 0 x9000:0 x4000-12x9000:0 x4000-12为栈底,建立自己的栈区;为栈底,建立自己的栈区;其中其中0 0 x9000:0 x4000-12x9000:0 x4000-12到到0 0 x9000:0 x4000 x9000:0 x4000的一十二的一十二个字节预留作磁盘参数表区;个字节预留作磁盘参数表区;(3 3)在在0 0 x9000:0 x4000-12x9000:0 x4000-12到到0 0 x9000:0 x4000 x9000:0 x4000的一十的一十二个预留字节中建立新的磁盘参数表。由于设计者考虑到二个预留字节中建立新的磁盘参数表。由于设计者考虑到有些老的有些老的biosbios不能准确地识别磁盘每个磁道的扇区数,使不能准确地识别磁盘每个磁道的扇区数,使得得biosbios建立的磁盘参数表妨碍磁盘的最高性能发挥,所以建立的磁盘参数表妨碍磁盘的最高性能发挥,所以设计者在设计者在biosbios建立的磁盘参数表的基础上使用枚举法测试,建立的磁盘参数表的基础上使用枚举法测试,试图建立准确的试图建立准确的“新新”的磁盘参数表的磁盘参数表(这是在后继步骤中这是在后继步骤中完成的完成的);并把参数表的位置由原来的;并把参数表的位置由原来的0 0 x0000:0 x0078x0000:0 x0078搬到搬到0 0 x9000:0 x4000-12x9000:0 x4000-12;且修改老的磁盘参数表区使且修改老的磁盘参数表区使之指向新的磁盘参数表;之指向新的磁盘参数表;(4 4)接下来是)接下来是load_setupload_setup子过程;它调用子过程;它调用0 0 x13x13中断的第中断的第2 2号服务;把第号服务;把第0 0道第道第2 2扇区开始的连续的扇区开始的连续的setup_sectssetup_sects(为为常量常量4)4)个扇区读到紧邻个扇区读到紧邻bootsectbootsect的内存区;,即的内存区;,即0 0 x9000:0 x0200 x9000:0 x0200开始的开始的20482048个字节;而这四个扇区的个字节;而这四个扇区的内容就是内容就是/arch/i386/boot/setup.sarch/i386/boot/setup.s编译连接后对应的二编译连接后对应的二进制代码。换句话说,如果要用进制代码。换句话说,如果要用bootsectbootsect-loader-loader进行系进行系统引导,不仅必须把统引导,不仅必须把bootsect.sbootsect.s编译连接后对应的二进制编译连接后对应的二进制代码置于代码置于MBRMBR,而且还要将而且还要将 把把setup.ssetup.s编译连接后对应编译连接后对应的二进制代码置于紧跟的二进制代码置于紧跟MBRMBR后的连续的四个扇区中。由于后的连续的四个扇区中。由于setup.ssetup.s对应的可执行码是由对应的可执行码是由bootsectbootsect装载的,所以可以装载的,所以可以根据需要修改根据需要修改bootsectbootsect来设置来设置setup.ssetup.s对应的可执行码;对应的可执行码;(5 5)load_setupload_setup子过程的惟一出口是子过程的惟一出口是probe_loopprobe_loop子过程;子过程;该过程通过枚举法测试磁盘该过程通过枚举法测试磁盘“每个磁道的扇区数每个磁道的扇区数”;(6 6)接下来几个子过程比较清晰:接下来几个子过程比较清晰:显示显示“Loading”Loading”;读入系统到读入系统到0 0 x1000:0 x0000;x1000:0 x0000;关掉软驱马达;关掉软驱马达;根据的根据的5 5步测出的步测出的“每个磁道的扇每个磁道的扇区数区数”确定磁盘类型;最后跳转到确定磁盘类型;最后跳转到0 0 x9000:0 x0200 x9000:0 x0200,即即setup.ssetup.s对对应的可执行码的入口,将机器控制应的可执行码的入口,将机器控制权转交权转交setup.ssetup.s;整个整个bootsectbootsect代代码运行完毕。引导过程执行完后的码运行完毕。引导过程执行完后的内存映像图如图内存映像图如图2.32.3所示。完成了所示。完成了系统的引导后,系统将进入到初始系统的引导后,系统将进入到初始化处理阶段。系统的初始化分为实化处理阶段。系统的初始化分为实模式和保护模式两部分。模式和保护模式两部分。为了简单起见,在上面的分析为了简单起见,在上面的分析中,忽略了对大内核的处理的分析。中,忽略了对大内核的处理的分析。因为对大内核的处理,只是此引导因为对大内核的处理,只是此引导过程中的一个很小的部分,并不影过程中的一个很小的部分,并不影响对整体的把握。响对整体的把握。2.2.2 实模式下的初始化 实模式下的初始化,主要是指从内核引导成功后,到实模式下的初始化,主要是指从内核引导成功后,到进入保护模式之前系统所做的一些处理。在内核源码中对进入保护模式之前系统所做的一些处理。在内核源码中对应的程序是应的程序是/arch/i386/boot/setup.sarch/i386/boot/setup.s;以下部分主要对以下部分主要对该文件进行分析。这部分的分析要弄懂它的处理流程和该文件进行分析。这部分的分析要弄懂它的处理流程和INITSEG(9000:0000)INITSEG(9000:0000)段参数表的建立的过程。该参数段参数表的建立的过程。该参数表包含了很多硬件参数,这些都是以后进行保护模式下初表包含了很多硬件参数,这些都是以后进行保护模式下初始化以及核心建立的基础。相关文件有:始化以及核心建立的基础。相关文件有:/arch/i386/boot/bootsect.sarch/i386/boot/bootsect.s/include/include/linux/config.hlinux/config.h/include/include/asm/boot.hasm/boot.h/include/include/asm/segment.hasm/segment.h/include/include/linux/version.hlinux/version.h/include/include/linux/compile.hlinux/compile.hsetup.s完成在实模式下版本检查,并将硬盘、鼠标及内存的参数写入到INITSEG中,并负责进入保护模式。实模式下的初始化过程如图2.4及图2.5所示:图图2.42.4实模式下的初始化实模式下的初始化过程过程1 1图图2.52.5实模式下的初始化实模式下的初始化过程过程2 2表 2.1 INITSEG(9000:0000)段参数表:(参见include/linux/tty.h)参数名 偏移量(段址均为0 x9000)长度Byte 参考文件 PARAM_CURSOR_POS 0 x0000 2 arch/i386/boot/video.s extended mem Size 0 x0002 2 arch/i386/boot/setup.s PARAM_VIDEO_PAGE 0 x0004 2 arch/i386/boot/video.s PARAM_VIDEO_MODE 0 x0006 1 arch/i386/boot/video.s PARAM_VIDEO_COLS 0 x0007 1 arch/i386/boot/video.s 未用 0 x0008 2 include/linux/tty.h PARAM_VIDEO_EGA_BX 0 x000a 2 arch/i386/boot/video.s 未用 0 x000c 2 include/linux/tty.h PARAM_VIDEO_LINES 0 x000e 1 arch/i386/boot/video.s PARAM_HAVE_VGA 0 x000f 1 arch/i386/boot/video.s PARAM_FONT_POINTS 0 x0010 2 arch/i386/boot/video.s PARAM_LFB_WIDTH 0 x0012 2 arch/i386/boot/video.s PARAM_LFB_HEIGHT 0 x0014 2 arch/i386/boot/video.s PARAM_LFB_DEPTH 0 x0016 2 arch/i386/boot/video.s PARAM_LFB_BASE 0 x0018 4 arch/i386/boot/video.s PARAM_LFB_SIZE 0 x001c 4 arch/i386/boot/video.s 暂未用 0 x0020 4 include/linux/tty.h PARAM_LFB_LINELENGTH 0 x0024 2 arch/i386/boot/video.s PARAM_LFB_COLORS 0 x0026 6 arch/i386/boot/video.s 暂未用 0 x002c 2 arch/i386/boot/video.s PARAM_VESAPM_SEG 0 x002e 2 arch/i386/boot/video.s PARAM_VESAPM_OFF 0 x0030 2 arch/i386/boot/video.s PARAM_LFB_PAGES 0 x0032 2 arch/i386/boot/video.s 保留 0 x0034-0 x003f include/linux/tty.h APM BIOS Version 0 x0040 2 arch/i386/boot/setup.s BIOS code segment 0 x0042 2 arch/i386/boot/setup.s BIOS entry offset 0 x0044 4 arch/i386/boot/setup.s BIOS 16 bit code seg 0 x0048 2 arch/i386/boot/setup.s BIOS data segment 0 x004a 2 arch/i386/boot/setup.s 支持32位标志 0 x004c 2 arch/i386/boot/setup.s BIOS code seg length 0 x004e 4 arch/i386/boot/setup.s BIOS data seg length 0 x0052 2 arch/i386/boot/setup.s hd0 参数 0 x0080 16 arch/i386/boot/setup.s hd0 参数 0 x0090 16 arch/i386/boot/setup.s PS/2 device 标志 0 x01ff 1 arch/i386/boot/setup.s 注:注:include/include/linux/tty.hlinux/tty.h:CL_MAGICandCL_OFFSETCL_MAGICandCL_OFFSETherehereinclude/include/linux/tty.hlinux/tty.h:unsignedcharunsignedcharrsvd_sizersvd_size;/0 x2c;/0 x2cunsignedcharunsignedcharrsvd_posrsvd_pos;/0 x2d;/0 x2d00表示没有电源管理(表示没有电源管理(APMAPM)BIOSBIOS0 x00020 x0002置位表示支持置位表示支持3232位模式位模式 0 0表示没有,表示没有,0 0 x0aax0aa表示有鼠标器表示有鼠标器2.2.3 保护模式下的初始化保护模式下的初始化,是指处理机进入保护模式后到保护模式下的初始化,是指处理机进入保护模式后到运行系统第一个内核程序过程中,系统所做的一些处理。运行系统第一个内核程序过程中,系统所做的一些

    注意事项

    本文(第2章 Linux操作系统的启动.ppt)为本站会员(asd****56)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开