linux 启动过程

Linux 系统启动过程

Linux启动过程可以分为5个阶段:

1. 内核的引导

2. 运行 init

3. 系统初始化

4. 建立终端

5. 用户登录系统

流程解析:

1. 内核引导

  BIOS

  打开计算机电源,系统将有一个对内部设备进行检查的过程,这是由POST(Power On Self Test)程序完成的,这也是BIOS的一个功能。

  完整的POST自检将包括CPU、64K基本内存、1M以上扩展内存、ROM、主板、CMOS存储器、串口、显卡、硬盘、键盘。

  POST自检的大致过程:通电>CPU>ROM>BIOS>System Clock>DMA>64K RAM>IPR>显卡>硬盘>键盘、鼠标。

  CPU-内存-显卡-硬盘,自检过程中若发现问题,系统将会给出提示信息或者鸣笛警告。

  寻找磁盘,每一种BIOS都会由开机启动菜单,可以在菜单里设置以那个设备启动系统,如:硬盘、U盘等

  MBR(Master Boot Record)

  会根据MBR所指的活动中心上寻找系统分区上的bootloader,boot loader称为一段程序,占用446/512/?字节。在boot loader中配置了要引导

  操作系统的内核所在的位置,因此BIOS载入内存后,实现了将控制权交给bootloader,bootloader根据用户的设置去读取相应操作系统的内核,

  载入内存空间,并解压缩。根据kernel本身的功能在内存中探索硬件并加载硬件驱动程序完成内核初始化,把控制权交给内核。

  boot loader  grub引导菜单

  boot loader有若干种:grub、lilo、spfdisk等。系统读取内存中的grub配置信息

  Ubuntu20.04:/boot/grub/grub.cfg

  加载kernel(初始化)

  根据grub配置的内核镜像路径,系统读取内核镜像,解压缩。

  系统将解压后的内核放置在内存中,并调用start_kernel()函数来启动一系列初始化函数并初始化各种设备,完成linux内核环境的搭建,

  基于Linux程序就可以正常运转了。

  start_kernel(): 内核完成的主要任务:

    硬件的特性

    硬件驱动初始化

    挂在根文件系统

    启动init进程

    内核在系统启动后的更能:

    进程调度、内存管理、文件系统管理、硬件驱动、网络。。。

  6.initrd

  7.rootfs(/sbin/init)  init程序依据inittab文件夹设定运行级别。

  内核加载完成之后,第一运行的程序是sbin/init, 读取/etc/inittab文件,进行初始化工作。

  /etc/inittab文件主要是设置liunx的启动级别。

  Linux系统有7个运行级别(runlevel):

    • 运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
    • 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
    • 运行级别2:多用户状态(没有NFS)
    • 运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
    • 运行级别4:系统未使用,保留
    • 运行级别5:X11控制台,登陆后进入图形GUI模式
    • 运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动

  8.init执行/etc/rc.d/rc.sysinit

  设定好系统的启动级别后,Linux系统执行第一个用户层文件/etc/rc.d/rc.sysinit脚本程序, 该脚本做的工作:

  检测,并以读写方式挂载根文件系统
  设定主机名
  检测并挂载/etc/fstab中其它文件系统
  启动swap分区
  初始化外围硬件设备驱动
  根据/etc/sysctl.conf设定内核参数
  激活udev和selinux
  激活LVM和RAID设备
  清理过期锁文件和PID文件
  装载键映射-->键盘上每个键的功能

  9.启动内核文件

  具体是依据/etc/modules.conf文件或/etc/modules.d目录下的文件来装载内核模块

  10.执行不同运行级别的脚本程序

  根据系统运行级别的不同,系统会运行rc0.d到rc6.d中的相应的脚本程序,来完成相应的初始化工作和启动相应的服务

    11.执行/etc/rc.d/rc.local

  rc.local就是在一切初始化工作后,Linux留给用户进行个性化的地方。你可以把你想设置和启动的东西放到这里

  12.执行/bin/login程序,启动mingetty,进入登录状态

参考:

https://blog.51cto.com/mrxiong2017/2084767

https://blog.51cto.com/guodayong/1168731

https://blog.csdn.net/weixin_48242422/article/details/121093819

https://blog.csdn.net/weixin_42381214/article/details/121491623

 

posted @ 2022-07-20 11:27  zhuang6  阅读(436)  评论(0编辑  收藏  举报