本文将对Linux系统的启动过程进行详细解析,以帮助读者更好地理解Linux系统的启动机制
一、硬件自检与引导加载 当计算机加电启动时,第一个执行的程序是BIOS(Basic Input/Output System)或UEFI(Unified Extensible Firmware Interface)
BIOS/UEFI负责硬件初始化、自检和加载固件驱动程序
在这一阶段,BIOS/UEFI会检查计算机的硬件设备,如RAM、硬盘、键盘、显卡等,以确保它们正常工作
完成自检后,BIOS/UEFI会寻找一个可引导的设备来加载操作系统
这个设备通常是硬盘,但也可以是光盘、USB设备等其他介质
BIOS/UEFI会读取硬盘的第一个扇区,即主引导记录(MBR),并从中加载引导程序
引导程序通常是GRUB(Grand Unified Bootloader)或LILO(Linux Loader),它们负责加载操作系统内核
二、GRUB引导与内核加载 GRUB是一个多操作系统引导程序,支持Linux、Windows等多种操作系统
在GRUB阶段,用户可以选择要启动的操作系统,并查看操作系统的引导菜单
如果计算机上安装了多个操作系统,GRUB会显示一个菜单,让用户选择要启动的操作系统
选定操作系统后,GRUB会加载该操作系统的内核
内核是操作系统的核心部分,负责管理硬件、内存、进程和文件系统
内核文件通常位于硬盘的/boot目录下,并以vmlinuz等名称命名
GRUB会将内核文件加载到内存中,并准备将其解压和执行
三、内核解压与硬件初始化 内核加载到内存后,会开始解压并初始化
内核的初始化过程包括硬件设备的检测、驱动程序的加载、内存管理的初始化、进程管理的初始化和文件系统的初始化
在硬件初始化阶段,内核会检测计算机上的硬件设备,并加载相应的驱动程序
这些驱动程序使操作系统能够控制硬件设备,如显卡、网卡、声卡等
驱动程序加载完成后,内核会初始化内存管理,为进程分配内存空间
进程管理的初始化包括创建第一个用户进程init
init进程是系统启动后第一个运行的进程,其进程编号为1
init进程负责初始化系统环境,并启动其他必要的服务和进程
四、系统初始化与运行级别 init进程启动后,会读取/etc/inittab文件,该文件定义了系统的运行级别和初始化脚本
运行级别是Linux系统的一个概念,用于确定系统启动时哪些服务应该启动或停止
Linux系统预置了七种运行级别,包括关机模式、单用户模式、多用户模式(无网络支持)、多用户模式(有网络支持)、保留模式、X-Windows多用户模式和重启模式
根据/etc/inittab文件中的设置,init进程会执行相应的初始化脚本
这些脚本位于/etc/rc.d/目录下,以rc.sysinit、rc.local等命名
rc.sysinit脚本负责设置系统环境,包括网络配置、文件系统挂载、设备驱动加载等
rc.local脚本则允许用户自定义启动项,如启动特定的服务或程序
在初始化脚本执行完成后,系统会根据运行级别启动相应的服务
这些服务包括网络服务、打印服务、用户登录服务等
服务的启动脚本通常位于/etc/init.d/目录下,以.sh命名
init进程会根据/etc/rc.d/目录下的符号链接来确定要启动哪些服务
这些符号链接以S或K开头,分别表示启动(start)和关闭(kill)服务
五、用户登录与终端启动 系统初始化完成后,Linux会启动终端或X-Window来等待用户登录
在文本模式下,系统会启动mingetty程序来提供登录界面
mingetty程序会监听特定的终端(如tty1、tty2等),并等待用户输入用户名和密码
用户登录后,系统会加载用户的shell环境,并允