您的位置:

Linux系统启动过程解析:从BIOS到登录界面

一、BIOS启动阶段

在电脑开启的瞬间,计算机会首先加载主板上的BIOS固件,这部分程序负责硬件相关的初始化工作,比如检测内存、检测硬盘、检测显卡等。同时,BIOS还会从固定位置读取引导扇区(boot sector)的内容,将控制权交给引导扇区的程序,进入下一个阶段。

二、引导加载阶段

引导扇区中的程序通常是一个小型的引导加载程序(bootloader),最常见的引导加载程序是GRUB。引导程序首先会读取配置文件/grub/grub.cfg,这个文件包含了启动菜单和内核选项。

grub.cfg示例:

menuentry 'Ubuntu' {
    linux /vmlinuz-4.10.0-42-generic root=/dev/sda1 ro quiet splash
    initrd /initrd.img-4.10.0-42-generic
}

上面的示例中,menuentry定义了启动项的名称,linux行指定了内核文件的位置和内核启动参数,initrd行指定了初始内存盘(initrd)文件的位置,initrd里可以包含一些加载内核所必要的模块和设备驱动。

三、内核启动阶段

引导程序将控制权转交给内核,内核首先会进行硬件侦测,寻找所有可用的I/O设备,初始化中断、内存和各种驱动程序。

随后,内核会尝试挂载root文件系统,这个过程是通过读取fstab文件中的内容来完成的。

fstab示例:

/dev/sda1       /           ext4        errors=remount-ro 0       1
/dev/sda2       none        swap        sw                0       0

fstab文件中定义了已有的存储设备的挂载点。上面的实例定义了/dev/sda1作为根文件系统的挂载点,使用ext4文件系统,并启用错误日志、请求重新挂载等功能。

内核成功挂载文件系统后,会执行/sbin/init程序,这个程序是系统的初始化管理程序。

四、系统初始化阶段

初始化程序会启动各种守护进程和系统服务,比如控制台、网络、远程文件共享、系统日志等。这些服务会连接到本地或者远程的设备和网络,并开始提供各种服务。

最后系统加载登录管理器,等待用户登录。Linux系统中最常见的登录管理器是GDM和LightDM。

当用户输入用户名和密码后,系统开始启动用户的会话,并加载用户的首选项和设置。

五、总结

在Linux系统启动时,BIOS首先会启动并初始化硬件,然后将控制权交给引导扇区,引导程序会读取配置文件并引导内核启动。内核启动后会进行硬件侦测和文件系统挂载,接着会进入系统初始化阶段启动各种服务。最后启动登录管理器,等待用户登录。