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