我如何从早期的 initramfs Linux shell 脚本中检测到我的内核是从哪个可启动磁盘启动的,特别是当相同的(-ish)系统可以安装在多个磁盘上时?
用例是动态逻辑来确定在哪里挂载非引导分区作为静态分区的替代/etc/fstab
,因此查看该文件或 的输出mount
不是一个选项...
更具体地说,如果 RPi 磁盘映像同时写入 SD/MMC 卡和 USB 闪存驱动器,系统如何确定正在运行哪个内核? RPi 引导加载程序控制引导磁盘顺序,并且root=/mmcblk0p2
无论出于何种 RPi 原因组合,在任何一种情况下都可以使用相同的内核参数。内容是否会/proc/cmdline
根据实际检测到的内核根进行更新?
[编辑]
看起来 RPi 引导加载程序确实在前面添加了一些内核参数,但似乎没有触及该root=
参数,因此/proc/cmdline
.
对于任何仅使用 initramfs 的系统,这仍然可能是一个“通用”问题,在这种情况下,该root=
参数无论如何都毫无意义,因为根文件系统位于无设备 ram 映像中。
我碰巧遇到Bootlin.com 上这篇优秀的相关博客文章,并尝试过stat /
,它产生了 02h 的“设备”,它解码为主设备号为零......文档位于https://www.kernel.org/doc/Documentation/admin-guide/devices.txt说这是“未命名设备(例如非设备安装)”
如果我对内核启动过程的模糊理解是正确的,那么内核实际上无法知道它来自哪里,因为它全部由引导加载程序加载到内存中。
话虽如此,我认为我运气不好,没有找到并解析一些更深入的引导加载程序特定的东西。