当前位置 : 主页 > 操作系统 > centos >

解说linux启动流程

来源:互联网 收集:自由互联 发布时间:2022-06-20
解说linux启动流程 一:概述 关于linux的系统启动流程我们可以从下面图片中的流程一步一步展开,其实linux系统的启动过程中,我们可以比喻为一个接力赛,计算机的不同模块负责这个

 解说linux启动流程

一:概述 

    关于linux的系统启动流程我们可以从下面图片中的流程一步一步展开,其实linux系统的启动过程中,我们可以比喻为一个接力赛,计算机的不同模块负责这个接力赛中接力棒的交接(为了更好的理解,暂且这样比喻吧可能有点不是太恰当,呵呵解说linux启动流程_linux启动流程

解说linux启动流程_linux系统_02

 二:剖析启动过程(整个过程将围绕上面的图片流程详细展开)

  • 当我们打开计算机电源的时候,随后会听到滴的一声,linux系统开始了一段紧张有序的接力大赛,开始鸣枪(POST-power on self test)自检开始),这个过程中主要是检测我们的计算机硬件设备比如:CPU,内存,主板,显卡,CMOS等设备是否有故障存在,如果有硬件故障的话将按两种情况理:对于严重故障(致命性故障)则停机,此时由于各种初始化操作还没完成,不能给出任何提示或信号;对于非严重故障则给出提示或声音报警信号,等待用户处理),如果没有故障,POST完整自己的接力任务,将尾部工作交接给BIOS处理

  • BIOS接过接力棒后,首先会在一个Boot Sequence程序中搜索可以让系统启动的引导设备(比如我们有时在BIOS中设置为从硬盘启动,或者从CD-ROM启动等等)
  •      这时如果BIOS找不到可以引导的设备及相关程序后,便会启动失败,如果顺利      的找到了相关设备及程序,那么BIOS将继续交接给启动设备中的                  MBR(Master Boot Record)主引导记录


      3. MBR程序找到其前446个字节的Boot Loader 

      4. Boot Loader 找到gub程序

         在这个过程的主要是靠Grub的引导开始,将贯穿到系统初始化开始前

  • grub引导又分为两个阶段 stage1:主要是Boot loader  
  •  
  •                      stage 1.5:过渡  
  •  
  •                  stage2:主要是/boot/grub (这三个阶段在内部实现接力)    
  • 解说linux启动流程_linux启动流程_03

    从上面/boot目录中可以发现linux的内核(VMlinuz),grub,inird程序都在该目录下) 解说linux启动流程_linux系统_04

  • 在/boot/grub/下面我们看到了熟悉的stage1,stage2及grub工具的配置文件  grub.conf,呵呵, 
  •  
  • 那么grub.conf 是什么东东呢?呵呵,下面我们看下一该配置文件 
  • 解说linux启动流程_linux系统_05

  • 从grub的配置文件中我们看到了我们熟悉的开机图片 
  • 在启动菜单中 
  • root(hd0,0)告诉grub在什么地方引导内核及initrd程序 
  • 然后说明kernel及initrd的位置 
  • 从上面的grub.conf 的引导配置文件中得知,下面grub该找内核及initrd程序了,从启动菜单中得知相关位置信息后,开始步入引导kernel了,这就是kernel的初始化过程,MBR开始交接给kernel


     5. 内核的初始化,从全局启动历程start_kernel开始,     内核完成的任务主要有:     硬件的特测     硬件驱动的初始化,     挂载根文件系统(根切换)     启动init进程。     内核在系统启动后的功能先提前介绍一下:     进程的调度,内存管理,文件系统的管理,硬件驱动,网络等     内核自身初始化完成后开始下一步的接力

     6. 到此为止内核空间的相关工作已经完成,内核空间的任务开始向用户空间转移

        内核空间通过一个间接的initrd(微型linux)向用户空间的/sbin/init过度,所以gurb开始引导内核向initrd接力

       那么/boot目录的initrd都什么东东呢?

    解说linux启动流程_linux系统_06

    通过展开initrd-2.6.18-308.e15.img 后我们发现 这不就是个微型的linux吗?(完全具备linux必须的init,及相关目录)  grub程序通过引导initrd,initrd找到init完成接力    7. 系统启动init进程正式进入空户空间   解说linux启动流程_linux系统_07

    解说linux启动流程_linux系统_08

  • 通过上面init程序的查看我们可以看到,init程序完成的主要工作有 
  • 挂载 :将initrd中的/proc, /sys  /dev 挂载到当前的主分区中的相应目录
  • 创建目录:/dev/mapper
  • 通过mknod完成block or character special files的创建 
  • 相关模块的挂载
  • 创建root设备
  • 挂载 /sysroot
  • 最后完成根切换
     
  • init进程创建完成    8. init将后续工作接力给/etc/inittab 配置文件,开始系统初始化 解说linux启动流程_linux系统_09     下面/etc/inittab接力后,牵头开始完成系统的初始化操作 
  • 设定系统默认启动级别 
  • (0 级别关机
  • 1 单用户模式
  • 2 正常模式 (NFS服务部启动)
  • 3 多用户模式
  • 4 保留
  • 5 图像界面
  • 6 重启)
  • 执行脚本/etc/rc.d/rc.sysinit完成系统初始化,及相关其他的脚本
     
  •      系统初始化的简单的介绍:

    • 硬件的初始化,图像界面启动的初始化(如果设置了默认启动基本)
    • 主机RAID的设置初始化,device mapper 及相关的初始化,
    • 检测根文件系统,以只读方式挂载
    • 激活udev和selinux
    • 设置内核参数 /etc/sysctl.conf
    • 设置系统时钟
    • 启用交换分区,设置主机名
    • 加载键盘映射
    • 激活RAID和LVM逻辑卷
    • 挂载额外的文件系统 /etc/fstab
    • 等等

        最后基本的模块装载及内核的完成后,备份syslog。

     9.最后启动登录界面了

     总结 :在系统启动过程中主要的脚本和目录有哪些呢?我们可以概括一下

  • /boot 目录
  • /grub 目录
  • /boot/grub/grub.conf 脚本
  • /boot/initrd+内核版本 文件
  • /initrd文件中的init文件
  • /initrd文件中的/proc/ /sys/ /dev/ 目录的挂载 及根的切换
  • /etc/inittab 脚本
  • /etc/rc.d/rc.sysinit 脚本
  • 这些重要的脚本和目录,当然还有其他重要的目录和文件,脚本等暂不列举啦。
  •  温馨提示:大虾们,如有理解不到位的地方,还望多多指正,交流!

    上一篇:由SecureCRT命令行快捷键谈学习思想
    下一篇:没有了
    网友评论