Linux系统启动过程

Linux启动过程

前言:

  Linux是一种自由和开放源代码的类UNIX操作系统。该操作系统的内核由林纳斯·托瓦兹在1991年10月5日首次发布。在加上用户空间的应用程序之后,成为Linux操作系统。Linux是自由软件和开放源代码软件发展中最著名的例子。

  接触Linux的时间也不算短了,一直都是直接使用Linux操作系统进行一些工作,很少去了解系统从开机到能使用的整个过程,感觉有需要好好理解下整个系统的启动过程,故写这篇博客加深一下理解。

先通过一张图来简单了解下整个系统启动的流程,整个过程基本可以分为POST-->BIOS-->MBR(GRUB)-->Kernel-->Init-->Runlevel。下面会详细说明每个过程的作用。

图1-1:系统启动流程

BIOS

  BIOS(Basic Input/Output System),基本输入输出系统,该系统存储于主板的ROM芯片上,计算机在开机时,会最先读取该系统,然后会有一个加电自检过程,这个过程其实就是检查CPU和内存,计算机最基本的组成单元(控制器、运算器和存储器),还会检查其他硬件,若没有异常就开始加载BIOS程序到内存当中。详细的BIOS功能,这边就不说了,BIOS主要的一个功能就是存储了磁盘的启动顺序,BIOS会按照启动顺序去查找第一个磁盘头的MBR信息,并加载和执行MBR中的Bootloader程序,若第一个磁盘不存在MBR,则会继续查找第二个磁盘(PS:启动顺序可以在BIOS的界面中进行设置),一旦BootLoader程序被检测并加载内存中,BIOS就将控制权交接给了BootLoader程序。

MBR

  MBR(Master Boot Record),主引导记录,MBR存储于磁盘的头部,大小为512bytes,其中,446bytes用于存储BootLoader程序,64bytes用于存储分区表信息,最后2bytes用于MBR的有效性检查。

GRUB

  GRUB(Grand Unified Bootloader),多系统启动程序,其执行过程可分为三个步骤:

    Stage1:这个其实就是MBR,它的主要工作就是查找并加载第二段Bootloader程序(stage2),但系统在没启动时,MBR根本找不到文件系统,也就找不到stage2所存放的位置,因此,就有了stage1_5

    Stage1_5:该步骤就是为了识别文件系统

    Stage2:GRUB程序会根据/boot/grub/grub.conf文件查找Kernel的信息,然后开始加载Kernel程序,当Kernel程序被检测并在加载到内存中,GRUB就将控制权交接给了Kernel程序。

    PS:实际上这个步骤/boot还没被挂载,GRUB直接识别grub所在磁盘的文件系统,所以实际上应该是/grub/grub.conf文件,该配置文件的信息如下:

    grub.conf: 

    #boot=/dev/sda

    default=0        #设定默认启动的title的编号,从0开始

    timeout=5       #等待用户选择的超时时间

    splashimage=(hd0,0)/boot/grub/splash.xpm.gz    #GRUB的背景图片

    hiddenmenu     #隐藏菜单

    title CentOS (2.6.18-194.el5PAE)      #内核标题

        root (hd0,0)         #内核文件所在的设备

        kernel /vmlinuz-2.6.18-194.el5PAE ro root=LABEL=/     #内核文件路径以及传递给内核的参数

        initrd /initrd-2.6.18-194.el5PAE.img                            #ramdisk文件路径

 Kernel

  Kernel,内核,Kernel是Linux系统最主要的程序,实际上,Kernel的文件很小,只保留了最基本的模块,并以压缩的文件形式存储在硬盘中,当GRUB将Kernel读进内存,内存开始解压缩内核文件。讲内核启动,应该先讲下initrd这个文件,

  initrd(Initial RAM Disk),它在stage2这个步骤就被拷贝到了内存中,这个文件是在安装系统时产生的,是一个临时的根文件系统(rootfs)。因为Kernel为了精简,只保留了最基本的模块,因此,Kernel上并没有各种硬件的驱动程序,也就无法识rootfs所在的设备,故产生了initrd这个文件,该文件装载了必要的驱动模块,当Kernel启动时,可以从initrd文件中装载驱动模块,直到挂载真正的rootfs,然后将initrd从内存中移除。

  Kernel会以只读方式挂载根文件系统,当根文件系统被挂载后,开始装载第一个进程(用户空间的进程),执行/sbin/init,之后就将控制权交接给了init程序。

Init

  init,初始化,顾名思义,该程序就是进行OS初始化操作,实际上是根据/etc/inittab(定义了系统默认运行级别)设定的动作进行脚本的执行,第一个被执行的脚本为/etc/rc.d/rc.sysinit,这个是真正的OS初始化脚本,简单讲下这个脚本的任务(可以去看看实际脚本,看看都做了什么):

  1、激活udev和selinux;2、根据/etc/sysctl.conf文件,来设定内核参数;3、设定系统时钟;4、装载硬盘映射;5、启用交换分区;6、设置主机名;7、根文件系统检测,并以读写方式重新挂载根文件系统;8、激活RAID和LVM设备;9、启用磁盘配额;10、根据/etc/fstab,检查并挂载其他文件系统;11、清理过期的锁和PID文件

  执行完后,根据配置的启动级别,执行对应目录底下的脚本,最后执行/etc/rc.d/rc.local这个脚本,至此,系统启动完成。

  

