Linux系统开机启动流程介绍

一、linux系统进程启动流程图:

二、简单概括描述linux系统从开机到登陆界面的启动过程

1.开机BIOS自检

2.MBR引导

3.grub引导菜单

4.加载内核

5.启动init进程

6.读取inittab文件执行rc.sysinit、rc等脚本

7.启动mingetty进入系统登录界面

三、详细剖析linux系统启动过程

1.POST开机自检

电脑主机打开电源的时候随后会听到滴的一声响系统启动开始了开机自检POST-power on self

Test自检开始这个过程中主要是检测计算机硬件设备比如CPU内存主板显卡等设备是否有故障存在。如果有硬件故障的话将按两种情况理对于严重故障(致命性故障)则停机此时由于各种初始化操作还没完成不能给出任何提示或信号对于非严重故障则给出提示或声音报警信号等待用户处理如果没有故障POST完成自己的接力任务将尾部工作交接给BIOS处理。

2.加载BIOS并读取设置

计算机加电自检完成后第一个读取的地方就是就是BIOSBasic Input Output System基础输入输出系统BIOS里面记录了主机板的芯片集与相关设置如CPU与接口设备的通信频率、启动设备的搜索顺序、硬盘的大小与类型、系统时间、外部总线、各种接口设备的I/O地址、已经与CPU通信的IRQ中断信息所以启动如果要顺利启动首先要读取BIOS设置。

3.读取MRB:

按BIOS设定的系统启动流程检测通过则根据引导次序(Boot Sequence)开始在第一台设备上支持启动程序我们的启动设备主要包括硬盘、usb、sd等我们一般用的是硬盘然后进行读取第一个设备就是硬盘第一个要读去的就是该硬盘的主引导记录MBRMaster Boot Record然后系统可以根据启动区安装的引导加载程序Boot Loader开始执行核心识别的工作。

硬盘上第0柱面0磁道1扇区被称为MBR,也就是Master Boot Record,即主引导记录它的大小是512字节里面存放了预启动信息、分区表信息及分区标志等。分为两部分第一部分为(PRE-BOOT)引导区,占了446个字节第二部分为分区表(PARTITION PABLE),共66个字节记录硬盘的分区信息(其中前64字节是分区表信息后2个字节是分区结束的标志)。

预引导区的作用之一是找到标记为活动(ACTIVE)的分区并将活动分区的引导区读入内存。

系统找到BIOS所指定的硬盘的MBR后就会将其复制到0x7c00地址所在的物理内存中。其实被复制到物理内存的内容就是Boot Loader,而具体到Linux系统那就是grub了。

4.Boot Loader加载Grub程序。

Boot Loader就是在操作系统内核运行之前运行的一小段程序。通过这小段程序我们可以初始化硬件设备、简历内存空间的映射图从而将系统的软硬件环境带到一个合适的状态以便为最终调用操作系统内核做好一切准备。通常Boot Loader是严重地依赖于硬件实现的不同体系结构的系统存在着不同的BootLoader。

在这个过程中主要靠Grub的引导开始的Grub分为两个阶段

stage1主要是Boot loader

stage1.5:过渡

stage2:主要是/boot/grub

5.内核初始化

根据Grub内的定义grub读取完毕后就把下面的工作交给内核了。kernel主要是完成系统硬件探测及硬件驱动的初始化并且以读写的方式挂载根文件系统根切换那么这里就出现了一个“先有鸡还是先有蛋的文件了”具体是什么呢要想访问真正的根文件系统rootfs的话就必须加载根文件系统中的设备这时根文件系统又没有挂载要挂载根文件系统又得加载根文件系统中的驱动程序哪怎么办呢为了解决这个问题这是就用到了initrd文件了。

再来说下kernel初始化所要工作的内容做下简单总结

探测硬件->加载驱动initrd)->挂载根文件系统->rootfs(/sbin/init)

6.init进程依据inittab文件来设定运行级别

