Linux系统启动过程介绍(1)

   概述

  对操作系统的启动过程一直是比较模糊,想想大概经历检查硬件,加载操作系统,加载

  用户环境等几个过程,但实际上要复杂一些。毕竟我们只是了解和掌握启动过程,而不是去

  对启动过程进行设计和编码,所以下面的介绍相对比较简单,也点到为止。如果有想深入学

  习的同学,可以针对某个或某几个部分刨根问题,编码调试。

  下面以Debian Linux的启动加载为例,简单介绍一下操作系统的启动。

  经历的过程如下:

  开机自检(POST)---->执行基本输入输出(BIOS)---->加载系统分区表数据(MBR开

  始的512字节)---->加载引导程序(grub之类)---->加载Linux内核----->系统环境初始化-----

  ------->用户环境初始化

  开机自检(POST)

  这部分没有什么多余的东西,计算机连上电源用户按下启动按钮后,计算机自己检测CPU,

  内存,硬盘等硬件设备是否处在可用状态。如果可以使用,继续下一步的工作,即将运行权

  交给BIOS,否则利用峰鸣器报警。这也是修理电脑的专家根据蜂鸣器报警声判断系统那里有

  问题的依据。

  执行基本输入输出(BIOS)

  BIOS(Basic Input Output System)基本输入输出程序。该程序完成最基本的硬件位置

  处理,设置硬中断等。然后将MBR最开始的程序调入到CPU上运行,运行权进而交给MBR。

  MBR加载

  MBR(Master boot record),是启动磁盘最开始的512字节,这里包含了分区信息和一

  个引导程序。分区信息记载了磁盘的分区情况,引导程序即是我们比较熟悉的Grub,LiLo等,

  用来指引从什么位置加载内核程序。

  引导程序加载Grub(GRand Unified Bootloader)

  Grub在配置的时候指定在什么分区的什么位置加载内核,Grub2以前的版本中grub都是

  有两个或者多个加载过程的,会去加载stage1,stage1_5,stage2文件,这些文件都在

  /boot/grub目录下。之所以会有这些文件,是因为在加载的早期,一次只能加载512字节,太

  多文件的话,只能分批加载。

  现在,在Grub2中已经找不到这个文件了,加载和引导的过程会另外介绍。

  内核加载过程

  由于在Grub中记录了内核的具体位置,在Grub运行完毕后,就开始加载内核,运行权限随

  之交给内核。

  内核接过运行权限,开始探测系统的硬件,加载硬件对应的驱动(有些以模块运行的驱动,

  是需要挂载文件系统才能加载),然后挂载文件系统,从文件系统中读取数据。

  这个过程的如下:

  内核探测硬件------>加载驱动(initrd)------>挂载根文件系统------>rootfs(/sbin/init)

  系统初始化工作

  最后运行权交给了/sbin/init程序,开始跑初始化的脚本内容。(待续)

时间: 2024-11-01 10:05:57

Linux系统启动过程介绍(1)的相关文章

