Clover
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 系统
下载 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.plist
:Cloud Clover Editor (CCE)[失效链接 2024-10-12 ⓘ]
有关每个键的含义,请参考他们的 wiki 中关于自定义条目的部分。键 Volume
应该是 EFI 系统分区的 PARTUUID,并且必须为大写。Arguments
中的最小 initramfs initramfs-linux.img
和 Path
中的 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>