浅解Linux的启动流程

  • 加载BIOS(Basic Input and Output System)

系统在刚开机时须完成自举,而在硬件内有一个固化的指令能完成这一点。它能在开机时自动将某个硬件的内容装载进内存,将BIOS程序映射进CPU可以查找的线性地址空间或物理地址空间,而内存的ROM中的指令信息的第一段主要完成系统硬件健康状况检查,例如有无显卡,显卡是否正常,有无内存设备,CPU风扇能否运转等。若检查通过,BOIS运行时按照CMOS(保存计算机基本启动信息的芯片,是BIOS上一块可读写的并行或串行的flash芯片,用来保存计算机硬件配置和用户对默写参数的设置)设置的顺序来搜索处于活跃状态并可以引导的设备:可以是软盘,硬盘上的某个分区,网络上的某个设备,甚至为USB闪存。通常,Linux从硬盘引导,其中主引导记录MBR(Master Boot Record)包含了主引导加载程序。MBR是一个512字节大小的扇区,位于磁盘上的第一个扇区中(0道0柱面1扇区),当MBR被加载到RAM中后,BIOS就会将控制权交给MBR。

  • 读取MBR

主引导记录存放了系统预启动信息,分区表信息。系统找到了BIOS所指定的硬盘的MBR后,会将其复制到物理内存中,即Boot Loader。(Boot Loader分为grub,lilo,spfdisk等)

  • Boot Loader

Boot Loader是在内核运行之前运行的一段小程序,是计算机启动过程中运行的第一个真正的软件,负责加载启动硬盘分区中的操作系统。通常每个操作系统在安装过程中都要将自带的启动引导器写入硬盘,以便能够进行自身的引导。

Boot Loader可以初始化硬件设备,建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,为最终调用操作系统内核做好一切准备。

  • 加载内核

根据grub设定的内核映像所在路径,系统读取内核映像,并进行解压缩操作。当内存映像被加载到内存之后,内核阶段开始。内核映像并不是一个可执行的内核,而是一个压缩过的内核映像。在这个内核映像前面是一个例程,它实现少量硬件设置,并对内核映像中包含的内核进行解压,然后将其放入高端内存中。如果有初始RAM磁盘映像,就会将它移到内存中并标以后使用。接下来该例程会调用start-kernel()函数,启动一系列的初始化函数并初始化各种设备,完成Linux核心环境的建立。至此,Linux内核已经建立起来了。

  • init进程执行

init进程是系统所有进程的起点,内核在完成核内引导后,即在本线程(进程)空间内加载init进程,进程号是1。init进程是所有进程的发起者和控制者。在Linux中,它是第一个运行的进程,所以init进程的编号为1。如果init进程出现问题,系统的其余部分也不可用。

init进程有2个作用:一,扮演父进程的角色。由于init进程永远不会终止,若某个进程在它衍生出来的子进程终止前被终止,就会出现必须以init进程为参照的情况,即失去父进程的子进程都会以init作为它们的父进程。二,在进入某个特定运行级别时运行相应的程序,以此对各种运行级别进行管理。

Linux的运行级别有如下7种:

0:关机

1:单用户模式

2:无网络支持的多用户模式

3:有网络支持的多用户模式

4:保留,未使用

5:有网络支持,有x—window支持的多用户模式

6:重启

  • init进程执行rc.sysinit

在设定了运行等级后,Linux执行的第一个用户层文件就是/etc/rc.d/rc.sysinit脚本程序,包括设定PATH,设定网络配置(/etc/sysconfig/network),启动swap分区,设定/proc等。


  • 启动内核模块

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

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

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


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

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

  • 执行/bin/login程序,进入登录状态。

此时,系统已经进入到等待用户输入username和password的时候了。

时间: 2024-11-29 06:01:45

浅解Linux的启动流程的相关文章

Linux 的启动流程

作者: 阮一峰 半年前,我写了<计算机是如何启动的?>,探讨BIOS和主引导记录的作用. 那篇文章不涉及操作系统,只与主板的板载程序有关.今天,我想接着往下写,探讨操作系统接管硬件以后发生的事情,也就是操作系统的启动流程. 这个部分比较有意思.因为在BIOS阶段,计算机的行为基本上被写死了,程序员可以做的事情并不多:但是,一旦进入操作系统,程序员几乎可以定制所有方面.所以,这个部分与程序员的关系更密切. 我主要关心的是Linux操作系统,它是目前服务器端的主流操作系统.下面的内容针对的是Deb

Linux的启动流程(CentOS 6)

