Linux系统引导和内和初始化(哈尔滨工业大学课件).ppt_第1页
Linux系统引导和内和初始化(哈尔滨工业大学课件).ppt_第2页
Linux系统引导和内和初始化(哈尔滨工业大学课件).ppt_第3页
Linux系统引导和内和初始化(哈尔滨工业大学课件).ppt_第4页
Linux系统引导和内和初始化(哈尔滨工业大学课件).ppt_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Linux内核源代码导读,哈尔滨工业大学(威海)嵌入式系统实验室Autumn2011,系统引导和初始化,概述史前时代:BIOS远古时代:引导装入程序中世纪:setup()函数文艺复兴时期:startup_32()函数现代:start_kernel()函数,2020/5/31,引导过程概述,在计算机刚加电的那一刻,所有的硬件设备都是毫无作用的。整个计算机内如同史前时代的大地一样,四处处于混乱,无序,随机和离散的状态,RAM中包含的是无用的随机数据。引导(bootstrap)就是从开机加电时混乱无序状态将OS映像装入RAM,并转入OS的运行,由OS管理控制计算机的过程存储OS映像的非易失介质可以是硬磁盘,软盘,EPROM或flash存储器,或网络中别的节点以典型的硬盘引导为例,2020/5/31,引导过程概述,要使开机时从不挥发介质装入OS映像,要求CPU一开机时就能自动执行一段程序显然,这段程序应该存储在内存的EPROM或flash中这段程序应知道怎样从不挥发介质中装入OS映像BIOS的一部分各种CPU都被设计成一上电就从某个特殊的地址开始执行指令,存储在内存EPROM这个特殊位置的程序很小,不足以直接将OS映像从磁盘上读进来磁盘的文件系统不同OS内核映像可能经过压缩,装入的同时需要解压不同的CPU指令也不同,2020/5/31,2020/5/31,引导扇区,为了解决EPROM中的程序不足以直接加载OS映像,通常在磁盘的第一个扇区中存放一些映像的地理信息和一段适用于具体操作系统的程序即为引导扇区内容取决于具体操作系统,也可能与文件系统相关而存放在EPROM中的的程序则负责从磁盘中读入引导扇区(到内存),称之为初始引导程序初始引导程序与具体操作系统或文件系统无关,2020/5/31,引导扇区内的程序再负责装入其他扇区,这些扇区的程序和数据共同完成整个引导过程或者由引导扇区读入一个中间的工具性程序,称为引导装入程序(bootloader),再由它负责装入OS映像例如Linux的引导装入程序LILO可让用户从多个操作系统中有选择地引导,2020/5/31,主引导记录块MBR,由于硬盘容量的迅速增长,一个硬盘常常被划分为若干“分区”,从而把一个物理硬盘划分为几个逻辑磁盘每个逻辑磁盘的第一个扇区仍然是引导扇区,分别用于相应的逻辑磁盘中的操作系统映像显然,这些引导扇区已不是整个硬盘的第一个扇区了整个硬盘第一个扇区的层次高于所有逻辑磁盘,不属于任何一个逻辑磁盘,2020/5/31,机器加电时,BIOS还是会从整个硬盘的第一个扇区开始引导,因此这个扇区称作主引导记录块MBRMBR含有硬盘分区表,和一段小程序MBR中的程序并不直接引导操作系统,而是根据盘区划分信息从一个预定的“活跃”逻辑磁盘中读入其引导扇区逻辑磁盘的引导扇区程序再负责装入OS映像也可将LILO或GRUB放在MBR中,使引导过程少转一道弯,2020/5/31,系统启动,Bootloader第一阶段,Bootloader第二阶段,启动内核,运行init进程,用户空间,内核,LILO,GRUB等,MBR,BIOS,x86PC上的Linux引导过程,上电/复位,2020/5/31,史前时代:BIOS,计算机加电时,由一个特殊的硬件电路在CPU的一个引脚上产生一个RESET逻辑值。RESET产生以后,就把处理器的一些寄存器设成固定的值,并执行在物理地址0 xfffffff0处的代码。此时RAM芯片中包含的是随机数据因此必须将地址0 xfffffff0映射到某个只读,不挥发的存储芯片中,即ROM芯片在80 x86体系中,ROM中存放的程序集叫做基本输入输出系统(BasicInput/OutputSystem,BIOS),2020/5/31,BIOS包含几个中断驱动的低级过程所有操作系统在启动时都要通过这些过程对计算机硬件设备初始化一些操作系统,如MS-DOS,依赖于BIOS实现大部分系统调用,2020/5/31,注意Linux内核并不使用BIOS!多进程,采用保护模式尤其是页式映射的现代操作系统,不适合使用BIOS的驱动BIOS过程必须在实模式下运行,内核进入保护模式后不能与之共享函数Linux绕开了BIOS,从硬件接口和中断响应彻底地实现了自己的设备驱动层对Linux开说,BIOS作用不过是初始引导和加电自检以及提供此过程搜集到的信息,2020/5/31,BIOS使用实地址模式,因为计算机加电启动时只有这些可以使用一个实模式地址由一个seg段和一个off偏移量组成,计算物理地址:seg*16+off因此实模式下CPU寻址电路不需要全局描述符表和页表将逻辑地址转换成物理地址显然,对GDT、LDT和页表进行初始化的代码必须在实模式下运行,2020/5/31,BIOS的启动过程,1.对计算机执行一系列测试,来检测现在都有什么设备以及设备是否都正常工作这个阶段称为POST(Power-OnSelf-Test,加电自检)2.初始化硬件设备3.搜索一个操作系统来启动根据BIOS设置,该过程按照用户预定义的次序访问系统中的软盘、硬盘和CD-ROM的第一个扇区4.只要找到一个有效的设备,就把第一扇区的内容拷贝到RAM中物理地址0 x00007c00开始的位置,跳转到该地址处,执行刚才装载进来的代码,2020/5/31,远古时代:引导装入程序,引导装入程序(bootloader)是由BIOS用来把操作系统内核映像装载到RAM中所调用的一个程序由BIOS调用,不属于BIOS如GRUB和LILOLinux使用一个引导装入程序取代硬盘第一扇区MBR中原有的小程序MBR中包含硬盘分区表和一段小程序,该程序用于装载被启动操作系统所在分区第一个扇区,2020/5/31,引导装入程序(共446字节),硬盘分区表(共64字节),魔数(2字节),分区1,分区2,分区3,分区4,分区标志,startCHS,分区比特,endCHS,startLBA,size,主引导记录MBR的结构示意图,2020/5/31,从磁盘启动Linux,从磁盘启动Linux需要一个两步的引导装入程序,80 x86体系下通常是LinuxLOader(LILO)还有GRUB,比LILO功能更强LILO被装在MBR上(代替那个装载活动扇区的小程序),或被装在每个磁盘分区的引导扇区上效果一样,引导装入程序被执行时,用户都可以选择装入哪个操作系统,2020/5/31,LILO的第一部分。MBR或分区引导扇区包括一个小的引导装入程序,由BIOS把这个小程序装入从地址0 x00007c00开始的RAM中第一部分的小程序执行后,便将自身搬运到地址0 x00096a00,建立实模式栈,然后将LILO的第二部分装入到从地址0 x00096c00开始的RAM中第二部分从磁盘读取可用操作系统映射表,并提供给用户一个提示符,让用户可以从中选择装一个操作系统,2020/5/31,用户选择了要装入的OS后,LILO就把相应分区的引导扇区拷贝到RAM中并执行它,或直接把内核映像拷贝到RAM中LILO引导装入程序装入Linux内核映像要依赖于BIOS例程,主要执行如下操作:1.调用一个BIOS过程显示“Loading”信息2.调用一个BIOS过程从磁盘装入内核映像的初始部分即将内核映像第一个512字节从地址0 x00090000开始存入RAM中,将setup()函数代码从地址0 x00090200开始存入RAM,2020/5/31,3.调用一个BIOS过程从磁盘中装载其余的内核映像使用makezImage编译的小内核映像存放在从低地址0 x00010000开始处的RAM中使用makebzImage编译的大内核映像则存放在从高地址0 x00100000开始处的RAM中4.跳转到setup()代码,2020/5/31,中世纪:setup()函数,setup()汇编语言函数的代码由链接程序放在内核映像文件偏移量0 x200处,引导装入程序装入内核映像时把它拷贝到从物理地址0 x00090200开始的RAM中setup()函数初始化计算机中的硬件设备,并为内核程序的执行建立环境虽然BIOS已经初始化了大部分硬件设备,但是Linux并不依赖于BIOS,而是以自己的方式重新初始化硬件设备以增强可移植性和健壮性,2020/5/31,setup()函数执行的操作:1.在AIPC兼容的系统中,它调用一个BIOS例程,以在RAM中建立系统物理内存布局表2.设置键盘重复延时和速率当用户一直按下一个键超过一定时间,键盘设备就反复向CPU发送相应的键盘码3.初始化视频卡4.重新初始化磁盘控制器并检测硬盘参数5.检查IBM微通道总线(MCA)6.检查PS/2指针设备(总线鼠标)7.检查高级电源管理(APM)BIOS的支持,2020/5/31,8.如果BIOS支持增强磁盘驱动服务,就调用相应的BIOS过程在RAM中建立系统可用硬盘表9.如果内核映像被低装载到RAM中(0 x00010000处),就将它移动到物理地址0 x00001000处10.置位8042键盘控制器的A20引脚(为了兼容性的必须)11.建立临时中断描述符表(IDT)和临时全局描述符表(GDT)12.如果需要,重置浮点单元(FPU)13.重新编写可编程中断控制器(PIC),以屏蔽所有中断但应保留IRQ2,它是两个PIC间的级联中断,2020/5/31,14.通过设置cr0状态寄存器中的PE位,将CPU从实地址模式切换到保护模式。cr0状态寄存器中的PG位被清0,因此分页机制还没有启用15.跳转到startup_32()汇编语言函数,2020/5/31,文艺复兴时期:startup_32()函数,startup_32()函数设置一个基本的运行环境(如堆栈)后清除BSS段,调用decompress_kernel()函数来解压内核内核映像并不是可直接执行的目标代码,而是经过压缩的zImage或bzImage并非所有部分都是压缩过的,压缩文件头内嵌有解压自身的代码ss,2020/5/31,setup()/arch/i386/boot/head.Sstartup_32()/arch/i386/boot/compressed/head.Sdecompress_kernel()/arch/i386/boot/compressed/misc.cstartup_32()/arch/i386/kernel/head.Sstart_kernel()/init/ma

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论