![在 64 位机器上创建 32 位 initramfs](https://linux22.com/image/115088/%E5%9C%A8%2064%20%E4%BD%8D%E6%9C%BA%E5%99%A8%E4%B8%8A%E5%88%9B%E5%BB%BA%2032%20%E4%BD%8D%20initramfs.png)
我使用的是 64 位内核,并且想在 QEMU 中运行 32 位内核。一旦我有了压缩的内核映像,我尝试使用创建 initramfs 映像mkinitcpio
,但这仅创建了一个具有 64 位代码的映像(mkinitcpio
使用的 busybox 是 64 位的,其他可执行文件也是如此)。
我可以使用该gen_init_cpio
程序(它是内核的一部分)并以其他方式获取 32 位可执行文件,但我更愿意避免这种情况并让程序决定内核在 rootfs 中需要什么。
有没有办法在运行 64 位内核时获取 32 位 initramfs 映像?
答案1
64 位系统不会生成 32 位 initramfs,因为它不需要它。所以你必须在 chroot 中安装 32 位发行版。
但这也可能不起作用,因为大多数 initramfs 生成器(包括mkinitcpio
)都会进行模块自动检测。 initramfs 将仅包含您的特定硬件和设置所需的模块,它在其他任何地方都不起作用。最后,对于大多数 initramfs 生成器,您必须在启动的 VM 本身内运行它。
您可以禁用模块自动检测,但这样 initramfs 就会变得很大。一种折衷方案是在配置文件中手动指定所需的模块。