Runlevel

  runlevel,运行级别,不同的级别会启动的服务不一样,init会根据定义的级别去执行相应目录下的脚本,Linux的启动级别分为以下几种

  0:关机模式

  1:单一用户模式(直接以管理员身份进入)

  2:多用户模式(无网络)

  3:多用户模式(命令行)

  4:保留

  5:多用户模式(图形界面)

  6:重启

  在不同的运行级别下,/etc/rc.d/rc这个脚本会分别执行不同目录下的脚本

  • Run level 0 – /etc/rc.d/rc0.d/
  • Run level 1 – /etc/rc.d/rc1.d/
  • Run level 2 – /etc/rc.d/rc2.d/
  • Run level 3 – /etc/rc.d/rc3.d/
  • Run level 4 – /etc/rc.d/rc4.d/
  • Run level 5 – /etc/rc.d/rc5.d/
  • Run level 6 – /etc/rc.d/rc6.d/

  这些目录下的脚本只有K*和S*开头的文件,K开头的文件为开机需要执行关闭的服务,S开头的文件为开机需要执行开启的服务。

参考:

http://www.thegeekstuff.com/2011/02/linux-boot-process/

http://www.ibm.com/developerworks/library/l-linuxboot/

 
时间: 2024-10-13 01:00:22

Linux系统启动过程的相关文章

Linux系统启动过程详解

 Linux系统启动过程详解 启动第一步--加载BIOS当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它.这是因为BIOS中包含了CPU的相关信息.设备启动顺序信息.硬盘信息.内存信息.时钟信息.PnP特性等等.在此之后,计算机心里就有谱了,知道应该去读取哪个硬件设备了. 启动第二步--读取MBR众所周知,硬盘上第0磁道第一个扇区被称为MBR,也就是Master Boot Record,即主引导记录,它的大小是512字节,别看地方不大,

魏昊卿——《Linux内核分析》第三周作业:Linux系统启动过程

魏昊卿——<Linux内核分析>第三周作业:Linux系统启动过程 一.实验部分 实验指导 使用实验楼的虚拟机打开shell 1 cd LinuxKernel/ 2 qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img 内核启动完成后进入menu程序(<软件工程C编码实践篇>的课程项目),支持三个命令help.version和quit,您也可以添加更多的命令,对选修过<软件工程C编码实践篇>

为什么要有uboot?带你全面分析嵌入式linux系统启动过程中uboot的作用

1.为什么要有uboot 1.1.计算机系统的主要部件 (1)计算机系统就是以CPU为核心来运行的系统.典型的计算机系统有:PC机(台式机+笔记本).嵌入式设备(手机.平板电脑.游戏机).单片机(家用电器像电饭锅.空调) (2)计算机系统的组成部件非常多,不同的计算机系统组成部件也不同.但是所有的计算机系统运行时需要的主要核心部件都是3个东西: CPU + 外部存储器(Flash/硬盘) + 内部存储器(DDR SDRAM/SDRAM/SRAM) 1.2.PC机的启动过程 (1)部署:典型的PC

Linux系统启动过程介绍

Linux系统启动过程介绍 学习操作系统有必要了解一下系统的启动过程,这样在面对各种系统故障的时候能快速定位解决问题,下面以Centos来分析linux系统的启动过程. 1.BIOS自检:当开机的时候,系统进行bios自检工作,当识别出第一块硬盘(IDE SCSI)及其空间之后,系统控制将从BIOS传递到引导装载程序 2.引导装载程序(grub lilo):装载第一块硬盘的前512个字节的物理数据扇区即主引导区MBR到内存中,位于此扇区开始位置的引导装载程序将接管系统控制. (也可以这么理解,在

Linux系统启动过程,grub重装。

今天来了解下Linux的启动过程,以及内核的组成,让我们动手制作一个小linux. 启动过程: POST-----Bootloader(这里分为两段1.磁盘的前446字节,2./boot/grub)------kernerl--------挂载根文件系统为只读--------/sbin/init------inittab设定默认级别 -------/etc/init/rcS.conf--------/etc/rc.d/rc.sysinit 执行系统初始化脚本,启动和关闭默认级别的服务,重新挂载根

linux学习-Linux系统启动过程

linux系统启动过程 Linux系统的启动过程并不是大家想象中的那么复杂,其过程可以分为5个阶段: 内核的引导. 运行init. 系统初始化. 建立终端 . 用户登录系统. 内核引导 电源开机后,首先是BIOS内检,按照BIOS中设置的启动设备(通常是硬盘)来启动. 操作系统接管硬件后,首先读取/boot目录下的内核文件. 运行init init进程是所有进程的起点,你可以把它比拟成系统所有进程的老祖宗,没有这个进程,系统中任何进程都不会启动. init 程序首先是需要读取配置文件 /etc/

二、Linux 系统启动过程

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

linux系统启动过程具体解释-开机加电后发生了什么 --linux内核剖析(零)

本文參考了例如以下文章 深入理解linux启动过程 mbr (主引导记录(Master Boot Record)) 电脑从开机加电到操作系统main函数之前执行的过程 详细解释linux系统的启动过程及系统初始化 linux系统的启动流程 关于linux系统的启动流程我们能够按步进行划分为例如以下: BIOS POST自检 BIOS(Boot Sequence) 引导操作系统 载入对应引导上的MBR(bootloader) 主引导设置载入其BootLoader 载入操作系统 启动BIOS,准备实

Linux系统启动过程及其修复过程简析

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