Spr*_*dzy 6 linux grub kernel linux-kernel
我试图了解 Linux 启动过程,在阅读了相当多的文档后,有一点我似乎仍然无法理解。
所以基本是 BIOS -> Grub MBR -> Grub CONF -> Kernel ...
使用看起来像这样的 grub conf
title CentOS (2.6.32-358.2.1.el6.i686)
root (hd0,0)
kernel /vmlinuz-2.6.32-358.2.1.el6.i686 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD rd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=VolGroup/lv_root KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-358.2.1.el6.i686.img
Run Code Online (Sandbox Code Playgroud)
因此,根据我对文档 + 我阅读的帖子的理解,将加载内核 + 将 initramfs 挂载为根文件系统。然后 init 将被执行,它将负责做一堆各种各样的事情来启动和运行系统。
我的问题是:内核是如何加载的?
我的意思是因为内核在/boot/vmlinuz-2.6.32-358.2.1.el6.i686
我的设备 (hd0,0) 中,文件系统需要首先以某种方式挂载,以便可以访问它。
如果(我怀疑)Grub 挂载 hd0,0 分区,它是否首先使用 initramfs 执行 pivot_root,然后使用指定为内核参数的实际 root= fs 执行另一个 pivot_root ?
欢迎任何可以帮助我更好地理解这一切如何协同工作的解释/链接,
grub 所做的就是访问/boot
(只读就足够了,grub 在这里并不需要完整的文件系统处理),并从中获取相关文件。它将内核和 initramfs 加载到内存中,并将控制权交给新加载的内核。
然后,新加载的内核init
在 initramfs 中运行,最终pivot_root
完成/
。