Linux kernel 内核的引导顺序是什么?

Linux kernel 内核的引导顺序是什么?,linux-kernel,x86,boot,rootfs,Linux Kernel,X86,Boot,Rootfs,引导时,Linux内核是第一次加载到内存中,还是第一次加载根文件系统?我有这个疑问,因为压缩的内核映像通常位于/boot/vmlinuz中。因此,要访问内核映像,应该安装根文件系统。但是,由于根文件系统将驻留在存储器上,如何从存储器中读取它?Linux内核首先加载到内存中,还是根文件系统第一次加载到内存中? 首先,BIOS使用其内置例程加载引导加载程序(assumimg GRUB),从磁盘的MBR的初始512字节直接访问磁盘并执行它。代码被加载到RAM中并执行,这不需要任何文件系统理解,理想情况

引导时,Linux内核是第一次加载到内存中,还是第一次加载根文件系统?我有这个疑问,因为压缩的内核映像通常位于/boot/vmlinuz中。因此,要访问内核映像,应该安装根文件系统。但是,由于根文件系统将驻留在存储器上,如何从存储器中读取它?

Linux内核首先加载到内存中,还是根文件系统第一次加载到内存中?

首先,BIOS使用其内置例程加载引导加载程序(assumimg GRUB),从磁盘的
MBR
的初始512字节直接访问磁盘并执行它。代码被加载到RAM中并执行,这不需要任何文件系统理解,理想情况下它是一个原始代码。在下一个阶段,引导加载程序加载
/boot/grub/grub.cfg
文件并传递内容以供执行。下面是我的Linux GRUB配置

menuentry 'Ubuntu, with Linux 3.5.0-37-generic' --class ubuntu --class gnu-linux 
    --class gnu --class os {
    ...
    search --no-floppy --fs-uuid --set=root 925c0ccb-1532-4078-bee0-07acff8bc917
    linux   /vmlinuz-3.5.0-37-generic root=/dev/mapper/my_vg-root ro   quiet 
            splash $vt_handoff
    initrd  /initrd.img-3.5.0-37-generic
}
 Figure: 1


从上图:1中,引导加载程序搜索块Id号
925c0ccb-1532-4078-bee0-07acff8bc917
,它是我的引导设备
/dev/sda1
,并安装到
/boot
,如图所示。因此,在最后一个阶段,GRUB使用BIOS磁盘实用程序将在块设备(即
/boot
)下查看的Linux内核和initrd映像加载到RAM中。通常BIOS在处理器的实模式下运行,只能寻址限制在~1MB的内存字节数
2^20
。现在内核&initrd的重量超过1MB,将它们加载到RAM中,第一个内核加载到1MB,跳转到保护模式,将加载的内核传递到高内存,并释放第一个1MB的实模式。一旦内核处于运行状态,加载到RAM中的initramfs将找到它自己所在的文件系统的位置,并将其作为根
/
文件系统传递给内核


阅读文章了解更多信息。

请参阅。谢谢@JonathonReinhart。那个么,GRUB或LILO能够和存储交互并将initrd和内核映像文件加载到内存中吗?因此,基本上,它们可以与根文件系统交互,从根目录读取这些文件?“要访问内核映像,应安装根文件系统”——引导加载程序不必遵循正式的内核过程。它只是一个临时程序,执行快速而肮脏的操作。因此,文件系统(有时是原始设备)只是简单地读取,没有复杂的
mount
过程。“根文件系统”也是一个内核概念,而不是引导加载程序概念。引导加载程序正在从引导设备上的文件系统读取内核映像。不要求该引导设备或文件系统必须是内核的rootfs。
Linux:/boot/grub$ sudo blkid -U 925c0ccb-1532-4078-bee0-07acff8bc917
/dev/sda1
Linux:/boot/grub$ df -h 
Filesystem              Size  Used Avail Use% Mounted on
/dev/mapper/my_vg-root  455G  126G  307G  29% /
udev                    1.8G  4.0K  1.8G   1% /dev
tmpfs                   708M  980K  707M   1% /run
none                    5.0M     0  5.0M   0% /run/lock
none                    1.8G  408K  1.8G   1% /run/shm
/dev/sda1               228M  131M   85M  61% /boot