剖析Linux系统启动过程_unix linux

    内容提要 本文以RedHat9.0和i386平台为例,剖析了从用户打开电源直到屏幕出现命令行提示符的整个Linux启动过程.并且介绍了启动中涉及到的各种文件. 阅读Linux源代码,无疑是深入学习Linux的最好方法.在本文对Linux启动过程的介绍中,我们也尝试从源代码的视角来更深入的剖析Linux的启动过程,所以其中也简单涉及到部分相关的Linux源代码,Linux启动这部分的源码主要使用的是C语言,也涉及到了少量的汇编.而启动过程中也执行了大量的shell(主要是bash shel

剖析Linux系统启动过程

内容提要 本文以RedHat9.0和i386平台为例,剖析了从用户打开电源直到屏幕出现命令行提示符的整个Linux启动过程.并且介绍了启动中涉及到的各种文件. 阅读Linux源代码,无疑是深入学习Linux的最好方法.在本文对Linux启动过程的介绍中,我们也尝试从源代码的视角来更深入的剖析Linux的启动过程,所以其中也简单涉及到部分相关的Linux源代码,Linux启动这部分的源码主要使用的是C语言,也涉及到了少量的汇编.而启动过程中也执行了大量的shell(主要是bash shell)所写

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

linux系统的启动流程 关于linux系统的启动流程我们可以按步进行划分为如下: BIOS POST自检 BIOS(Boot Sequence) 引导操作系统 加载对应引导上的MBR(bootloader) 主引导设置加载其BootLoader 加载操作系统 启动BIOS,准备实模式下的中断向量表和中断服务程序 电脑启动后,CPU逻辑电路被设计为只能运行内存中的程序,没有能力直接运行存在于软盘或硬盘中的操作系统,如果想要运行,必须要加载到内存(RAM)中. BIOS是如何启动的,CPU硬件逻辑

Linux操作系统启动过程详解

如果你对Linux操作系统有一定的了解,想对其更深层次的东西做进一步探究.这当中就包括系统的启动流程.文件系统的组成结构.基于动态库和静态库的程序在执行时的异同.协议栈的架构和原理.驱动程序的机制等等. 其中Linux操作系统启动过程肯定是大家最有兴趣了解的,这里在综合了现有网上大家智慧的基础上,基于2.6.32的内核的CentOS 6.0系统,对Linux的启动流程做了些分析,希望对大家有所帮助. OK,我们言归正传.对于一台安装了Linux系统的主机来说,当用户按下开机按钮时,一共要经历以下

Linux基础命令介绍十三:启动流程

固件(firmware)是指设备最底层的,让设备得以运行的程序代码.简单理解就是:固定在硬件上的软件.计算机中的许多设备都拥有固件(如硬盘.鼠标.光驱.U盘等),在计算机启动过程中,最先读取的就是位于主板上的固件,这个固件当前有两种类型:传统的BIOS和新的通用性更强的UEFI. 在上一篇中,我们提到另一种磁盘分区格式GTP也是UEFI标准的一部分.于是,当前计算机启动中,出现了两种不同的方式:BIOS/MBR和UEFI/GTP. 在linux操作系统的世界中,同样在经历着变革,系统初始化软件s

Linux系统启动流程详解

那篇文章不涉及操作系统,只与主板的板载程序有关.今天,我想接着往下写,探讨操作系统接管硬件以后发生的事情,也就是操作系统的启动流程. 这个部分比较有意思.因为在BIOS阶段,计算机的行为基本上被写死了,程序员可以做的事情并不多:但是,一旦进入操作系统,程序员几乎可以定制所有方面.所以,这个部分与程序员的关系更密切. 我主要关心的是Linux操作系统,它是目前服务器端的主流操作系统.下面的内容针对的是Debian发行版,因为我对其他发行版不够熟悉. 第一步.加载内核 操作系统接管硬件以后,首先读入

Android系统启动过程【转】

转自:http://www.cnblogs.com/bastard/archive/2012/08/28/2660389.html Android系统启动过程 首先Android框架架构图:(来自网上,我觉得这张图看起来很清晰) Linux内核启动之后就到Android Init进程,进而启动Android相关的服务和应用. 启动的过程如下图所示:(图片来自网上,后面有地址)   下面将从Android4.0源码中,和网络达人对此的总结中,对此过程加以学习了解和总结, 以下学习过程中代码片段中均

Linux基础命令介绍十五:推陈出新

本文介绍ip.ss.journalctl和firewall-cmd,它们旨在代替linux中原有的一些命令或服务. 1.ip ip [OPTIONS] OBJECT COMMAND  ip是iproute2软件包里面的一个强大的网络配置工具,它能够替代一些传统的网络管理工具,例如ifconfig.route等,使用权限为超级用户. OPTIONS是修改ip行为或改变其输出的选项. OBJECT是要获取信息的对象.包括: address   表示设备的协议(IPv4或IPv6)地址  link  

《嵌入式 Linux应用程序开发标准教程(第2版)》——2.2 Linux启动过程详解

2.2 Linux启动过程详解 嵌入式 Linux应用程序开发标准教程(第2版) 在了解了Linux的常见命令之后,下面详细讲解Linux的启动过程.Linux的启动过程包含了Linux工作原理的精髓,而且在嵌入式开发过程中非常需要这方面的知识. 2.2.1 概述 用户开机启动Linux过程如下: (1)当用户打开PC(intel CPU)的电源时,CPU将自动进入实模式,并从地址0xFFFF0000开始自动执行程序代码,这个地址通常是ROM-BIOS中的地址.这时BIOS进行开机自检,并按BI