构建不支持 /boot 文件系统的内核

构建不支持 /boot 文件系统的内核

我正在为 RPi 构建定制内核。问题是 RPi 引导加载程序需要 vfat /boot 分区,而我打算最小化内核大小,因此需要从内核中删除 vfat 支持。

我读过《嵌入式Linux 入门》和《Linux 内核开发》书籍。据我了解,引导加载程序似乎使用 /boot 分区来查找内核和 initramfs 以及其他一些重要文件

我尝试从内核中删除 vfat 支持,同时保持 /boot 格式为 vfat。内核启动得很好。然而,systemd 在某个地方卡住了,说它无法挂载 /boot,这完全没问题,因为内核不支持 vfat。然后 Systemd 给了我一个救援 shell。

我想知道既然 RPi 引导加载程序已经支持 vfat,并且能够毫无问题地加载内核,有什么方法可以让 systemd 根本不挂载 /boot 呢?根据我的理解,由于此阶段内核已经加载,因此内核不需要访问 /boot 分区。

任何帮助将不胜感激。

答案1

systemd 将尝试挂载您在 中列出的文件系统/etc/fstab,因此如果您/boot从中删除/etc/fstab,则不应尝试挂载它。

(我刚刚在 Fedora 系统上测试了它,将其删除/etc/fstab并确认它没有安装。)

systemd 确实有一些代码来专门处理 EFI 分区,所以也许这就是您在 RPi 上拥有的代码,并且这就是触发挂载的内容......但这通常是使用自动挂载单元实现的,换句话说,它会尝试仅当有人查看内部时才安装它/boot

挂载的逻辑/etc/fstab是通过以下方式实现的systemd-fstab-生成器挂载EFI分区的逻辑是通过systemd-gpt-自动生成器

另一个有用的命令是systemctl status /boot(当您将其与支持 vfat 的内核一起安装时),它可以为您提供有关它来自何处的更多提示。

相关内容