跳过正文

UKI

··
目录

准备统一内核映像
#

内核命令行
#

mkinitcpio 支持从目录中的命令行文件读取内核参数。它会将 /etc/cmdline.d 目录中所有扩展名为 .conf 的文件的内容连接起来,并用于生成内核命令行。命令行文件中任何以特殊字符 # 开头的行都会被视为注释,并被 mkinitcpio 忽略。请注意移除指向 microcodeinitramfs 的条目。

例如:

/etc/cmdline.d/root.conf
root=UUID=0a3407de-014b-458b-b5c1-848e92a327a3 rw

提示:

  1. 如果您的根文件系统位于非默认的 Btrfs 子卷上,请确保在配置文件中设置必要的挂载标志——rootflags,例如,rootflags=subvol=/path/to/subvolume
  1. 由于 rootflags 仅在启动时使用,因此无需复制 /etc/fstab 中的所有标志
  1. 此前自定义的内核参数需要在这里指定
  1. rootrw 需要指定
  1. 可以运行 cat /proc/cmdline 检查系统启动时使用的参数,看看需要添加哪些内核参数,如果有两个相同的参数,选自己手动指定的,并删除另一个参数

.preset 文件
#

接下来,按如下方式修改 /etc/mkinitcpio.d/linux.preset 或者你正在使用的内核对应的 .preset 文件,注意包含正确的 EFI 分区挂载点

  • 取消注释 PRESET_uki= 参数
  • (可选) 注释掉 PRESET_image=
  • (可选) 对 PRESET_options= 每一行添加或取消注释 --splash 参数,主要为启动动画

以下是 Linux 内核和 Arch 启动画面 的 linux.preset 工作示例:

/etc/mkinitcpio.d/linux.preset
# mkinitcpio preset file for the 'linux' package

#ALL_config="/etc/mkinitcpio.conf"
ALL_kver="/boot/vmlinuz-linux"

PRESETS=('default' 'fallback')

#default_config="/etc/mkinitcpio.conf"
#default_image="/boot/initramfs-linux.img"
default_uki="esp/EFI/Linux/arch-linux.efi"
default_options="--splash=/usr/share/systemd/bootctl/splash-arch.bmp"

#fallback_config="/etc/mkinitcpio.conf"
#fallback_image="/boot/initramfs-linux-fallback.img"
fallback_uki="esp/EFI/Linux/arch-linux-fallback.efi"
fallback_options="-S autodetect"

提示:如果您只想从统一内核映像启动,您可以将 ESP 挂载到 /efi,并且只有这些映像需要驻留在 ESP 分区上。

pacman 钩子
#

systemd-stub(systemd 的一部分)、微码(包括 intel-ucode 和 amd-ucode)以及 linux 内核包的更新将自动触发 UKI 重建。

构建 UKI
#

最后,确保 UKIs 目录存在,并重新生成 initramfs。例如,对于 linux 预设:

# mkdir -p esp/EFI/Linux
# mkinitcpio -p linux

注意改 esp 为你实际的 EFI 分区

安全启动
#

sbctl 会自动处理。

启动
#

systemd-boot 会自动配置。

作者
南风
夕阳…真美…