相关疑难解决方法(0)

Linux 内核如何能够访问其分配的 initramfs/initrd?

我试图从您按下电源按钮的那一刻起了解整个机器的启动过程。从引导加载程序到 initramfs 阶段,我不太了解其他一些较小的部分。

鉴于条目的此 Grub 配置,取自最近的 Ubuntu 默认安装:

insmod gzio
insmod part_msdos
insmod ext2
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set=root 96fb7310-5adb-4f66-bf59-04acd08d76a3
echo    'Loading Linux x.y.z ...'
linux   /vmlinuz-x.y.z root=/dev/mapper/some-device-name ro nomodeset 
echo    'Loading initial ramdisk ...'
initrd  /initrd.img-x.y.z
Run Code Online (Sandbox Code Playgroud)

这在系统状态和内存方面实际上做了什么?我知道 Grub 的任务是“加载和运行内核”,它有自己的一组模块来访问设备(或网络)上的文件以获取它们。在这里insmod的例子中s, set rootand search- 但这只是从 Grub 的角度来看,并没有与内核共享,对吗?

我还猜测 Grub 正在将内核的(副本?)加载到内存(linuxcommand)中并启动它以开始执行。(显然是两个不同的步骤 - 那么,如何?)给定的参数可以在内核中读取并解释(这是一个映射到内存某处的大字符串吗?)并提供安排所请求事物的选项。

我也看到了这个initrd选项。这指向我的 gzip 压缩 initramfs,需要引导由root=. 但是这个initramfs是如何提供给内核的呢?它不会传递任何内存地址到它可以加载它的地方,也不能访问它本身,因为它在内核启动之前已经加载。一些内核文档说这个 initramfs 文件系统“设备”可以通过 访问/dev/ram0,但我不知道它是如何成为一个可访问的设备文件的。我猜我没看到水下发生了什么。

我也没有看到这与其他引导加载程序有什么关系,包括嵌入式平台,例如使用 U-boot/Coreboot。这是否与 Grub 做同样的事情(相同的标准内存地址?)以及在加载内核/initrd 方面这些与 Grub 相比在多大程度上? …

boot-loader initramfs linux-kernel

9
推荐指数
2
解决办法
3083
查看次数

标签 统计

boot-loader ×1

initramfs ×1

linux-kernel ×1