本文描述linux系统开机过程,属于个人理解范畴,如果文中表述有误请大家批评指正!

计算机开机之后,首先要加载BIOS(基本输入输出系统)信息,BIOS包含了很多重要的信息,包括CPU信息,设备启动顺序信息,硬盘信息,内存信息,时钟信息等。

由BIOS进行POST(加电自检),然后依据BIOS内设置的引导顺序从硬盘、软盘或者CDROM中读入引导块。linux系统是从BIOS中的OxFFFFO处开始引导的。BIOS的第一个工作时POST,POST的工作就是对硬件进行检测。第二个工作是进行本地设备的枚举和初始化。

BIOS是由两部分组成:POST代码和运行时的服务。当POST完成之后就会被从内存中清理出来,但是BIOS运行时服务依然会保留在内存中。BIOS会按照设置中定义的顺序来搜索处于活动状态并且可以引导的设备。
引导设备可以是硬盘上的某个分区、CD-ROM、软盘、网络上的某个设备或者是USB设备。linux通常是从硬盘上进行引导的,其中主引分区MBR包含了主引导加载程序。当MBR加载到RAM中后,BIOS将控制权转交给MBR,MBR 又叫主引导扇区,是计算机开机后访问硬盘时必须要读取的首个扇区,位于0柱面,0磁道,1扇区。MBR的主引导程序是一个512字节的映像。前446字节是主引导加载程序,接下来的64个字节包含了分区表的信息,还有两个特殊的字节OxAA55用来检查MBR的有效性。
如果系统要想启动就必须启动内核,显然MBR是放不下内核的,但是MBR中有个小程序可以载入其他位置的内核,这个小程序就是boot loader 即GRUB。GRUB允许用户可以选择要启动的操作系统。GRUB包裹三个重要的文件,Stage1、Stage2、Stage1.5. Stage1通常放在MBR中,作用就是在系统启动时用于加载Stage2,并将控制权转交给它。Stage2就是GRUB的核心,所有的功能都由它完成。Stage1.5介于Stage1和Stage2之间,是他们之间的桥梁,因为Stage2较大,通常放在文件系统中,但是Stage1不能识别文件系统,Stage1.5来引导位于某个文件系统中的Stage2。Stage2是GRUB的核心但不是linux的核心,grub加载以后就是为了加载linux的内核,grub的配置

是通过/boot/grub/grub.conf来实现的。

接下来就要加载内核映像到内存中,内核映像是被zlib进行压缩过的,通常是一个zimage或者是bzimage,在映像前有一个例程可以实现少量的硬件设置,并对内核映像解压并将其放到内存中,之后该例程会调用内核,开始启动内核引导过程。内核启动后会向bios查询电脑的所有硬件信息,然后自己开始管理这些设备,以便提供给linux使用内核会尝试驱动这些设备,,这些设备的驱动一部分包含在内核中,叫做静态驱动,一部分放在文件系统中,由于此时还没有挂在任何文件系统,因此还不能使用,所以内核会尝试挂在根文件系统,根文件系统至少包含/etc、/bin、/boot、/lib、/dev5大目录,缺一不可,根文件系统挂在是以只读方式挂载,因为这是linux还在启动阶段,不稳定,避免破坏系统资料。

在内核完成引导后,就在本进程空间内加载init程序,进程号是1,init进程是所有进程的发起者和控制者,它是第一个运行的进程,init进程会根据/etc/inittab判断要进入的运行级别,然后直接执行/etc/rc.d/rc.sysinit进行系统初始化,并将启动的相关信息加载到/var/log/dmesg文件中。系统所有的服务启动之后在执行/etc/rc.d/rc.local脚本,将需要开机运行的程序启动。

