我正在为 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 的内核一起安装时),它可以为您提供有关它来自何处的更多提示。