大致过程
是不是使用linux系统的计算机过程中一直有一种想法,就是计算机究竟是怎么开启的?在学校学的早已抛诸脑后,一起回忆下吧,搬运了网上同仁们的理解,如有侵权请告知,必删。
先后顺序如下:
BIOS
BIOS(Basic Input/Output System),基本输入输出系统,开机先读取,进行加电自检,主要检查控制器、运算器、存储器等,无异常则加载
BIOS程序到内存,主要功能是存储了磁盘的启动顺序(可在BIOS界面修改),BIOS会按照启动顺序去查找第一个磁盘头的MBR信息,并加载和执行MBR中的Bootloader程序,若不存在则找下一个磁盘。
MBR
MBR(Master Boot Record),主引导记录,MBR存储于磁盘的头部,大小为512bytes,其中,446bytes用于存储BootLoader程序,64bytes用于存储分区表信息,最后2bytes用于MBR的有效性检查。接管控制权,加载GRUB。
GRUB
GRUB(Grand Unified Bootloader),多系统启动程序,其执行过程可分为三个步骤:
1.查找并加载第二段Bootloader程序(但系统在没启动时,MBR根本找不到文件系统)。
2.识别文件系统。
3.GRUB程序会根据/boot/grub/grub.conf文件查找Kernel的信息,然后开始加载Kernel程序,当Kernel程序被检测并在加载到内存中,GRUB就将控制权交接给了Kernel程序。
要点:实际上这个步骤/boot还没被挂载,GRUB直接识别grub所在磁盘的文件系统,所以实际上应该是/grub/grub.conf文件。
Kernel
Kernel,内核,Kernel是Linux系统最主要的程序,实际上,Kernel的文件很小,只保留了最基本的模块,并以压缩的文件形式存储在硬盘中,当GRUB将Kernel读进内存,内存开始解压缩内核文件。
通过挂载临时根目录initramfs加载核心模块(驱动程序…),然后卸载临时根目录,挂载真正的根目录。
启动systemd程序。
使用default.target进入开启流程(假设是multi-user.target)
执行sysinit.target初始化系统(检测硬件,载入所需的核心模组)、basic.target准备系统(载入硬件驱动和防火墙相关任务)
执行multi-user.target下面的服务(如果启动了/etc/rc.d/rc.local,则需要启动里面的命令)
执行multi-user.target下的/etc/rc.d/rc.local
启动tty
如果运行级别是graphical.target则会启动图形桌面