我正在虚拟机中构建 LFS(Linux From Scratch)系统,到目前为止,我已经设法获得了一个可行的桌面系统,从已知设备启动,在我的例子中是 /dev/sda1。我现在正在尝试制作一个从 ISO 映像引导的实时系统。而不是使用我已经建立的 /dev/sr0 作为根是可能的(而且,因为它更有可能从 USB 记忆棒中使用而不是实际的 CD-ROM,所以太不灵活了)我已经下定决心在将其引导到 initrd 根目录时。这个想法是使用它作为系统的根而不是用它作为临时根来加载“真正的”根,并且由于它已经在内存中,它省去了设置 tmpfs 根的麻烦,复制所有文件,并切换到它。
我之前一直在尝试使用 squashfs 图像,因为我看到 Ubuntu 似乎使用它并且具有我需要的东西:一个小型根,加载速度更快,使用更少的内存,并且速度很快(xz 是 SSLLOOWW 提取和gzip 加载缓慢)。起初我无法启动它,所以我切换到基于 cpio 的 initrd。由于存档中的文件丢失导致一些初始麻烦后,我确实设法启动了它。
我暂时(大约一个月前)将其放在一边,以便在系统上执行其他任务。我丢失了原始的 GRUB2 设置和内核配置,所以又重新做了一次,但我遇到了障碍。我希望这里的人可能知道我错过了什么。
当我启动时,我从来没有看到任何有关加载 initrd 文件的消息,它直接进入内核的加载、解压缩和启动。这最终导致内核恐慌并显示消息
VFS: cannot open root device "(null)" or unknown-block (1,0): error -6
Please append the correct "root=" boot option; here are the available partitions:
没有显示分区,然后是“内核恐慌”消息,只是重复第一行。如果我使用“rootfstype=ramfs”,我会得到:
VFS: mounted root (ramfs filesystem) readonly on device 0:15.
devtmpfs: error mounting -2
本质上,它将 EMPTY ramfs 文件系统挂载为 root,因此挂载 devtmpfs 失败,因为 /dev 条目不存在。但可以肯定的是,我以前使用过该引导选项。
这是我的 GRUB 2 配置:
menuentry = "LFS (inird test)" {
linux /boot/kernel/initrd/linux ro rdinit=/etc/init
initrd /boot/kernel/initrd/root.cpio.gz
}
是的,/boot/kernel/initrd/目录项存在,linux是内核(编译内核产生的bzimage文件),root.cpio.gz是我压缩的initrd根cpio归档。
这是我内核的 .config 文件(抱歉不能粘贴到这里)。
如果需要更多信息,请随时询问。那个你。