[原创]Linux系统启动过程分析

本文详细剖析了Linux系统的启动流程,从BIOS自检、系统引导(包括GRUB的stage1、stage2阶段)到内核加载和初始化系统的过程。通过对BIOS的功能、GRUB引导的两个阶段以及内核如何加载驱动和执行初始化脚本的解释,揭示了Linux启动背后的机制。文章适合对系统启动感兴趣的读者深入理解。
摘要由CSDN通过智能技术生成

经过对Linux系统有了一定了解和熟悉后,想对其更深层次的东西做进一步探究。这当中就包括系统的启动流程、文件系统的组成结构、基于动态库和静态库的程序在执行时的异同、协议栈的架构和原理、驱动程序的机制等等。

       本人在综合了现有网上大家智慧的基础上,结合对2.6.32的内核代码的研读,基于CentOS 6.0系统对Linux的启动流程做了些分析。由于才疏学浅,知识所限,有些地方分析不妥之处还请各位高手不吝赐教。

        OK,我们言归正传。对于一台安装了Linux系统的主机来说,当用户按下开机按钮时,一共要经历以下几个过程,如图:


        其中,每个过程都执行了自己该做的初始化部分的事情,有些过程又可分为好几个子过程。接下来,我们就对每个阶段做一个详细分析和讲解。


  • BIOS自检


        稍有计算机基础的人都应该听过BIOS(Basic Input / Output System),又称基本输入输出系统,可以视为是一个永久地记录在ROM中的一个软件,是操作系统输入输出管理系统的一部分。早期的BIOS芯片确实是"只读"的,里面的内容是用一种烧录器写入的,一旦写入就不能更改,除非更换芯片。现在的主机板都使用一种叫Flash EPROM的芯片来存储系统BIOS,里面的内容可通过使用主板厂商提供的擦写程序擦除后重新写入,这样就给用户升级BIOS提供了极大的方便。

        BIOS的功能由两部分组成,分别是POST码和Runtime服务。POST阶段完成后它将从存储器中被清除,而Runtime服务会被一直保留,用于目标操作系统的启动。BIOS两个阶段所做的详细工作如下:

         步骤1:上电自检POST(Power-on self test),主要负责检测系统外围关键设备(如:CPU、内存、显卡、I/O、键盘鼠标等)是否正常。例如,最常见的是内存松动的情况,BIOS自检阶段会报错,系统就无法启动起来;

         步骤2:步骤1成功后,便会执行一段小程序用来枚举本地设备并对其初始化。这一步主要是根据我们在BIOS中设置的系统启动顺序来搜索用于启动系统的驱动器,如硬盘、光盘、U盘、软盘和网络等。我们以硬盘启动为例,BIOS此时去读取硬盘驱动器的第一个扇区(MBR,512字节),然后执行里面的代码。实际上这里BIOS并不关心启动设备第一个扇区中是什么内容,它只是负责读取该扇区内容、并执行。

至此,BIOS的任务就完成了,此后将系统启动的控制权移交到MBR部分的代码。

        PS: 在个人电脑中,Linux的启动是从0xFFFF0地址开始的。


  • 系统引导


      我们首先来了解一下MBR,它是Master Boot Record的缩写。硬盘的0柱面、0磁头、1扇区称为主引导扇区。它由三个部分组成,主引导程序(Bootloader)、 硬盘分区表DPT(Disk Partition table)和硬盘有效标志(55AA),其结构图如下所示:


        磁盘分区表包含以下三部分:

        1)、Partition ID  (5:延申  82:Swap   83:Linux   8e:LVM     fd:RAID)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值