内核被加载后内核空间的任务开始向用户空间转移内核空间通过一个间接的initrd(微型linux)向用户空间的/sbin/init过度所以gurb开始引导内核转向initrd。

initrd一个虚拟的文件系统里面有lib、bin、sbin、usr、proc、sys、var、dev、boot等一些目录其实你会发现里面的目录有点像真的/对吧所以我们称之为虚拟的根文件系统作用就是将kernel和真的根文件系统建立关联关系让kernel去initrd中加载根文件系统所需要的驱动程序并以读写的方式挂载根文件系统内核被加载后第一个运行的程序是/sbin/init在引导linux系统的过程中”/sbin/init”是内核第一个加载的程序因此init进程对应的PID号永远为“1“。

此时该文件会读取/etc/inittab文件并依据此文件来进行初始化工作。其实/etc/inittab文件最主要的作用就是设定Linux的运行等级其设定形式是”:id:3:initdefault:”,这就表明linux需要运行在等级3上。Linux的运行等级设定如下

默认运行级别

0halt                      //关机

1:single user mode    //单用户维护模式)

2multi user mode, without NFS //不支持NFS功能

3:multi user mode, text mode     //字符界面

4reserved   //系统保留

5:multi user mode, graphic mode   //图形化界面

6:reboot   //重启

/etc/inittab格式及语法(:)

[选项]:[runlevel]:[行为]:[命令]

行为

initdefault代表默认运行级别

sysinit代表系统初始化操作选项

ctrlaltdel代表重启的相关设置

wait代表上一个命令执行结束后方可执行下面的操作

respawn代表后面字段可以无限制再生(reboot)

命令选项

一些命令不过通常都是脚本

7.init进程执行rc.sysinit

在设定了运行等级后linux系统执行的第一个用户层文件就是/etc/rc.d/rc.sysinit脚本程序它做的工作非常多包括设定PATH、设定网络配置(/etc/sysconfig/network)、启动swap分区、设定/proc等等。线程init的最终完成状态是能够使得一般的用户程序可以正常地被执行从而真正完成可供应用程序运行的系统环境。它主要进行的操作有

  1. 1.  执行函数do_basic_setup(),它会对外部设备进行全面地初始化。
  2. 2.  构建系统的虚拟文件系统目录树挂载系统中作为根目录的设备。
  3. 3.  打开设备/dev/console,并通过函数sys_dup()打开的连接复制两次是的文件号0,1,2全部指向控制台。这三个文件连接就是通常所说的“标准输入“stdin,”标准输出”stdout和”标准出错信息“stderr这三个标准I/0通道。
  4. 4.  准备好以上一切之后系统开始进入用户层的初始化阶段。内核通过系统调用execve()加载执行相应的用户层初始化程序一次尝试加载程序”/sbin/initl”,”/sbin/init”和“/bin/sh”。

只要其中有一个程序加载获得成功那么系统就将开始用户层的初始化而不会再回到init()函数段中。至此init()函数结束Linux内核的引导部分也到此结束。

8.启动内核模块

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

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

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

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

系统已经进入到了等待用户输入username和password的时候了已经可以用自己的账号登入系统了到此为止linux系统启动全部完成。

时间: 2024-12-20 12:38:06

Linux系统开机启动流程介绍的相关文章

LINUX系统开机启动流程全解

