1、加载BIOS

BIOS根据“启动顺序”读取到0柱面0磁道1扇区的MBR(514字节)。

2、读取MBR(Master Boot Record)

主引导记录由三个部分组成:

(1) 第1-446字节:调用操作系统的机器码。

(2) 第447-510字节:分区表(Partition table)。

(3) 第511-512字节:主引导记录签名(0x55和0xAA)。

其中,第二部分"分区表"的作用,是将硬盘分成若干个区。

系统找到BIOS所指定的硬盘的MBR后,就会将其复制到0×7c00地址所在的物理内存中。其实被复制到物理内存的内容就是Boot Loader,具体到你的电脑就是grub等。

3、执行Boot Loader

Boot Loader 就是在操作系统内核运行之前运行的一段汇编小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图等,为加载操作系统内核做好准备。

4、加载内核

根据grub设定的内核映像所在路径,系统读取内存映像,并进行解压缩操作。

系统将解压后的内核放置在内存之中,并调用start_kernel()函数来启动一系列的初始化函数并初始化各种设备,完成Linux核心环境的建立。至此,Linux内核已经建立起来了,基于Linux的程序应该可以正常运行了。

在 start_kenrel()的结尾,内核通过kenrel_thread()创建出第一个系统内核线程(即1号进程),该线程执行的是内核中的init()函数,负责的是下一阶段的启动任务。最后调用cpues_idle()函数:进入了系统主循环体口默认将一直执行default_idle()函数中的指令,即CPU的halt指令,直到就绪队列中存在其他进程需要被调度时才会转向执行其他函数。此时,系统中唯一存在就绪状态的进程就是由kernel_thread()创建的init进程(内核线程),所以内核并不进入default_idle()函数,而是转向init()函数继续启动过程。

5、init进程依据inittab文件来设定运行等级runlevel

运行init()的程序便是/sbin/init,该程序会读取/etc/inittab文件,并依据此文件来进行初始化工作。

其实/etc/inittab文件最主要的作用就是设定Linux的运行等级,其设定形式是“id:5:initdefault:”,这就表明Linux需要运行在等级5上。Linux的运行等级设定如下:

  0:关机

  1:单用户模式

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

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

  4:保留,未使用

  5:有网络支持有X-Window支持的多用户模式

  6:重新引导系统,即重启

6、init进程执行rc.sysinit

在设定了运行等级后,Linux系统执行的第一个用户层文件就是/etc/rc.d/rc.sysinit脚本程序,它做的工作非常多,有:

(1)获取网络环境与主机类型。首先会读取网络环境设置文件"/etc/sysconfig/network",获取主机名称与默认网关等网络环境。
(2)测试与载入内存设备/proc及usb设备/sys。除了/proc外,系统会主动检测是否有usb设备,并主动加载usb驱动,尝试载入usb文件系统。
(3)决定是否启动SELinux。
(4)接口设备的检测与即插即用(pnp)参数的测试。
(5)用户自定义模块的加载。用户可以再"/etc/sysconfig/modules/*.modules"加入自定义的模块,此时会加载到系统中。
(6)加载核心的相关设置。又一个文件"/etc/sysctl.conf",按这个文件的设置值配置功能。
(7)设置系统时间(clock)。
(8)设置终端的控制台的字形。
(9)设置raid及LVM等硬盘功能。
(10)以方式查看检验磁盘文件系统。
(11)进行磁盘配额quota的转换。
(12)重新以读取模式载入系统磁盘。
(13)启动quota功能。
(14)启动系统随机数设备(产生随机数功能)。
(15)清楚启动过程中的临时文件。
(16)将启动信息加载到"/var/log/dmesg"文件中。

结束了inittab中的rc.sysinit之后,系统可以顺利工作了,只是还需要启动系统所需要的各种服务,这样主机才可以提供相关的网络和主机功能。因此根据之前设置的运行等级,会启动不同的服务项目。

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

根据运行级别的不同,系统会运行rc0.d到rc6.d中的相应的脚本程序,来完成相应的初始化工作和启动相应的服务。Linux将rc0.d到rc6.d目录里列出的程序,都设为链接文件,指向另外一个目录 /etc/init.d ,真正的启动脚本都统一放在这个目录中。init进程逐一加载开机启动程序,其实就是运行这个目录里的启动脚本。如果我们需要自己增加启动的内容,可以再init.d目录中增加相关的shell脚本,然后在rc*.d目录中建立链接文件指向该shell脚本。

8、执行/etc/rc.d/rc.local

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

9、执行/bin/login程序,进入登录状态

此时,系统已经进入到了等待用户输入username和password的时候了,你已经可以用自己的帐号登入系统了。

原文链接:https://blog.csdn.net/jmppok/article/details/53334488

