您的位置:

Linux内核启动流程解析

一、预备知识

在深入分析Linux内核启动流程之前,需要先了解一些预备知识。

1. Linux的引导程序通常被称为boot loader,其中最常用的boot loader是GRUB(Grand Unified Bootloader)。在系统启动时,BIOS会先读取启动盘上的MBR(Master Boot Record)并将控制权传递给该MBR,MBR再加载boot loader,boot loader再加载内核。

2. Linux内核引导的参数可以通过boot loader来设置。例如,可以通过在GRUB的配置文件中指定boot loader选项来为内核引导指定参数。

3. Linux内核支持模块化,内核启动时只加载必需的模块,其他模块可以在需要时动态加载。

二、内核启动流程

Linux内核启动过程分为6个主要步骤:

1. 引导启动加载

当计算机启动时,操作系统内核被加载并运行。在Linux系统中,引导程序通常是GRUB。

GRUB的主要任务是加载内核并启动系统。GRUB会查找内核文件并加载,然后将控制权传递给内核。


/boot/grub/grub.cfg文件示例:
menuentry 'Ubuntu' {
   set root=(hd0,msdos1)
   linux /vmlinuz-4.15.0-20-generic root=/dev/sda1
   initrd /initrd.img-4.15.0-20-generic
}

在上述示例中,指定了Linux内核文件和root分区。initrd指定该系统使用哪个ramdisk文件。

2. 内核初始化

当内核启动时,系统会进行以下操作:

1. 初始化虚拟内存和物理内存管理。

2. 扫描PCI总线上所有的设备,为它们分配I/O地址和中断向量,并为它们建立虚拟文件系统中的设备节点。

3. 初始化文件系统。在Linux系统中,系统文件就是一种特殊的文件,也需要通过文件系统进行管理。

4. 初始化网络和TCP/IP协议栈。

3. 运行init程序

当内核初始化完成后,会运行init程序。init程序是所有Linux进程的祖先进程。

init程序会读取/etc/inittab文件,并按照该文件中指定的运行级别来启动对应级别的应用程序。例如,如果运行级别为3,则会启动多个系统级别的服务程序,包括系统日志服务等。

4. 运行系统服务

在启动时,Linux系统会启动多个系统级别的服务程序。这些服务程序在运行级别中定义,通常包括网络、文件、打印、安全等服务。

这些服务程序设置了许多参数和环境变量。例如,网络服务程序设置了IP地址和路由表。

5. 运行用户空间程序

当系统级别的服务程序初始化完成后,会启动用户级别的服务程序和应用程序。用户级别的服务程序包括SSH服务、Web服务等,应用程序包括文本编辑器、邮件客户端等。

6. 登录系统

当所有用户级别的服务程序和应用程序启动完成后,系统处于就绪状态,可以等待用户登录。

用户登录可通过字符终端或图形界面完成。Linux系统支持多用户登录,每个用户都有自己的配置文件和环境变量。

三、总结

本文简要介绍了Linux内核启动的流程。在这个过程中,大量的细节需要被处理,例如内存管理和文件系统安装。Linux系统支持多种运行级别,可保证在不同的环境下配置所需的服务,适用于各种不同类型的用户。