Clover
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
從 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 系統分區。
# cp /mnt/iso/usr/standalone/i386/x64/boot6 /boot/boot
配置
Clover 的配置是通過編輯 EFI 系統分區中 EFI/CLOVER 目錄下的 XML 文件 config.plist 來完成的。
各配置參數的詳情請參見 Clover 的 wiki。Volume 應是 EFI 系統分區的 UUID 且必須大寫。Arguments 中的 最小 initramfs initramfs-linux.img 和 Path 中的 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>