[ 总结 ] Linux系统启动流程

Linux系统启动过程分析:

  按下电源 --> BIOS自检 --> 系统引导(lilo/grub) --> 启动内核 --> 初始化系统 --> 用户登录

1. BIOS自检:

BIOS(basic input/output system), 又称基本输入输出系统,可以视为永久的记录在ROM中的一个软件,是操作系统输入输出管理的一部分。
    BIOS的功能分为两种:POST码和Runtime服务。POST阶段完成后它将从存储器中被清除,而Runtime服务会一直保留,用于目标操作系统的启动
    BIOS两个阶段所做的详细工作如下:
        (1)上电自检POST(power-on self test), 主要负责检测外围关键设备是否正常工作。例如:最常见的是内存松动,BIOS自检阶段就会报错。
        (2)步骤1成功后,便会执行一段小程序用来枚举本地设备并对其初始化。这一步主要是根据我们在BIOS中设置的系统启动顺序来搜索用于启动系统的驱动器,
        如:硬盘、光盘、U盘、软盘和网络等。
        以硬盘为例:BIOS此时去读取硬盘的第一个扇区(MBR 512字节),然后执行里面的代码。实际上这里BIOS不管第一个扇区里面是什么内容,它只是负责读取该扇区内容并执行。
        至此,BIOS的任务就完成了,此后将系统启动的控制权移交MBR部分代码。

2. 系统引导:
    MBR(master boot record): 磁盘的0柱面、0磁头、1扇区称为主引导扇区。它由三个部分组成:主引导程序(bootloader)、硬盘分区表DPT、硬盘有效标志
    通常情况下,诸如:lilo/grub 这些常见的引导程序都直接安装在MBR的bootloader中。
    
    grub引导也分为两个阶段stage1和stage2
        stage1是直接写入到MBR的bootloader中的,机器启动完,就将控制权交给了bootloader, bootloader中就存放着stage1的代码,它的任务很单纯,仅仅是将硬盘0头0道2扇区
        读入内存。而0头0道2扇区内容是源代码中的/stage2/start.S编译后的512字节,stage1是没有识别文件系统能力的。

3. 启动内核:
    当stage2被载入内存执行,首先会去解析/boot/grub/grub.conf,然后加载内核镜像到内存中,并将控制权转交给内核。而内核会立即初始化系统中各个设备并做相关配置
    关于Linux设备驱动程序的加载,一部分是直接编译进内核,另一部分驱动程序则是以模块的形式放在initrd中。
    实际上Linux内核仅是包含基本的硬件驱动,在系统安装过程中会检测系统硬件信息,根据安装信息和系统硬件信息将一部分设备驱动写入initrd,这样在以后启动系统时,一部分
    设备驱动就放在initrd中来加载。
    另一个概念:initramfs 当内核启动时,内核将这个cpio包解开,并且将其中包含的文件系统释放到rootfs中。内核中的一部分初始化代码会放到这个文件系统中,作为用户层进程来执行,
    这样带来的明显好处是精简了内核初始化代码,而且使得内核的初始化过程更容易制定。
    
    grub的stage2将initrd加载到内存里,然后将其中的内容释放到内存中,内核便去执行initrd中的init脚本,这时内核将控制权交给了init文件处理。init主要是加载各种存储介质相关的设备驱动程序,
    当所需的驱动程序加载完毕后,会创建一个根设备,然后将根文件系统以只读的方式挂载。到这一步,initrd就从内存中释放掉,转换到真正的根文件系统上面去,同时运行/sbin/init程序,执行
    系统的1号进程。此后系统的控制权就全权交给了/sbin/init进程。

4. 初始化系统:

