方法A:链式加载EFI引导程序(GRUB2,系统引导)
方法1:使用BlessOverride
如果未自动选择Linux,则将以下内容添加到您的config.plist中:
Misc -> BlessOverride -> \EFI\arch\grubx64.efi
一些常见的Linux Bootloader路径:
\EFI\arch\grubx64.efi
\EFI\ubuntu\grubx64.efi
\EFI\systemd\systemd\systemd-bootx64.efi
- 检查您的分布¯\ _(ツ)_ /¯
方法2:使用efibootmgr
(推荐)
efibootmgr
是用于在UEFI固件(ex-BIOS)中操纵EFI Boot Manager的程序。使用它,您可以创建新条目并添加Linux引导管理器(GRUB2,systemd-boot等),以使其出现在OpenCore上,并可以由OC选择和设置为默认(使用Ctrl +突出显示时输入)。要做到这一点:
- 知道您正在使用哪个引导程序/管理器(GRUB2或systemd-boot或其他任何东西)
- 通过OpenCore引导到linux,您可能希望使用UEFI Shell为您的引导程序/管理器执行EFI应用程序
- 找出您的引导加载程序/管理器的路径,通常在EFI中(如果已正确设置)
- 在Linux安装的终端窗口中,运行
lsblk
(在大多数发行版中可用)$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT ... sda 8:0 0 223.6G 0 disk ├─sda1 8:1 0 200M 0 part /boot/efi ├─sda2 8:2 0 116.3G 0 part └─sda3 8:3 0 107G 0 part / ...
- 检查安装点部分以获取系统根
/
分区(在此处sda3
) /boot/efi
我的EFI分区已安装在其中(如果您在fstab中正确添加了它,则应该这样做)- 引导加载程序/管理器在
/boot/efi
/boot/efi
1
在这种情况下,分区号是(可能是sda1
或nvme0nXp1
或其他),如果您的efi在另一个分区中,请记住它是哪个号码
- 检查安装点部分以获取系统根
- 通过运行将目录更改为安装EFI分区的目录
cd /path/to/efi
(例如cd /boot/efi
) - 进入后,通常会找到一个名为的文件夹,
EFI
其中包含BOOT
和其他文件夹,其中一个文件夹可能包含您的bootloader / manager EFI Application二进制文件,通常在EFI/arch/grubx64.efi
-用于带有grub2的ArchEFI/ubuntu/grubx64.efi
-对于具有grub2的UbuntuEFI/systemd/systemd-bootx64.efi
-用于systemd-boot(与Arch配合使用的路径)EFI/fedora/grubx64.efi
-适用于带grub2的Fedora- 或运行
find . -iname "grubx64.efi"
或find . -iname "systemd-bootx64.efi"
在您的EFI文件夹中(您可以将文件名更改为正在使用的名称)
- 注意:
- 二进制路径
- 二进制文件的分区号
- 二进制文件的磁盘路径(
/dev/sda
或/dev/nvme0nX
)
- 在Linux安装的终端窗口中,运行
efibootmgr
在您的linux系统中安装(通常它是ubuntu中内置的,但是例如需要在arch上安装)- 安装后,以sudoer / superuser身份运行(或使用sudo)
efibootmgr -c -L "Linux" -l "\EFI\pathto\filex64.efi" -d "/dev/sda" -p 1
-c
: 创建-L "Linux"
:标记启动项(您可以将其更改为所需的任何名称)-l "\EFI\pathto\filex64.efi"
:加载程序文件路径,必须采用UEFI固件可以使用的格式,这意味着\
要进行路径设置,而不是/
在Unix中找到-d "/dev/sda"
:磁盘路径,以便efibootmgr
知道UEFI固件应从哪个磁盘读取文件,/dev/nvme0nX
如果您使用的是nvme ,则可以为(以X表示)-p 1
:指向我们之前找到的分区号,如果您的EFI分区是第一个分区,则可以省略
- 重新启动并检查OpenCore,您会发现一个名为的新条目
EFI
,因为它也可以指向其他启动条目,这是OpenCore设计的,而不是bug。
笔记:
它可以用于要添加到UEFI Boot Manager中的任何EFI应用程序。
方法B:链加载内核(必须支持EFISTUB)
一些linux内核在配置中启用了EFISTUB,这使得它们可以由UEFI固件加载,就像常规的UEFI应用程序一样(整洁,对吗?),我们可以将此功能与OpenCore一起使用,并允许它作为EFI应用程序加载内核。还传递引导参数和其他信息。
1.确定您的根分区
我们首先需要确定您的根分区及其UUID / PARTUUID,此信息将帮助我们指向内核/系统根的正确分区。
1.您的内核和系统根目录位于同一分区中:(在此示例中使用Arch)
- 在Linux安装的终端窗口中,运行
lsblk
(在大多数发行版中可用)$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT ... sda 8:0 0 223.6G 0 disk ├─sda1 8:1 0 200M 0 part /boot/efi ├─sda2 8:2 0 116.3G 0 part └─sda3 8:3 0 107G 0 part / ...
- 检查安装点部分以获取系统根
/
分区(在此处sda3
) /boot/efi
我的EFI分区已安装在其中(如果您在fstab中正确添加了它,则应该这样做)- 内核和initramfs存储在
/boot
主系统根分区的一部分中
- 检查安装点部分以获取系统根
- 现在我们需要知道运行哪个UUID / PARTUUID
blkid | grep -i <system_root_partition>
,例如:(blkid | grep -i sda3
必须是root用户)# blkid | grep -i sda3 /dev/sda3: UUID="3d4768d7-d33e-4f9f-a821-e80eba22ca62" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="a1073e53-c768-4ce5-89ad-b558669bdb89"
- 您将同时获得UUID / PARTUUID,并将它们保存在某处。
- 浏览
/boot
并列出文件,您应该找到您的内核和initramfs$ cd /boot $ ls -l total 51698 drwxr-xr-x 7 root root 34304 Jan 1 1970 efi drwxr-xr-x 6 root root 4096 Sep 18 19:42 grub -rw-r--r-- 1 root root 10144696 Sep 22 23:31 initramfs-linux.img -rw-r--r-- 1 root root 32047033 Sep 22 23:32 initramfs-linux-fallback.img -rw-r--r-- 1 root root 3161088 Jun 16 17:50 intel-ucode.img -rw-r--r-- 1 root root 7541344 Sep 22 23:31 vmlinuz-linux
- 你看我的内核命名
vmlinuz-linux
与initramfs-linux.img
它的initramfs的,具有后备IMG,也intel-ucode.img
为垃圾英特尔缓解- 如果您使用的是AMD,则可能还会发现
amd-ucode.img
- 其他一些发行版可能会将这些映像存储在其他位置,请检查您的发行版以及它如何处理CPU ucode固件
- 如果您使用的是AMD,则可能还会发现
- 你看我的内核命名
- 重新启动到OpenCore,然后按Space,它应该显示更多选项,其中之一应该是OpenShell.efi。如果您没有它,请下载OpenCore zip,并从OC / Tools中获取它,并将其添加到您的config.plist中,ProperTree可以使用OC Snapshot实现。
2.您的内核在您的EFI分区中
如果您使用的是systemd-boot,请确保将内核安装在EFI分区中,以便systemd UEFI引导加载程序可以检测并加载内核:基本上确保它位于FAT32分区中,而EFI分区应该已经在该分区中。
2.识别您的UEFI路径和设备
- 在壳
- 运行
map -r -b
以列出所有设备(使用-b断开滚动条)BLKX:
是否扫描了所有分区/磁盘FSX:
是所有可探索的文件系统PciRoot(0x0)/Pci(AxB,CxD)/Sata
还是Nvme
您的驱动器类型(nvme或ahci)HD(X,GPT,<PARTUUID>,...)
还是HD(X,MBR)
您的驱动器分区X
是数字,GPT / MBR是磁盘分区方案,然后是PARTUUID- 例子:
Mapping table FS0: Alias(s):HD0a0a1:;BLK1: PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x0,0x0,0x0)/HD(1,GPT,4C86153F-3A91-4328-878A-807A8FA944A1,0x28,0x64000) FS1: Alias(s):HD0a0a2:;BLK3: PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x0,0x0,0x0)/HD(2,GPT,B186A074-AE41-495C-BAF3-04AD655A73FB,0x64028,0xE8B0C90)/VenMedia(BE74FCF7-0B7C-49F3-9147-01F4042E6842,1D89CBABD1BB094B87762CDCDC3168F6) FS2: Alias(s):HD0a0a2:;BLK4: PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x0,0x0,0x0)/HD(2,GPT,B186A074-AE41-495C-BAF3-04AD655A73FB,0x64028,0xE8B0C90)/VenMedia(BE74FCF7-0B7C-49F3-9147-01F4042E6842,43B537EA89133A48A9640D5A373D2982) FS4: Alias(s):HD0a0a2:;BLK6: PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x0,0x0,0x0)/HD(2,GPT,B186A074-AE41-495C-BAF3-04AD655A73FB,0x64028,0xE8B0C90)/VenMedia(BE74FCF7-0B7C-49F3-9147-01F4042E6842,9FEEB42E4604B44BB4CB39A9D6F41DB8) FS5: Alias(s):HD0a0a2:;BLK7: PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x0,0x0,0x0)/HD(2,GPT,B186A074-AE41-495C-BAF3-04AD655A73FB,0x64028,0xE8B0C90)/VenMedia(BE74FCF7-0B7C-49F3-9147-01F4042E6842,EDB22B3A8A95AC4B9A66E4E287559689) FS6: Alias(s):HD0a0a2:;BLK8: PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x0,0x0,0x0)/HD(2,GPT,B186A074-AE41-495C-BAF3-04AD655A73FB,0x64028,0xE8B0C90)/VenMedia(BE74FCF7-0B7C-49F3-9147-01F4042E6842,FA8B4C241BA35347B093F2E560B563EA) FS3: Alias(s):HD0a0a2:;BLK5: PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x0,0x0,0x0)/HD(2,GPT,B186A074-AE41-495C-BAF3-04AD655A73FB,0x64028,0xE8B0C90)/VenMedia(BE74FCF7-0B7C-49F3-9147-01F4042E6842,93DFEA9BE3D44D4CBE5A8A4F978348D2) BLK0: Alias(s): PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x0,0x0,0x0) BLK2: Alias(s): PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x0,0x0,0x0)/HD(2,GPT,B186A074-AE41-495C-BAF3-04AD655A73FB,0x64028,0xE8B0C90) BLK9: Alias(s): PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x0,0x0,0x0)/HD(3,GPT,A1073E53-C768-4CE5-89AD-B558669BDB89,0xE914CB8,0xE8B0C90)
BLK0
似乎是磁盘BLK,因为其路径未显示任何分区编号或UUID- 这是合乎逻辑的,因为固件首先要查找的是磁盘,而不是分区
- 我有BLK1 / BLK2 / BLK9,这是我的3个主要分区
- 由于我从OpenCore加载了APFS驱动程序,因此显示了新的BLK设备,因此添加了更多分区,而这些分区实际上只是APFS容器分区,可以忽略这些分区
- 之所以可以忽略它们,是因为您可以看到它们具有相同的PARTUUID,对于这些分区,我们不在这里
- FS0似乎是BLK1,这是我的EFI分区,它也是FAT32格式的,OC位于其中
- 在多磁盘设置中,FS0:可以是UEFI固件首先检测到的内容,并不意味着OC始终位于FS0中,在这种情况下,FS0:可以指向USB设备或SATA设备。通常,大多数固件将遵循此设置来读取/查找分区:USB> SATA> NVME,这不是规范,因为其他一些固件可以做其他事情(它也取决于引导顺序设置)。
- 检查您的Linux内核是否存在(如果使用systemdboot)
cd FSX:
ls
- 用你的眼睛和脑细胞
- 只需确保在执行任何操作之前已正确读取分区位置
- FS0 / BLK2 / BLK9全部驻留在Sata驱动器中(这是此示例设备的主启动驱动器)
- 这匹配Linux读取设备
sdX
而不是nvmeXnX
- 如果是nvme驱动器,您将看到
Nvme
而不是Sata
- 这匹配Linux读取设备
- BLK9的PARTUUID与我的根文件系统匹配
a1073e53-c768-4ce5-89ad-b558669bdb89
- 但是请记住,它用大写字母表示!
- BLK1和BLK2具有
FSX
可探索性,这意味着UEFI固件可以浏览并读取文件,而BLK9(不是ext4分区)则不能,这意味着UEFI需要合适的驱动程序来加载其内容。
- 标识您的EFI分区(在此示例中为FS0 :)
- 跑
map -r > FSX:\drives_map.txt
- 这将运行
map
并将输出保存到FSX:在一个名为的文件中drives_map.txt
- 需要注意的是UEFI固件使用的Windows风格的路径斜杠
\
不/
- 这将运行
- 跑
- 运行
- 重新启动到其中带有ProperTree的macOS / Linux发行版
3.将启动项添加到OpenCore的配置文件中
- 以防万一:
- 您的内核在系统分区中:
- 为您正在使用的文件系统下载合适的UEFI驱动程序:
- 下载rEFInd(在新窗口中打开)
- 解压缩
- 浏览提取的zip> refind> drivers_x64
- 您会找到以下驱动程序:
- ext4
- ext2
- btrfs
- 选择所需的UEFI驱动程序并将其复制到OC>驱动程序
- 将其添加到您的config.plist中(可以使用ProperTree> File> OC Snapshot)
- 下载rEFInd(在新窗口中打开)
- 为您正在使用的文件系统下载合适的UEFI驱动程序:
- 您的内核位于EFI分区(systemdboot)中,无需设置任何fs驱动程序
- 您的内核在系统分区中:
- (可选)如果使用的是GRUB2,请确保获取的副本
grub.cfg
以获取内核参数 - 在plist编辑器中打开config.plist(推荐ProperTree),在Misc> Entries下,创建一个新的子项,其类型为
Dictionary
:
钥匙 类型 价值 笔记 评论 细绳 无论您想在这里写什么,我都只是评论而已 — 已启用 布尔型 True
/ON
/1
— 姓名 细绳 您想要的操作系统名称 可以是你想要的任何东西 小路 细绳 模板:
PciRoot(your_ids)/ Pci(your_ids)/…/ Type(your_ids)/ HD(X,SCH,PARTUUID,stuff,from_map)/ \到\内核的路径\示例: PciRoot(0x0)/ Pci(0x1D ,为0x0)/ PCI(0x0,0x0)/ NVMe(0x1,9B-64-50-F1-5C-38-25-00)/ HD(6,GPT,608DA4F8-DA9E-4792-829F-A4CF4E5B8B82,0x2C431800,0x3B10800)/\ boot \ vmlinuz-linux
检查下面 争论 细绳 模板:
initrd = \ path \ to \ rd.img \ if \使用过other_kernel_arguments
示例:
initrd = \ boot \ intel_ucode.img initrd = \ boot \ initramfs-linux.img root = PARTUUID = 608da4f8-da9e-4792-829f-a4cf4e5b8b82 ro quiet intel_iommu =在iommu = pt上检查下面 辅助的 布尔型 False
/NO
/0
-False :始终显示-True
:在按下空格之前一直隐藏
-如果将Misc \ Boot \ HideAuxiliary = True设置为True,则需要True- 路径说明:
- your_ids:来自地图文本文件
- 类型:NVMe / SATA
- X:分区号
- SCH:磁盘方案(GPT / MBR)
- 产妇
- stuff,from_map:从地图上获取它们
- \ path \ to \ kernel:这是内核二进制文件的路径
- TL; DR:从地图文本文件复制分区的路径。
- 注意1:
\
对内核路径使用反斜杠,这就是UEFI固件处理文件路径的方式 - 注意2:
/
对PciRoot路径使用常规斜杠,如示例和模板中所示
- 注意1:
- 参数注释:
- 您可以根据需要添加任意数量
initrd=
(如果您使用的是Linux,则应该知道原因和方式) - 您的其他参数与其他任何引导程序相同,您可以直接在配置中添加/删除/修改
- 您可以根据需要添加任意数量
- 路径说明:
- 笔记
- 您可以使用与上述相同的方案来添加其他efi文件或可加载uefi的文件(例如systemdboot efi,Windows bootmgfw.efi …)
- 您将无法使用Ctrl + Enter将其设置为默认启动选项,因此每次启动时都必须选择它。