前言 Linux启动的过程在实际生产中有着至关重要的作用.试想一下,如果我们在实际生产中服务器因为某一个服务出了问题,而不能启动,这时我们应该怎么办.如果我们了解Linux的详细启动过程,知道是在哪一个环节出了问题,我们就能够进入到相应的环节,排除掉相应的问题,从而解决实际生产中的问题. 同时,我们在这里提出一个问题,有谁知道Windows的启动过程呢?如果启动过程出了问题,我们该怎么办呢?恐怕答案只有重启系统了吧-- Linux 系统的启动过程对于管理员来说是完全透明的,了解了Linux的启动

linux --&gt; Linux 的启动流程

Linux 的启动流程 操作系统接管硬件以后发生的事情,也就是操作系统的启动流程. 因为在BIOS阶段,计算机的行为基本上被写死了,程序员可以做的事情并不多:但一旦进入操作系统,程序员几乎可以定制所有方面.所以,这个部分与程序员的关系更密切,下面的内容针对的是Debian发行版. 第一步.加载内核 操作系统接管硬件以后,首先读入 /boot 目录下的内核文件. 以我的电脑为例,/boot 目录下面大概是这样一些文件: $ ls /boot config-3.2.0-3-amd64 config-

Linux的启动流程,回答面试官自用

对于Linux的启动流程,是一个很复杂的过程 下面我来介绍一下: 1.当我们按下电源键通电后,我们的BIOS①会去检查硬件(CPU.显卡.硬盘.光驱等等)是否有问题,取得主机的各项硬件配置后,就会去找启动设备,这里说的就是硬盘,找到硬盘的MBR②,这时候就将控制权交到MBR中 2.MBR的功能就是去找到安装在MBR的grub③菜单,也就是Boot loader,随后grub就把系统的kernel(内核)给引导出来了 3.当boot loader读取到kernel文件后,会将内核加载到内存中,此时

Linux的启动流程(CentOS 7)

前言 Linux启动的过程在实际生产中有着至关重要的作用.试想一下,如果我们在实际生产中服务器因为某一个服务出了问题,而不能启动,这时我们应该怎么办.如果我们了解Linux的详细启动过程,知道是在哪一个环节出了问题,我们就能够进入到相应的环节,排除掉相应的问题,从而解决实际生产中的问题. 同时,我们在这里提出一个问题,有谁知道Windows的启动过程呢?如果启动过程出了问题,我们该怎么办呢?恐怕答案只有重启系统了吧-- Linux 系统的启动过程对于管理员来说是完全透明的,了解了Linux的启动

I.MX6 Linux Qt 启动流程跟踪

/************************************************************************** * I.MX6 Linux Qt 启动流程跟踪 * 声明: * 1. 源代码来源MY-I.MX6: * 2. 本文仅仅是对启动流程的解析,没有解释启动流程为什么是这样的问题. * * 2015-6-13 深圳 晴 南山平山村 曾剑锋 *********************************************************

【转】Linux 的启动流程

原文网址:http://www.ruanyifeng.com/blog/2013/08/linux_boot_process.html Linux 的启动流程 作者: 阮一峰 半年前,我写了<计算机是如何启动的?>,探讨BIOS和主引导记录的作用. 那篇文章不涉及操作系统,只与主板的板载程序有关.今天,我想接着往下写,探讨操作系统接管硬件以后发生的事情,也就是操作系统的启动流程. 这个部分比较有意思.因为在BIOS阶段,计算机的行为基本上被写死了,程序员可以做的事情并不多:但是,一旦进入操作系

Linux的启动流程以及GRUB详解

 一.Linux引导和启动流程       概述,计算机电源接通后通过BISO之后,没有问题,就会去硬盘上找到MBR(Main Boot Record 主引导记录区)位于整个硬盘的0磁道0柱面1扇区,它记录着主引导记录中包含了硬盘的一系列参数和一段引导程序,其中的硬盘引导程序的主要作用是检查分区表是否正确并且在系统硬件完成自检以后引导具有激活标志的分区上的操作系统,并将控制权交给启动程序(GRUB).GRUB启动引导器是计算机启动过程中运行的第一个真正的软件,GRUB负责加载启动硬盘分区中的操作

Tiny4412 Linux 内核启动流程

Linux内核的启动分为压缩内核和非压缩内核两种,这里我们以压缩内核为例.压缩内核运行时,将运行一段解压缩程序,得到真正的内核镜像,然后跳转到内核镜像运行.此时,Linux进入非压缩内核入口,在非压缩内核入口中,完成各种初始化操作后跳转到C语言入口处运行.主要流程如下所示. 1.解压缩内核镜像 解压缩程序通常在arch/arm/boot/compressed/目录中 ├── atags_to_fdt.c ├── big-endian.S ├── decompress.c ├── head.S ├