跳至內容

Clover

出自 Arch Linux 中文维基

Clover EFI 是一個用於在傳統引導模式或 UEFI 引導模式下啟動 macOS(Hackintoshes)、Windows 和 Linux 的 引導加載程序

Clover 的主要優勢有:

  • 在傳統 BIOS 系統上模擬 UEFI。
  • 啟動支持 EFI boot stub 的 Linux 內核。
  • 在如今常見的寬屏上支持原生解析度的圖形界面。
  • 簡單易用
  • 易於配置和自定義

支持的文件系統類型

Clover 繼承了固件所支持的文件系統(例如,至少支持 FAT12、FAT16 和 FAT32),除此以外還會加載位於安裝目錄中的 drivers 子目錄下的所有 UEFI 驅動(目錄位置示例:esp/EFI/clover/drivers[1]

此外 Clover 也有多個EFI 文件系統驅動

安裝

由於 Clover 在 BIOS 系統上模擬 UEFI 環境,其在不同系統上的安裝流程是類似的。

UEFI

若直接從 UEFI 啟動到一個 EFI boot stub 內核中,推薦將 EFI 系統分區掛載到 /boot

然後使用 mkinitcpio 生成早期用戶空間環境。

Clover 發布頁面 上下載可引導的 Clover ISO 文件。

解壓已下載的壓縮文件,然後找到文件名為 Clover-*-X64.iso 的鏡像文件,將其掛載到如 /mnt/iso 之類的目錄下。需要注意的是,所有文件或目錄名稱在 Linux 中都會顯示為小寫字母,這和 Windows 與 Mac OS 上是不同的。

如果已按上述流程將鏡像文件掛載到 /mnt/iso 下,請將整個 /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

如果當前有其他的作業系統(例如 Windows)接管了你的 EFI 分區,不要忘記備份 EFI 分區中 BOOT 文件夾下的 bootx64.efi 文件。

BIOS

注意:傳統 BIOS 下依然需要使用 UEFI/GPT 分區模式,唯一的區別是需要在 EFI 系統分區上設置「Legacy BIOS Bootable」標識。

Clover 發布頁面 上下載可引導的 Clover ISO 文件。

解壓已下載的壓縮文件,然後找到文件名為 Clover-*-X64.iso 的鏡像文件,將其掛載到如 /mnt/iso 之類的目錄下。

此時必須將 Clover 與主分區記錄(MBR)和啟動分區記錄(PBR)合併。 以下是示例,此示例中有一個塊設備 /dev/sda,ESP 位於其第一個分區 /dev/sda1 上:

# 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

配置

Clover 的配置是通過編輯 EFI 系統分區EFI/CLOVER 目錄下的 XML 文件 config.plist 來完成的。

各配置參數的詳情請參見 Clover 的 wikiVolume 應是 EFI 系統分區的 UUID 且必須大寫。Arguments 中的 最小 initramfs initramfs-linux.imgPath 中的 Linux 內核可執行文件 vmlinuz-linux 路徑都是基於 EFI 系統分區的相對路徑。反斜槓應根據 EFI 標準使用。對於 Arguments 中的其他可用參數,請參見 EFI boot stub內核參數#參數列表

下面的例子中,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

若需要一個遵守 The Boot Loader Specification引導加載程序,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>


參見