zoukankan      html  css  js  c++  java
  • Linux 启动过程分析

          本文仅简单介绍Linux的启动过程,在此基础上做简要的分析。对于Linux启动过程中内部详细的函数调用不做介绍,只是希望本文能给新手起到一个抛砖引玉的作用,以便深入研究Linux的启动过程。下图基本展示了Linux启动的基本过程,仅为个人学习总结得出,如有大神拍砖,表示欢迎。

    一. BIOS自检:

      应当理解的一些常识:

        BIOS的组成是由两大部分组成的:POST(power on system test)代码和运行时的服务;

        POST的工作目的是对硬件进行检测;

         1. 当计算机加电后,首先由BIOS进行POST(power on system test)自检。

              即第一步骤就是加电,POST自检。然后依据BIOS内设置的引导顺序从硬盘,软盘,或CDROM中读入引导块;

         2. BIOS的第二个步骤是进行本地设备的枚举和初始化。

            通常Linux系统都是从硬盘上引导的,其中主引导目录(MBR)中包含着主引导目录加载程序,MBR是一个512字节大小的扇区,位于磁盘上的一个扇区。     即:每个磁盘的第一个扇区为磁盘的MBR,MBR中前446字节记录的是boot loader,boot loader中安装的是grub的stage1,用于指向grub主程序咋磁盘中的位置。开机加电之后,BIOS按照boot sequence找到对应磁盘,然后搜索该磁盘的MBR。找到位于基本磁盘分区的grub程序,即进入stage2阶段,按照grub.conf配置文件对kernel以及initrd进行引导加载。当MBR被加载到RAM中之后,BIOS就会将控制权交给MBR。

    查看MBR中的内容:(前提是root用户)

     dd if=/dev/sda of=mbr.bin bs=512 count=1

     od –xa mbr.bin

    查看到的内容为(均为二进制):

    .启动GRUB/LILO

      GRUB和LILO都是引导加载程序,主要用于引导操作系统的启动。

      在单一的MBR中只能存储一个操作系统的引导记录,所以当需要多个操作系统时,就会出现问题,需要更灵活的引导加载程序。

      GRUB和LILO的区别:

          GRUB拥有交互式命令界面;

          GRUB支持网络引导;

          LILO可以引导操作系统位置的信息存储在MBR中;

       *:如果LILO的配置文件出现错误,会导致系统无法启动;而当使用GRUB时,如果配置文件出现错误,则系统会默认转到GRUB命令界面。

       GRUB的配置文件:  /boot/grub/grub.config

    像上图一样,输入 cat grub.conf 之后,按下Enter键:

    三.加载内核:

           加载内核映像到内存中,内核映像并不是一个可执行的内核,而是一个可压缩的内核映像。在这个内核映像前面是一个例程,它实现少量硬件设置,并对内核映像中包含的内核进行解压缩,然后将其放入高端内存中。如果有初始化RAM磁盘映像,系统就会将它移动到内存中,并标明以后使用,然后到该例程会调用内核,并开始启动内核引导的过程。

    四. 执行init进程

        init进程是系统所有进程的起点,是所有进程的发起者和控制者。因为在任何基于Linux的操作系统中,它都是第一个运行的进程,所以,init进程的进程编号(PID)永远是1.

       内核在完成核内引导以后,即在本进程空间内加载init程序,它的进程号是1,主要用来执行一些开机初始化脚本和监视进程。如:init读取系统引导配置文件/etc/inittab中的信息进行初始化。

    关于init进程的作用:

    1. 扮演终结父进程的角色:因为init进程永远不会终止,所以系统总是可以确认它的存在,并在必要的时候以它为参照;
    2. 在进入某个特定的运行级别时,运行相应的程序,以及对各种运行级别进行管理,它的这个作用由文件/etc/inittab定义的。

    五. 关于其它

      /etc/rc.d/rc.sysinit  系统初始化脚本;

      /etc/rc.d/rcX.d/[KS] * - 根据运行级别X分配服务;终止以“K”开头的服务,启动以“S”开头的服务;

      /etc/rc.d/rc.local 执行本地特殊配置;

      最后是其他服务。

        作者:itRed
    
        博客URL:http://www.cnblogs.com/itred
    
        学习交流邮箱:it_red@sina.com
    
    本博客您可以自由转载,但请保留原作者信息和文章链接URL。

    推荐参考阅读:

    《6 Stages of Linux Boot Process (Startup Sequence)》 http://www.thegeekstuff.com/2011/02/linux-boot-process/

    《Linux Booting Process》http://resources.infosecinstitute.com/linux-booting-process/

  • 相关阅读:
    求助:可以使用任何编程工具做成一个控件或组件,使得在VB中能调用并得到摄像头的参数及图片。
    作为软件工程师,你必须知道的20个常识
    继续C#开发or转做产品
    65行 JavaScript 代码实现 Flappy Bird 游戏
    自上而下的软件开发和自下而上的软件开发
    没有发布过产品的程序员不知道什么是真正的软件
    20个数据库设计的最佳实践
    59条搞笑但却真实无比的编程语录
    自己动手跟着Jwt标准实现Jwt
    Gitlab-Runner基础教程
  • 原文地址:https://www.cnblogs.com/itred/p/3726069.html
Copyright © 2011-2022 走看看