/sbin/init --> /etc/inittab --> /etc/rc.d/rc.sysinit --> /etc/rc.d/* --> /etc/rc.local --> login界面(username/passwd) --> /etc/profile.d/file --> /etc/profile
                                            |
                                            |-->/etc/sysctl.conf
                                            |--> /etc/fstab
                                            
    --> /etc/bashrc --> ~/.bashrc --> ~/.bash_profile

/sbin/init是所有进程的父进程,当它接管了系统的控制权之后:
        (1) 它首先会去读取/etc/inittab文件来执行相应的脚本进行系统的初始化,如:设置键盘,字体,装载模块,配置网络。
        (2) 获取网络环境和主机类型。首先会读取网络环境配置文件‘/etc/sysconfig/network‘,获取主机名和默认网关等网络环境
        (3)    检测与载入内存设备/proc及USB设备/sys 除了/proc外,系统会主动检测是否有usb设备,并主动加载usb驱动,尝试挂载usb文件系统
        (4)    决定是否启动selinux
        (5)    接口设备的检测和即插即用参数的测试
        (6)    用户自定义模块的加载。用户可以在‘/etc/sysconfig/modules/*.modules‘ 加入自定义模块,此时会加载到系统中。
        (7)    加载核心相关的设置。按‘/etc/sysctl.conf‘这个文件的设置值配置功能。
        (8) 设置系统时间。
        (9) 设置终端控制台的字体。
        (10) 设置raid及LVM等硬盘功能
        (11) 以只读方式检测磁盘文件系统
        (12) 进行磁盘配额quota的转换
        (13) 重新以只读方式加入系统磁盘
        (14) 启动quota功能
        (15) 启动系统随机数设备
        (16) 清除启动过程中的临时文件。
        (17) 将启动信息加载到‘/var/log/dmesg‘文件中
    
    当/etc/rc.sysinit执行完毕,系统就可以顺利工作了。只是要需要启动系统所需的各种服务,这样主机才可以提供相关的网络和主机功能。

最后放一张图诠释启动过程:

时间: 2024-11-07 04:55:13

[ 总结 ] Linux系统启动流程的相关文章

Linux系统启动流程分析与关机流程

Linux 系统启动流程分析 Linux系统的启动过程并不是大家想象中的那么复杂,其过程可以分为5个阶段: 内核的引导. 运行 init. 系统初始化. 建立终端. 用户登录系统. init程序的类型: SysV: init, CentOS 5之前, 配置文件: /etc/inittab. Upstart: init,CentOS 6, 配置文件: /etc/inittab, /etc/init/*.conf. Systemd: systemd, CentOS 7,配置文件: /usr/lib/

Linux系统启动流程与内管管理(上)

在讲linux系统启动流程之前,来讲讲linux的组成,这样能能帮助我们深入了解系统的启动流程,废话不多说直接上系统启动流程图 linux组成 linux:kernel+rootfs kenrel的作用:进程管理.内存管理.网络管理.驱动程序.文件系统.安全管理等 rootfs:程序和glibc 库:函数结合,function,调用接口(头文件负责传输) 过程调用:procedure,无返回值 函数调用:function 程序:二进制执行文件 内核设计流派 单内核:把所有功能集成与一个程序 如:

Linux系统管理(二):Linux系统启动流程

Linux系统启动流程 从11月底报名马哥的Linux培训班,12月初真正开始学习,已经过去一个多月的时间了,从学习Linux的发展史开始.跟着学习命令行.文件系统挂载与管理.目录.Bash Shell的基本特性等等,Linux真的是博大精深,今天以CentOS 5,CentOS 6的启动过程进行一下简单的总结.由于才疏学浅,知识所限,有些地方分析不妥之处还请各位高手不吝赐教. 系统启动过程主要经过以下几个流程: POST>BootSequence(BIOS)>Bootloader(MBR)&

linux系统启动流程一览

加载BIOS的硬件信息并进行自检,然后根据设置取得第一个可启动的设备: 读取并执行第一个启动设备内MBR(master boot record,主引导分区)的boot loader: 依据bootloader的设置加载kernel,kernel开始检测硬件和加载驱动程序: 在硬件驱动成功后,kernel会调用init进程,init进程会取得run-level信息: init执行/etc/rc.d/sysinit文件来准备软件执行的操作环境: init执行run-level的各个服务: init执

【转载】Linux系统启动流程

原文:Linux系统启动流程 POST(Power On Self Test/上电自检)-->BootLoader(MBR)-->Kernel(硬件探测.加载驱动.挂载根文件系统./sbin/init) -->init(/etc/inittab:设定默认级别.系统初始化脚本.启动及关闭对应级别的服务.启动终端) 第1步 计算机电源接通后,CPU默认执行 0ffffh:0000h 处的指令(8086是这样,386应该类似),而此内存地址应该存放的就是 BIOS ROM .系统将有一个对内部

Linux系统启动流程、内核及模块管理

Linux系统启动流程.内核及模块管理 Linux系统的组成部分组成:内核+根文件系统(kernel+rootfs)内核(kernel): 进程管理(创建.调度.销毁等).内存管理.网络管理(网络协议栈).驱动程序.文件系统.安全功能IPC:Inter Process Communication机制本地进程间通信机制:消息队列.semerphor.shm(共享内存)跨主机进程间通信机制:socket等运行中的系统环境可分为两层:内核空间.用户空间内核空间(模式):内核代码(特权级操作-->系统调

linux基础-附件1 linux系统启动流程

附件1 linux系统启动流程 最初始阶段当我们打开计算机电源,计算机会自动从主板的BIOS(Basic Input/Output System)读取其中所存储的程序.这一程序通常知道一些直接连接在主板上的硬件(硬盘,网络接口,键盘,串口,并口).现在大部分的BIOS允许你从软盘.光盘或者硬盘中选择一个来启动计算机.下一步,计算机将从你所选择的存储设备中读取起始的512 bytes(比如光盘一开是的512 bytes,如果我们从光盘启动的话).这512 bytes叫做主引导记录MBR (mast

Linux系统启动流程及grub重建(1)

日志系统 Linux系统启动流程 PC: OS(Linux) POST-->BIOS(Boot Sequence)-->MBR(bootloader,446)-->Kernel-->initrd-->(ROOTFS)/sbin/init(/etc/inittab) 启动的服务不同:    运行级别:0-6        0:halt        1: single user mode, 直接以管理员身份切入, s,S,single        2:multi user m

Linux系统启动流程(4)制作自定义linux之一

Linux系统启动流程(4)制作自定义linux之一 平时使用的服务器类型的linux系统一般都会装载各种软件与服务,而在某些情况下,并不能一直直接使用公司管理的系统,一是可能会出现故障,二是在处理一些小问题下可能无需如此庞大的linux.于是根据前几篇所讲的linux中的Centos6版本的系统启动流程,可以对其仿制一个微型的linux系统,里面只添加以下需要的工具即可. 以CentOS6为模板为例: 1.准备环境:VM的操作 这里以VM虚拟机模拟,所有直接对安装了CentOS的虚拟机添加一个

Linux系统启动流程

一直以来对于电脑的开机过程概念还停留在按下开机键,然后等待自动开启.但是对于开启的这一过程几乎一无所知,包括它如何能够通电后自己启动包括内部的一系列的过程. 目前也只是对Linux系统的启动流程有了一个浅显的认识,但它启动的过程也想以自己的理解来分享一下. 一般Linux系统的开机过程有这么几个步骤: 按下电源键 BIOS自检 系统引导 Linux内核启动 初始化系统 登录系统 其中每个过程中又可细分为很多的子过程.按下电源键这一步自不必多说,我们从BIOS自检说起. BIOS自检 BIOS自检