Linux系统启动过程

大致分为几步:

探测硬件 (BIOS) –>加载驱动–>挂载根文件系统–>切换至根文件系统(rootfs)–>运行第一个程序 /sbin/init 初始化系统环境。

开机自检

POST(Power-On Self Test)开机自检——加载BIOS

linux开机加电后,系统开始开机自 检,该过程主要对计算机各种硬件设备进行检测,如CPU、内存、主板、硬盘、CMOS芯片等,如果出现致命故障则停机,并且由于初始化过程还没完成,所以 不会出现任何提示信号;如果出现一般故障则会发出声音等提示信号,等待故障清除;若未出现故障,加电自检完成。

加载Linux内核

主引导记录

主引导记录(MBR,Master Boot Record)是计算机开机以后访问硬盘时所必须要读取的第一个扇区,位于硬盘的第0柱面第0磁道第一扇区,大小为512字节。

MBR 中最主要的功能就是 存储 启动加载程序。诸如LILO、GRUB这些引导程序(BootLoader)都是直接安装在MBR中。

MBR 分为:

  1. BootLoader 占用446字节,存储有操作系统相关信息如操作系统名称、内核位置等,目的是加载内核到内存中运行。

  2. 分区表(Partition Table)占用64字节,每个主分区占用16字节(这就是为什么一块硬盘只能有四个主分区)

  3. 分区表有效性标记(结束标记)占用2字节

  4. 结构图

    img

CPU加载MBR

系统(此处不知道叫系统是否合适)通过BIOS程序找到硬盘的MBR后,将其复制到0x7c00地址所在的物理内存中,并跳转到此处继续执行。

BootLoader启动

BootLoader就是在操作系统内核运行之前,运行GRUB(一种Linux BootLoader程序,此外还有LILO、spfdisk、HD。大多为GRUB)。系统读取内存中的GRUB配置信息

加载内核

Linux内核有两阶段启动

  1. 初始化initrd

    initrd(BootLoader initialized RAM disk)是由BootLoader初始化的内存盘,GRUB加载内核同时,也将初始ramdisk映像initrd加载到 高端内存 中。首次启动时,Linux内核会将initrd作为临时根文件系统,在initrd上运行。内核执行一个sh脚本,指导内核加载实际根系统设备所需的模块。所需驱动程序加载完后,会创建一个根设备,然后将跟文件系统rootfs以只读形式挂载。此后,内核将释放ramdisk,同时运行 /sbin/init ,并将控制权转移到init进程。

  2. 初始化系统

    启动初始化进程init(位于目录下的 /sbin/init) ,init则为第一个用户进程, 这个阶段内核将控制权转交给init进程。init进程会首先读取 /etc/inittab 文件来执行相应的脚本进行系统初始化,如设置键盘、字体、网络。

    /sbin/init 实际是个指向/lib/systemd/systemd链接文件。

    image-20220602110130982

    sytemd (init)进程的pid为 1。

    image-20220602114222194

Linux的内核镜像在 /boot目录下,系统读取 /boot 下的内核文件,如我的Ubuntu20.04文件如下:

image-20220602104449408

确定运行级别

init 进程运行一些开机自启动程序。许多程序需要开机启动。它们在Windows叫做"服务"(service),在Linux就叫做"守护进程"(daemon)。

七种运行级别(0-6)

等级0表示:表示关机
等级1表示:单用户模式
等级2表示:无网络连接的多用户命令行模式
等级3表示:有网络连接的多用户命令行模式
等级4表示:不可用
等级5表示:带图形界面的多用户模式
等级6表示:重新启动

“rc”,表示run command(运行程序),最后的d表示directory(目录)

当Linux启动时,会寻找这些目录中的服务脚本,并根据脚本的run level确定不同的启动级别

参考

主引导记录_百度百科 (baidu.com)

Linux 的启动流程 - 阮一峰的网络日志 (ruanyifeng.com)

linux中init.d文件夹的说明 - crazyCodeLove - 博客园 (cnblogs.com)

未完…

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值