Linux系统启动过程分析

    xiaoxiao2021-03-25  155

    参考学习网址:

    计算机的启动 - sdulibh的专栏 - 博客频道 - .NET http://blog.csdn.net/sdulibh/article/details/55106755

    Linux 系统启动过程分析 - 文章 - 伯乐在线

    http://blog.jobbole.com/106502/

    参考文献:

    http://www.cnblogs.com/scnutiger/archive/2009/09/30/1576795.htmlhttp://www.it.com.cn/f/edu/0411/24/51090.htmhttp://bbs.chinaunix.net/thread-2046548-1-1.htmlhttp://space.itpub.net/8111049/viewspace-680043http://dongdiy.blog.51cto.com/1908223/366909http://icarusli.iteye.com/blog/625755http://www.54sa.net/?p=549http://roclinux.cn/?p=1301

    linux启动流程

    [摘至鸟哥的linux私房菜] 今天看了linux启动相关的内容,把主要的部分记录如下。 linux的基础启动流程 1. 加载BIOS的硬件信息,并获取第一个启动设备的代号。 2. 读取第一个启动设备的MBR的引导加载程序(即lilo、grub、spfdisk等)的启动信息。 3. 加载操作系统的核心信息,核心开始解压,并尝试驱动所有的硬件设备。 4. 核心执行init程序并获得运行信息。 5. init执行/etc/rc.d/rc.sysinit文件。 6. 启动核心的外挂模块(/etc/modprobe.conf)。 7. init执行运行的各个批处理文件(Script) 8. init执行/etc/rc.d/rc.local文件。 9. 执行/bin/login程序,等待用户登录。 10. 登录之后开始以shell控制主机。

    学习内容:

    0 按下电源(power on)

    第一步:

    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),其结构图如下所示:(请参照网址原文)

    第三步:

    启动内核

    当stage2被载入内存执行时,它首先会去解析grub的配置文件/boot/grub/grub.conf,然后加载内核镜像到内存中,并将控制权转交给内核。而内核会立即初始化系统中各设备并做相关的配置工作,其中包括CPU、I/O、存储设备等。

    关于Linux的设备驱动程序的加载,有一部分驱动程序直接被编译进内核镜像中,另一部分驱动程序则是以模块的形式放在initrd(ramdisk)中。

    第四阶段:

    初始化系统

    接下来就是最后一步了:初始化系统。/sbin/init进程是系统其他所有进程的父进程,当它接管了系统的控制权先之后,它首先会去读取/etc/inittab文件来执行相应的脚本进行系统初始化,如设置键盘、字体,装载模块,设置网络等。

    转载请注明原文地址: https://ju.6miu.com/read-3301.html

    最新回复(0)