linux系统开机过程描述的更多相关文章

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

    Linux系统开机启动时的工作原理也是深入了解Linux系统核心工作原理的一个很好的途径. 启动第一步--加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至 ...

  2. 红帽linux系统开机自启动脚本。

    其实很多东西在最后完成以后会觉得也就那样,有意思的是探究的过程. 前段时间老板要求把一个程序做成linux系统开机自启动脚本的模式. 首先你需要写一个脚本. 我这边建立了一个.sh的脚本,就是用脚本启 ...

  3. linux系统引导过程

    linux系统引导过程 linux-0.11引导时,将依次运行BIOS程序.bootsect.s.setup.s和head.s,完成引导过程后进入到main函数运行.BIOS完成硬件的检查与初始化等工 ...

  4. 原创:四种Linux系统开机启动项优命令超给力超详细详解

    老葵花哥哥又开课了 接下来是你们的齐天大圣孙悟空给你们带来的详细版Linux系统开机启动优化四种命令 第一种方法是很正常的 第二种有点难理解 第三种来自我的一个奇思妙想 本文档秉承 不要钱也不要臀部的 ...

  5. linux系统开机自动挂载光驱 和 fstab文件详解

    Linux 通过 UUID 在 fstab 中自动挂载分区 summerm6关注 2019.10.17 16:29:00字数 1,542阅读 607 https://xiexianbin.cn/lin ...

  6. Linux系统开机启动流程

    (来源学习Linux时,自己做的笔记) Linux系统有7个运行级别(runlevel)运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动运行级别1:单用户工作状态,root权限, ...

  7. Linux系统初始化过程及运行级别简介

    Linux开机过程: 1 开机自检(BIOS):初始化硬件,查找启动介质 2 MBR引导 3 GRUB引导菜单:GRUB程序安装在Bootloader 4 加载内核(kernel) 5 运行INIT进 ...

  8. Linux学习-开机过程的问题解决

    忘记 root 密码的解决之道 新版的 systemd 的管理机制中,默认的 rescue 模式是无法直接取得 root 权限的喔!还是得要 使用 root 的密码才能够登入 rescure 环境.没 ...

  9. 【Linux系统引导过程】

    *** 第一步 开机自检 根据主板BIOS中的启动顺序,移交系统控制权. 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它. 这是因为BIO ...

随机推荐

  1. android 25 跨进程启动activity

    跨进程启动activity,启动系统预定义的activity就是跨进程的. client项目启动server项目的activity. clientActivity.java package com.s ...

  2. JAVA大集合数据分批次进行切割处理

    今天遇到一个大集合里面的数据删除问题, 因为是一个大集合,如果同时传递到数据库,那么就会造成数据库压力 所以分批次的进行批量操作 其实 也可以采用多线程来处理或者多批次加多线程来处理都是可以的 下面的 ...

  3. [转] android 中 任务、进程和线程的区别

    PS: handler的目的是在组件进程中开辟一个线程作为消息的poller,收到消息后可以更新Activity中的控件(特殊的view) 任务.进程和线程     关于Android中的组件和应用, ...

  4. 四种数据持久化方式(下) :SQLite3 和 Core Data

    在上文,我们介绍了iOS开发中的其中2种数据持久化方式:属性列表.归档解档. 本节将继续介绍另外2种iOS持久化数据的方法:数据库 SQLite3.Core Data 的运用: 在本节,将通过对4个文 ...

  5. Java基础知识强化之集合框架笔记24:ArrayList存储自定义对象并遍历

    1. ArrayList存储自定义对象并遍历 2. 代码示例: Student.java,如下: package cn.itcast_01; public class Student { privat ...

  6. iOS 数据持久化(1):属性列表与对象归档

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css); @import url(/ ...

  7. hibernate之增删改查demo

    package dao; import java.util.ArrayList; import java.util.List; import org.hibernate.Query; import o ...

  8. C# 面向对象编程的继承性-多继承

    多继承 如果要使用多继承,需要使用接口,因为C#中的类只支持单继承,而接口支持多继承,实现多继承时,继承的多个接口中间用逗号(,)隔开. 说明: 实现多继承时,继承的可以是多个接口,也可以是一个类及多 ...

  9. 微软企业库Microsoft Enterprise Library的相关文章链接

    微软企业库4.1学习笔记 http://blog.csdn.net/anyqu/article/category/1228691/3 黄聪:Enterprise Library 5.0 系列教程 ww ...

  10. Deep Learning 学习随记(七)Convolution and Pooling --卷积和池化

    图像大小与参数个数: 前面几章都是针对小图像块处理的,这一章则是针对大图像进行处理的.两者在这的区别还是很明显的,小图像(如8*8,MINIST的28*28)可以采用全连接的方式(即输入层和隐含层直接 ...