linux系统启动过程(一)相关推荐

  1. linux系统启动过程(三)

    Linux 系统启动过程 linux启动时我们会看到许多启动信息. Linux系统的启动过程并不是大家想象中的那么复杂,其过程可以分为5个阶段: 内核的引导. 运行 init. 系统初始化. 建立终端 ...

  2. 【Notes9】Linux系统启动过程,数据库,驱动,i2c-tools,shell

    文章目录 1.Linux系统启动过程:ukr,ubuntu开机引导文件/etc/default/grub 2.数据库:存储过程(PL/SQL代码集,像没有返回值的自定义函数)和函数需要用户显示调用才执 ...

  3. Linux 系统启动过程

    简介 Linux 系统启动过程大致分为5个阶段: 1.内核的引导 2.运行 init. 3.系统初始化 4.建立终端 5.用户登录系统 内核引导 计算机通电后,首先会进行 BIOS 开机自检,然后根据 ...

  4. 嵌入式Linux系统启动过程

    一个嵌入式 Linux 系统从软件角度看可以分为四个部分:引导加载程序(Bootloader), Linux 内核,文件系统,应用程序. 当系统首次引导时,或系统被重置时,处理器会执行一个位于Flas ...

  5. linux efi 启动原理,Linux系统启动过程

    了解Linux系统的启动过程有助于我们深入理解Linux系统运行原理,下面我们将介绍一些系统启动过程中一些重要的细节.在这里,我们将Linux系统启动过程分成7个步骤介绍,这个过程如下图所示. 1.启 ...

  6. Linux运维系列总结-Linux系统启动过程、WEB工作原理、DHCP工作原理、DNS解析原理、NFS网络文件系统、FTP文件传输协议、PXE+KICKSTART自动安装系统

    Linux运维系列总结-Linux系统启动过程.WEB工作原理.DHCP工作原理.DNS解析原理.NFS网络文件系统.FTP文件传输协议.PXE+KICKSTART自动安装系统 1.Linux系统的启 ...

  7. linux系统的启动过程 5个步骤,第5章 Linux系统启动过程.ppt

    <第5章 Linux系统启动过程.ppt>由会员分享,可在线阅读,更多相关<第5章 Linux系统启动过程.ppt(26页珍藏版)>请在人人文库网上搜索. 1.第5章 Linu ...

  8. Linux系统启动过程

    Linux系统启动过程 从启动电源到BIOS 关于BIOS 1. BIOS 是什么 2. BIOS 存储的信息 3. BIOS 需要在内存中加载中断向量表和中断服务程序 一.启动BIOS ,准备实模式 ...

  9. 剖析Linux系统启动过程

    http://www.5dmail.net/html/2004-11-29/20041129102711.htm 内容提要 本文以RedHat9.0和i386平台为例,剖析了从用户打开电源直到屏幕出现 ...

  10. Linux系统启动过程详解

    目录 linux系统启动详细过程 内核引导 启动init程序进入初始化阶段 init程序的类型 系统初始化 建立终端 用户登录 关机 linux系统启动详细过程 通电 bios初始化 grub2磁盘引 ...

最新文章

  1. Cesium - 转换obj模型为3D Tiles 并加载
  2. 内容提供器(Content-Provider)完整使用指南
  3. 摊牌了,我靠他实现了NLP模型使用入门
  4. 思科认证网络工程师CCNA(更新完毕)
  5. 用java做一个模拟彩票程序_JAVA模拟----- 彩票机子-----抽奖过程的实例化
  6. Android轮播图 banner,图片视频混播banner
  7. SQL Server 日志传送
  8. nginx的限流配置
  9. Redis积分排行榜设计与实现第二篇
  10. 深挖前端 JavaScript 知识点 —— 史上最全面、最详细的 Cookie 总结
  11. Aho-Corasick算法
  12. 我的天哪我有博客了!
  13. Go语言基础练习题系列5
  14. python与mongodb更新_Python对MongoDB增删改查
  15. NSGA-II算法介绍
  16. HTML 基础源代码
  17. win10系统如何配置web服务器,如何在windows10下搭建web服务器
  18. 【CSS】尺寸和边框、盒子模型、外边距_02
  19. 2021-07-04 【5】
  20. 朴素版Dijkstra算法

热门文章

  1. python面试题及答案-5个很好的Python面试题问题答案及分析
  2. 零基础python入门书籍-浅谈零基础自学python入门书
  3. python的用途实例-python assert的用处示例详解
  4. opencv python 图像去噪
  5. oa php mysql_PHP+MYSQL的OA为何没有Java的值钱?
  6. maven创建多模块项目
  7. strace,ltrace linux下跟踪进程调用的命令
  8. mysql的数据表操作
  9. springBoot使用PageHelper当超过最大页数后仍然返回数据
  10. 尚未整理【风控】互联网金融-构建评分卡模型部分知识点