揭秘Linux内核启动顺序全过程
linux内核启动顺序

首页 2024-12-11 11:23:57



Linux内核启动顺序的深度解析 在计算机领域中,Linux操作系统的启动过程是一个复杂而精细的过程,它涉及从硬件的初始化到软件系统的全面运行

    本文将详细解析Linux内核的启动顺序,带领读者深入理解这一过程中的各个环节

     一、启动前的准备 在计算机启动之前,电源按下之前,仅有两个关键组件在RTC(实时时钟)电源供电的情况下保持工作:RTC和CMOS

    RTC芯片保持机器内部的时钟,确保计算机在关机后重新启动时时间仍然准确

    CMOS则是一块可读写的RAM芯片,用于保存BIOS设置计算机硬件参数后的数据

     当外部ATX电源接入后,ATX电源使用+5VSB(Stand-By)电源唤醒一部分硬件,如南桥(系统IO芯片)和EC(嵌入式控制器、单片机)

    这些组件为开机做好准备,等待用户按下电源键

     二、BIOS/UEFI阶段 按下电源键后,EC接收到PWRSW信号,并向南桥发送PM_PWRBTN#信号

    南桥回应EC三个信号:SLP_S5#(退出S5关机状态)、SLP_S4#(退出S4休眠状态)、SLP_S3#(退出S3待机状态)

    ATX电源收到信号后开始工作,发出各路基本电压给主板上的各个元件

     BIOS(基本输入输出系统)或UEFI(统一可扩展固件接口)是计算机按下电源后最先被执行的程序

    它们位于主板上的ROM(只读存储器)中,负责进行硬件的初始化和自检(POST)

    BIOS阶段可用的内存地址空间非常有限,在x86系统中仅有1MB

    CPU执行的第一条指令位于ROM的地址范围内,该指令跳转到BIOS代码真正开始的地方,进行初始化工作

     三、Bootloader阶段 BIOS/UEFI自检成功后,将磁盘相对0道0扇区上的Bootloader装入内存

    在x86系统中,Bootloader通常位于磁盘的主扇区(MBR),负责从活动分区加载并运行系统引导程序

     Linux系统中常见的Bootloader有GRUB(GRand Unified Bootloader)、LILO(Linux Loader)和Syslinux等

    这些Bootloader根据配置文件(如GRUB的grub.cfg)加载压缩的内核映像(如vmlinuz)和可选的initrd/initramfs文件,并设置内核启动参数

     四、内核加载与解压 Bootloader将压缩的内核映像加载到内存中,并准备好内核启动所需的环境

    内核映像通常是一个gzip或其他格式压缩的二进制文件

    在内核映像的开头,有一个小的解压缩程序,负责解压内核的主体部分

     一旦内核映像被加载到内存,解压缩程序会运行并将压缩的内核映像解压到适当的内存位置

    解压完成后,