1,linux系统6.0系列和7.0系列系统开机启动流程:简述:1,开机BIOS自检2,MBR引导(磁盘上的一个引导扇区512K)3,grub引导菜单(可进入单用户模式或者救援模式)4,加载Kernel内核5,启动init进程(6系列的第一个进程7系列的第一个进程是systemd6,读取initab启动文件执行rc.sysinit等开机启动脚本文件7,启动mingetty,启动系统登录界面 原文地址:https://blog.51cto.com/13858002/2429553

linux系统开机启动流程

1.加载BIOS,获取启动顺序,找到第一个启动设备 2.读取第一个启动设备MBR区域的信息,里面有GRUB引到程序 3.加载内核.驱动硬件,并且分配硬件资源 4.启动init进程 5.启动内核外的模块以及库,/etc/modeprobe.conf 6.init执行相应运行级别的scripts,并且加载rc.local 7.执行/bin/login程序,等待登录

0923------APUE 学习笔记----------Linux系统的启动流程

前言: 前天在看APUE的时候突然想到了这个问题,于是给自己科普一下Linux系统的启动流程. 1.加载BIOS 接通电源后,计算机首先加载BIOS(即Basic Input-Output System,该程序被固化在主板上的一个ROM芯片中,包括最基本的输入输出程序.系统设置程序.开机硬件自检程序和系统自举程序等),进行硬件自检(即Power On Self Test)检查计算机硬件是否满足运行的基本条件(对于非严重故障,会发出一些声音,严重故障则会直接退出),硬件自检完成以后,BIOS根据C

Linux系统开机启动时的工作原理

Linux系统开机启动时的工作原理也是深入了解Linux系统核心工作原理的一个很好的途径. 启动第一步--加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它.这是因为BIOS中包含了CPU的相关信息.设备启动顺序信息.硬盘信息.内存信息.时钟信息.PnP特性等等.在此之后,计算机心里就有谱了,知道应该去读取哪个硬件设备了.在BIOS将系统的控制权交给硬盘第一个扇区之后,就开始由Linux来控制系统了. 启动第二步--读取MB

Linux系统开机启动原理

我理解的linux系统开机顺序如下,如有分歧,可一起探讨. Linux系统开机启动的顺序是: BIOS自检,检查硬件,选择引导介质如光盘or硬盘orU盘等等. 进入bootloader,它是写在硬盘最前面的部分,大小是512字节.由446字节的mbr和64字节的DPT和2字节的返回码组成. bootloader会去读取/boot/grub/grub.conf,然后根据配置文件寻找/boot分区下面的内核文件vmlinuz.....及内核辅助文件initrd......以及加载根分区 读取/etc

linux系统开机启动过程

Linux系统开机过程 1:BIOS 通电自检 2:读取MBR 3:boot loader 4:加载内核 5:用户层init根据inittab文件来设定运行等级 6:init进程执行rc.sysinit 7:启动内核模块 8:执行不同运行级别的脚本程序 9:执行/etc/rc/d/rc.local 10:执行/bin/login 程序,进入登录状态.

[转] 浅谈Linux系统的启动流程

原文:http://blog.csdn.net/justdb/article/details/9621271 版权声明:本文为博主原创文章. Linux系统的启动时通过读取不同的配置文件,执行相应的Shell脚本完成的.当然本文只是简单的从文件的角度分析,更深层次的本文没涉及. 主要读取了以下文件: 1 /boot/grub/grub.conf 2 /etc/inittab 3 /etc/rc5.d(rc.d) 0-99 Seq 4 /etc/passwd (Login,input userna

Linux系统的启动流程以及做个小小的Linux

内核的作用     进程管理:进程间切换     内存管理:内存空间分割为内核空间和用户空间     IO管理:对底层硬件的使用必须由内来实现,不能由用户空间进程来实现     文件系统管理     驱动程序管理     安全管理:包括netfilter模块和selinux模块等 内核的设计模式     单内核:模块都是集成在内核内部(Linux是单内核)     微内核:模块都是独立的,随用随加载(Windows是微内核)     Ps:1.linux是单内核,但是广泛采用了微内核的设计思想

Linux系统详细启动流程

第一阶段:BOIS(Basic Input Output System)初始化,如图1 首先加载的是BIOS ,通过bios程序去加载CMOS(用来保存BIOS的硬件配置和用户对某些参数的设定(如日期.时间.启动设置等)的芯片,是主板上的一块可读写的并行或串行FLASH芯片,是)的信息.取得cmos中的信息后,BIOS开始开机自检(POST),然后执行硬件的初始化,并设定Pnp(即插即用,U盘等)设备,再定义可以开机的设备顺序,接下来就是读取开机设备的数据(就是第一个开机设备内的第0个扇区内的M