【问题标题】:What is the boot sequence of kernel?内核的启动顺序是什么?
【发布时间】:2014-07-10 20:42:29
【问题描述】:

开机时,Linux Kernel 是先加载到内存还是先挂载根文件系统?我有这个疑问是因为压缩的内核映像通常位于 /boot/vmlinuz。因此,要访问内核映像,应该挂载根文件系统。但是由于根文件系统会驻留在存储上,如何从存储中读取呢?

【问题讨论】:

  • initrd
  • 感谢@JonathonReinhart。那么,GRUB 或 LILO 是否能够与存储交互并将 initrd 和内核映像文件加载到内存中?那么,基本上他们可以和根文件系统交互,从根目录读取这些文件?
  • "要访问内核映像,应挂载根文件系统" -- 引导加载程序不必遵循正式的内核程序。它只是一个执行快速和肮脏操作的瞬态程序。所以文件系统(或有时是原始设备)只是简单地读取,没有复杂的mount 过程。 “根文件系统”也是一个内核概念,而不是引导加载程序概念。引导加载程序正在从 引导设备 上的文件系统读取内核映像。不要求此引导设备或文件系统必须是内核的 rootfs。

标签: linux-kernel x86 boot rootfs


【解决方案1】:

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

首先,BIOS 加载引导加载程序 (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、boot loader 搜索一个block Id号925c0ccb-1532-4078-bee0-07acff8bc917,这是我的引导设备/dev/sda1并挂载到/boot,如图所示。因此,在最后阶段,GRUB 使用 BIOS 磁盘实用程序将在块设备(/boot)下查找的 Linux 内核和 initrd 映像加载到 RAM。通常 BIOS 在处理器的实模式下运行,它只能寻址 2^20 字节的 RAM,限制为 ~1MB。现在内核和 initrd 重量超过 1MB,将它们加载到 RAM 第一个内核到 1MB,跳转到保护模式并将加载的内核传递到高内存并释放实模式的前 1MB。一旦内核正在运行并且加载到 RAM 中的 initramfs 将找到它本身所在的文件系统的位置,并将其作为其根 / 文件系统传递给内核。

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

【讨论】:

    猜你喜欢
    • 2018-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多