Linux启动流程讲解

要了解linux系统的启动流程,先要了解系统的组成

关于系统的组成:
        内核+根文件系统组成

内核:由内核核心文件和模块文件组成
            1.内核核心文件:一般位于/boot/目录下,命名为vmlinuz-VERSION(版本号)
            2.模块文件:位于/lib/modules/VERSION/目录下,存放着内核的众多功能组件(如驱动)
            3.initrd:位于/boot下,一般命名为initramfs-VERSION,此文件相当于一个简装版的根文件系统,在内核无法挂载文件系统是加载,辅助内核完成真正的根文件系统挂载

补充一些基本概念:(方便在流程讲解中容易理解)

(1)CMOS:主板上的一块可读写的RAM芯片,保存系统的硬件配置信息
        (2)BIOS:基本输入输出系统,写入主板ROM芯片的微系统
        (3)MBR:Master Boot Record,共512字节,446字节boot loader,64字节分区表
        (4)boot loader:启动管理程序,linux启动管理程序为grub或lilo

    系统启动的简要流程:
   BIOS开机自检 --> 加载boot loader --> boot load加载内核文件到内存 --> 内核初始化,最后启动init进程 --> init初始化,启动登陆终端

系统的简单启动流程如以上所示,要了解其中的细节,大概需要分为两层来展开,内核层面和用户层面,以下启动流程基于grub展开

 内核层面:

1.开机自检:启动电源后,BIOS会读取CMOS中的硬件信息,完成自检后读取“第一启动设备的第一扇区”中的boot loader程序grub 
        
    2.grub引导有三个阶段:stage1、stage1_5、stage2

stage1:此阶段并不是直接引导内核,而是指向第二扇区的stage1_5

stage1_5: 识别文件系统并加载stage2

stage2:找到内核并解压至内存,功成身退

3.内核初始化,并尝试以只读方式挂载根文件系统,根文件系统挂载后,内核便加载驱动,最后内核启动第一个进程init

若内核无法完成根文件系统挂载,则需要加载initramfs文件来辅助根的挂载

用户空间层面      
    4. init程序初始化系统环境,通过读取inittab获取运行级别,加载初始化脚本/etc/rc.d/rc.sysinit,根据相应的运行级别完成服务的停止和启动,最终启动终端
     
    注意:initramfs是非必须的,取决于内核是否能挂载根文件系统



init初始化:(CentOS 5的初始化流程)
    init是内核完成初始化最后一步启动的系统第一的进程,其PID为1,init读取inittab配置文件设定运行级别, 然后读取/etc/rc.d/rc.sysinit初始化脚本,完成系统环境初始化,按照运行级别加载和关闭相关服务(相关运行级别服务信息,通过遍历/etc/rc.d/下对应运行级别的目录中的符号连接,符号连接指向/etc/rc.d/ini.d目录下的脚本文件)
    最终启动终端
 
        配置文件:/etc/inittab            
         配置系统运行级别

[[email protected]_linux ~]# cat /etc/inittab 
# Default runlevel. The runlevels used are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
# 
id:3:initdefault:

0 - halt (系统直接关机)
          1 - single user mode (单人模式,无需登录,用于维护)
          2 - Multi-user, without NFS (无NFS服务的多用户系统)
          3 - Full multi-user mode (有网络功能的命令行模式)
          4 - unused (系统保留功能)
          5 - X11 (加载X Window,与3相似)
          6 - reboot (重新启动)

注意:默认runlevel不要设置成0或6,否则系统将会不停关机个重启

   配置文件相关语法:
         id:runlevel:action:process
          id:任务标示
          runlevel:运行此任务的级别
          action:启动此任务的条件
          process:任务
            
        action:
         wait:等待切换至此任务所在的级别时执行一次:
         respawn:一旦此任务终止,就自动重新启动之:
         initdefault:设定默认运行级别:此时,process省略:
         sysinit:设定系统初始化方式,此处一般为指定/etc/rc.d/rc.sysinit脚本:

例子:2:2:wait:/etc/rc.d/rc6.d
          表示切换至2级别要执行一次rc.6的配置文件

在服务初始化时,优先级别高的服务会先被停止或者启动,被依赖的服务其启动优先级应该高于被依赖的服务,停止优先级应该低于被依赖的服务

