内核的启动顺序是什么?

时间:2013-11-11 06:43:14

标签: linux-kernel x86 boot rootfs

启动时,是否首先将Linux内核加载到内存或首先挂载根文件系统?我有这个疑问,因为压缩的内核映像通常位于/ boot / vmlinuz中。因此,要访问内核映像,应安装根文件系统。但由于根文件系统将驻留在存储上,它是如何从存储中读取的?

1 个答案:

答案 0 :(得分:0)

Linux Kernel first loaded to the memory or the first the root file system is mounted?

首先,BIOS加载bootloader(assumimg GRUB),利用其内置例程从磁盘的MBR的初始512字节开始访问磁盘并执行它。代码被加载到RAM中并执行,这不需要任何文件系统理解,理想情况下它是RAW代码。在下一个阶段,引导加载程序加载/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


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

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

阅读Tim Jones文章了解更多相关信息。