vmlinuz 和 ISO 映像(netboot)之间有什么关系?

vmlinuz 和 ISO 映像(netboot)之间有什么关系?

为什么我不能使用最新版本的内核 5.11 中的 vmlinuz 和 initrd,而 PXE 中使用的默认网络启动映像是 5.4?

答案1

嗯,vmlinuz 和 initrd 位于 ISO 映像内(无论您是否使用 ISO 映像进行网络启动或其他操作)。

因此 5.4 的网络启动 ISO 映像将包含 5.4 的 vmlinuz 和 initrd。

如果您想要 5.11 中的 vmlinuz 和 initrd,则需要由 5.11 中的文件制作的网络启动 ISO 映像。如果你无法下载一个,你需要制作一个(google,应该有一个标准流程如何为 Ubuntu 制作一个)。

答案2

虽然 initrd 文件通常包含许多内核模块,但它通常不会包含所有这些模块。

netboot 映像设置了一个更完整的根文件系统,其中包括完整的/lib/modules/目录树:如果您使用较新的内核,则/lib/modules/<kernel-version-number>/映像中将不存在其相应的目录,因此在 initramfs 启动阶段之后加载内核模块的任何尝试将会失败,除非模块专门准备了“弱依赖”内核 ABI 没有任何不兼容的更改。

反过来,这意味着内核无法支持“非必需”硬件,或稍后热插拔的硬件,或作为模块提供且未在 initramfs 引导阶段加载的任何文件系统和其他内核功能。

较新的内核可能还需要相应较新的用户空间工具来利用新的内核功能,尽管与上述缺乏正确内核版本的内核模块相比,这不太可能导致立即失败。

当然,如果您愿意完成所需的工作,没有什么可以阻止您准备包含较新内核版本的模块的自定义网络启动映像。


casper/extras/modules.squashfs-generic在 Ubuntu 的 netboot ISO 中,内核模块在 ISO(以及)casper/extras/modules.squashfs-generic-hwe上打包为单独的 squashfs 映像ubuntu-20.04.3-live-server-amd64.iso。其中modules.squashfs-generic包含打包5.4.0-81-generic内核的模块,同时modules.squashfs-generic-hwe包含硬件启用内核的模块5.11.0-27-generic(!)。

ISO 目录中甚至还有相应的hwe-vmlinuz和文件:如果你在 PXE 启动配置中使用这些文件而不是常规的和文件,你实际上会获得内核版本。只是hwe-initrdcaspervmlinuzinitrd5.11.0-27-generic常见的 Ubuntu 网络启动指令忽略提及此选项的存在。

如果这对您来说还不够新,那么应该可以通过添加casper/extras/modules.squashfs-*包含较新内核模块的文件并使用该文件而不是标准文件来制作自定义的网络启动 ISO。对 initrd 文件所需的定制(如果有)“将留给读者作为练习”。 (翻译:我还没有这样做,但似乎只要付出合理的努力就应该可以实现。)

相关内容