Linux引导过程
1. BIOS引导
PC上电以后会引导BIOS,BIOS会对基本硬件设别的状态初始化,接着BIOS根据设置选择用于启动的设备,从设备中读取固定位置的代码。
磁盘设备从0磁道开始用一段空间放置启动代码,这就是Bootloader引导程序,也就是我们常说的grub。
2. 引导程序的引导
引导程序我们一般叫做BootLoader, 一般硬盘Linux系统中通常使用LILO或者Grub,Iso镜像中会使用IsoLinux, PXE中使用PXELinux,在Windows系统我们的Bootloader一般为syslinux。
引导程序会加载内核以及镜像文件,之后Grub将执行权交给内核,内核开始启动。
3. Linux内核的启动过程
以下是需要了解Linux启动过程需要了解的知识点
根文件系统(rootfs)
内存磁盘 (RAM Disk)
内存文件系统 ( RAM File System )
辅助文件系统 (Initial RAM filesystem)
Linux内核的启动过程
Linux内核启动分为多种方式
总的流程是接近的,都需要首先软硬件初始化,然后检查是否有辅助系统需要被载入
(1) 未载入辅助系统
启动器传给内核的root参数进行设备检测,找到设备以后内核尝试使用当前支持的文件系统将设备挂载到根文件系统(rootfs),如果挂载成功,内核运行系统中的/sbin/init命令,完成内核的启动过程。没有指定,内核根据探测到的可用设备来顺序挂载。
(2) 载入辅助系统
辅助文件系统分为两种,一种是initrd另外一种是initramfs, 一个是RAM Disk另一个是CPIO。
<1> initrd
内核判断real-root-dev取值,根据real-root-dev取值有三种选择0, 与/dev/ram0设备号相同,与dev/ram0设备号不同
0: 无法启动
与/dev/ram0设备号相同:直接运行根系统中的/sbin/init
与/dev/ram0设备号不同:挂载文件系统到根文件系统,然后/sbin/init
<2>initramfs(squashfs)
直接把文件解压到根文件系统,就是最终系统。