Clover

出自 ArchWiki

Clover EFI 是一个引导加载程序,用于在传统 BIOS 或 UEFI 模式下启动 macOS (Hackintoshes)、Windows 和 Linux。

Clover 的主要优点是

  • 在传统 BIOS 系统上模拟 UEFI
  • 引导支持 EFI 启动存根 的 Linux 内核
  • 在当今人们常用的宽屏上支持原生分辨率 GUI
  • 易于使用
  • 易于自定义

支持的文件系统

Clover 继承了固件对文件系统的支持(即至少 FAT12、FAT16 和 FAT32)。此外,它还会加载放置在其自身在 ESP 上的安装目录的 drivers 子目录中的任何 UEFI 驱动程序(即 esp/EFI/clover/drivers/[1]

Clover 还附带了多个 EFI 文件系统驱动程序

安装

由于 Clover 在 BIOS 系统上模拟 UEFI 环境,因此每种系统的步骤都相似。

UEFI 系统

EFI 系统分区 挂载到 /boot。这是从 UEFI 直接启动 EFI 启动存根 内核的首选方法。

使用 mkinitcpio 生成初始 ramdisk 环境

这里下载 Clover 可引导 ISO。

解压 Clover-*-X64.iso.7z 压缩包,找到 Clover-*-X64.iso 文件,将其挂载到类似 /mnt/iso 的目录。应该注意的是,在 Linux 中所有文件/文件夹名称都将以小写显示,这与 Windows 和 Mac OS 不同。

将整个 /mnt/iso/efi 文件夹复制到您的 EFI 系统分区/boot 的目录树应如下所示

/boot/EFI
/boot/EFI/BOOT
/boot/EFI/CLOVER
/boot/initramfs-linux-fallback.img
/boot/initramfs-linux.img
/boot/vmlinuz-linux

BIOS 系统

注意: 即使这是传统 BIOS,也需要 UEFI/GPT 分区布局。唯一的区别是需要在 EFI 系统分区 上设置“传统 BIOS 可引导”标志。

下载 Clover 可引导 ISO

解压 Clover-*-X64.iso.7z 压缩包,找到 Clover-*-X64.iso 文件,将其挂载到类似 /mnt/iso 的目录。

现在必须将 Clover 代码与当前的 Master 和分区引导记录合并。以块设备 /dev/sda 和第 1 分区 /dev/sda1 上的 ESP 为例,如有必要请更改

# dd if=/dev/sda1 of=/tmp/original_PBR bs=512 count=1 conv=notrunc
# cp /mnt/iso/usr/standalone/i386/boot1f32 /tmp/new_PBR
# dd if=/tmp/original_PBR of=/tmp/new_PBR skip=3 seek=3 bs=1 count=87 conv=notrunc
# dd if=/tmp/new_PBR of=/dev/sda1 bs=512 count=1 conv=notrunc
# dd if=/mnt/iso/usr/standalone/i386/boot0ss of=/dev/sda bs=440 count=1 conv=notrunc

EFI 系统分区 挂载到 /boot

将整个 /mnt/iso/efi 文件夹复制到您的 EFI 系统分区

将传统引导加载程序复制到 EFI 系统分区

# cp /mnt/iso/usr/standalone/i386/x64/boot6 /boot/boot

配置

配置通过 EFI 系统分区 中路径 EFI/CLOVER 下的 XML 文件 config.plist 完成。

现在有一个工具可用于在任何操作系统中轻松编辑您的 config.plistCloud Clover Editor (CCE)[失效链接 2024-10-12 ⓘ]

有关每个键的含义,请参考他们的 wiki 中关于自定义条目的部分。键 Volume 应该是 EFI 系统分区的 PARTUUID,并且必须为大写。Arguments 中的最小 initramfs initramfs-linux.imgPath 中的 Linux 内核可执行文件 vmlinuz-linux 相对于 EFI 系统分区。应根据 EFI 标准使用反斜杠。有关 Arguments 中的其他参数,请参考 EFI 启动存根内核参数#参数列表

在此示例中,initramfs 和内核文件放置在 EFI 系统分区的根目录,与 efi 目录位于同一级别。EFI 系统分区挂载在 /boot

/boot/EFI/CLOVER/config.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "https://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>GUI</key>
  <dict>
    <key>Custom</key>
    <dict>
      <key>Entries</key>
      <array>
        <dict>
          <key>Arguments</key>
          <string>initrd=\initramfs-linux.img root=PARTUUID=d5d0fceb-c58e-c745-a7ff-f2f1b2824e66 rw add_efi_memmap</string>
          <key>Path</key>
          <string>\vmlinuz-linux</string>
          <key>Title</key>
          <string>Arch Linux</string>
          <key>Type</key>
          <string>Linux</string>
          <key>Volume</key>
          <string>33BA6C23-4772-294D-9053-72A49FCAEF39</string>
          <key>VolumeType</key>
          <string>Internal</string>
        </dict>
        <dict>
          <key>Arguments</key>
          <string>initrd=\initramfs-linux-fallback.img root=PARTUUID=d5d0fceb-c58e-c745-a7ff-f2f1b2824e66 rw debug add_efi_memmap</string>
          <key>Path</key>
          <string>\vmlinuz-linux</string>
          <key>Title</key>
          <string>Arch Linux Rescue Mode</string>
          <key>Type</key>
          <string>Linux</string>
          <key>Volume</key>
          <string>33BA6C23-4772-294D-9053-72A49FCAEF39</string>
          <key>VolumeType</key>
          <string>Internal</string>
        </dict>
      </array>
    </dict>
  </dict>
</dict>
</plist>

链式加载 systemd-boot

如果您需要一个用于 BIOS 系统的引导加载程序,并且该引导加载程序遵循 引导加载程序规范,则可以在 BIOS 系统上使用 systemd-boot。这是使 Clover 链式加载 systemd-boot 所需的配置文件。

/boot/EFI/CLOVER/config.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "https://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>Boot</key>
	<dict>
		<key>DefaultVolume</key>
		<string>EFI</string>
		<key>DefaultLoader</key>
		<string>\EFI\systemd\systemd-bootx64.efi</string>
		<key>Fast</key>
		<true/>
	</dict>
	<key>GUI</key>
	<dict>
		<key>Custom</key>
		<dict>
			<key>Entries</key>
			<array>
				<dict>
					<key>Hidden</key>
					<false/>
					<key>Disabled</key>
					<false/>
					<key>Image</key>
					<string>os_arch</string>
					<key>Volume</key>
					<string>EFI</string>
					<key>Path</key>
					<string>\EFI\systemd\systemd-bootx64.efi</string>
					<key>Title</key>
					<string>Arch Linux</string>
					<key>Type</key>
					<string>Linux</string>
				</dict>
			</array>
		</dict>
	</dict>
</dict>
</plist>

参见