/etc/rc.d/rc.sysinit
        初始化脚本文件,init通过加载此脚本文件初始化系统环境
        初始化信息
         (1) 设置主机名
         (2) 设置欢迎信息
         (3) 激活udev和selinux
         (4) 挂载/etc/fstab文件中定义的所有文件系统
         (5) 检测根文件系统,并以读写方式重新挂载根文件系统
         (6) 设置系统时钟
         (7) 根据/etc/sysctl.conf文件来设置内核参数
         (8) 激活lvm及软raid设备
         (9) 激活swap设备
         (10) 加载额外设备的驱动程序
         (11) 清理操作

    /etc/rc.d/*.d
     rc.d目录下存放以$runevelrc.d命名的文件,内容是对应runlevel
     应该停止和启动的服务的符号链接,符号连接指向的是/etc/rc.d/init.d目录下的脚本文件

/etc/rc.local:初始化流程最后指定执行的脚本文件,可通过此文件设定开机自动启动程序

    chkconfig:查看运行级别的服务信息
     查看
      chkconfig [--list] [name]
     添加
      chkconfig --add name
     删除
      chkconfig --del name
     修改
      chkconfig [--level LEVEL] name {no|off|reset}
      不指定level默认为2345

时间: 2024-10-30 21:33:12

Linux启动流程讲解的相关文章

记录Linux启动流程的工具bootchart

/*********************************************************************  * Author  : Samson  * Date    : 04/28/2014  * Test platform:  *              3.11.0-12-generic #19-Ubuntu  *              GNU bash, version 4.2.45  * ****************************

STB 参考Linux启动流程分析

STB启动流程 1. uboot启动(Fastboot启动) 硬件资源检测(如CPU,DDR Size,Nand  flash,mem size,flash size) print Version(如HW Version,Boot Version,Loader Version) boot设置模型的选择(autoboot or stop) 2. Starting kernel 各种接口驱动的启动() Creating 10 MTD partitions on “hinand” 网卡驱动,USB驱动

linux启动流程及自定义gurp

linux 启动流程 POST BIOS(boot sequence) 所选择的启动设备次序的MBR中是否有引导程序, ----> MBR(bootloader) 提供内核列表 ------->加载选定的Kernel,initrd(内存模拟的磁盘设备需要缓存),initramfs(缓存)  ---->获取到根文件系统并挂载,运行init bootloadler开始以后的挂载流程 1.当系统读取bootloader,挂载内核分区的时候,不识别更高级的磁盘分区上,只能放在基本磁盘分区,而且只

Linux启动流程详解【转载】

在BIOS阶段,计算机的行为基本上被写死了,可以做的事情并不多:一般就是通电.BIOS.主引导记录.操作系统这四步.所以我们一般认为加载内核是linux启动流程的第一步. 第一步.加载内核 操作系统接管硬件以后,首先读入 /boot 目录下的内核文件. 我们查看一下,/boot 目录下面大概是这样一些文件: 第二步.启动初始化进程 内核文件加载以后,就开始运行第一个程序 /sbin/init,它的作用是初始化系统环境. 由于init是第一个运行的程序,它的进程编号(pid)就是1.其他所有进程都

Linux 启动流程学习

Linux 启动流程学习 开机自检(加载BIOS) 无论什么机器,在开机后都要进行通电自检(硬件),如果硬件有问题,则无法继续下去. (例如当内存条松动时或者损坏,就会发出嘀嘀嘀警报声).接着开始加载BIOS(Basic Input Output System BIOS是一个写入到主板上的一个软件程序.BIOS会去分析计算机里面有哪些存储设备, 从默认的第一启动项开始启动. MBR与boot loader 接下来BIOS将程序启动的下一步交给了MBR,他会去读取第一个扇区的MBR位置. 由于不同

Linux启动流程简介以及各启动阶段失败的恢复方法

透彻的了解Linux启动流程是非常关键的知识点,只有了解了这部分内容,才会在Linux出现系统级别的错误时能够非常冷静的面对以及快速的排错. Linux启动流程 第一阶段 BIOS不是操作系统的职责范围 BIOS是硬件的功能,属于firmware BIOS存储于ROM,不需要强电就可以实现数据保存 更改BIOS如启动顺序保存在一种特定的RAM中,为了保证断电后实际更改保存,通过BIOS上加电池来解决 在BIOS可以选择启动顺序(硬盘,光盘,网络等) 如果选择BIOS从硬盘启动,硬盘的必须是MBR

linux启动流程详解、破解root密码、添加服务脚本

1.Linux的组成 kernel+rootfs kernel:进程管理.内存管理.网络管理.安全管理.文件系统管理.驱动程序 rootfs:程序和glibc 库:函数集合,function,调用接口(头文件负责描述) 过程调用:procedure  ,无返回值 结果调用:function 程序:二进制文件 2.内核设计流派 单内核(monolithic kernel):Linux 把所有功能集成于同一个程序 微内核(micro kernel):Windows, Solaris 每种功能使用一个

24、Linux启动流程和grub详解

还记得Windows的启动流程吗?相信大家能说出来个大概,为什么说出个大概呢,因为Windows是图形界面启动的,但是开机过程都做了什么,你知道吗,相反,Linux启动的时候,会把这些加载到屏幕上面显示,那接下来我们来看看Linux启动都发生了些什么把!!! Linux启动流程图 简解开机启动流程 当用户打开电源后,BIOS开机自检,确定启动设备,安装启动设备启动设备上面安装的GRUB开始引导Linux,Linux首先先进行内核引导,通过跟切换,执行init程序,init程序确定启动级别,根据启

详解Linux启动流程及需要使用到的配置文件

POST(Power On Self Test)加电自检 --> BIOS(Boot Sequence)--> MBR(bootloader)-->Kernel --> initrd --> rootfs(/sbin/init) 下面对每一个启动流程做详细解释: POST(Power OnSelf Test)加电自检   计算机本身不执行任何程序,所以系统必须要完成自举的过程,在CPU的控制下将RAM芯片中的某个程序映射到ROM的地址空间,并执行其中的指令完成系统硬件健康状况