如何在Catalina中正确安装第三方内核扩展(kext)?

内容源自对于tonymacx86、Reddit的几篇帖子的总结和一些个人经验,macOS和hackintosh适用。

kext的安装位置

  1. 可以放在clover引导分区中,/EFI/Clover/Kexts/Other 路径下,并且记得用clover configurator将Inject Kexts 设置为yes或者在clover启动页面按空格选择注入内核文件。
  2. 可以安装在macOS L/E(/Library/Extensions)或S/L/E目录下。但是这种方法不能直接用finder或者windows下的paragon把文件拖过去,会导致文件所有者和权限的混乱,可以使用第三方gui工具hackintool(我没试过)或者终端下操作(终端操作下文会讲)。相比之下,由于efi分区的文件系统是fat16或者fat32,不会有类似的问题。

为什么相比于使用clover注入内核文件,更推荐把kext安装在L/E?

clover内核注入会带来许多不确定因素

  • 注入的内核文件运行在“受保护的macOS内存空间之外”,这里引号指的内存空间是kernel memory,而注入的内核文件运行在application memory and execution memory,并不受os特别地管理和监视;
  • 注入大量内核文件可能导致系统不稳定;
  • 有些老旧的第三方内核文件注入后不能很好地运行;
  • 注入的内核文件不在内核缓存中,因此不会受到macOS的error checking。

顺便说一下,kext安装在S/L/E和L/E的效果是一样的,但是10.11之后,苹果推荐安装在L/E下。我在clover路径下只放了fakeSMC,其它kext都放在了L/E下。

如何通过终端正确安装kext?

  1. 首先,如果和我一样进不了gui界面,需要进入macOS的single user mode(就是linux的init 1)。
  • 如果是mojave和mojave之前的系统,需要mount -uw / 重新挂载根分区为读写;
  • 如果是catalina,由于新系统启用了SIP,系统文件被存放在了ro volume上,用户文件存放在独立的data volume,前者需要进入macOS的recovery mode,打开终端,执行csrutil disable,重启进入single user mode后,执行mount -uw /方可挂载为读写。后者只是普通地挂载为只读,可以使用mount -uw /System/Volumes/Data 来重新挂载为读写。

2.如果是在gui界面的终端下操作,catalina用户需用以下方法重新挂载根目录(不过我没试过,仅作参考)

sudo spctl --master-disable 
sudo mount -uw
sudo killall Finder
  1. 以下命令都是root下执行,普通用户记得加sudo
  • 拷贝文件到L/E cp -R *.kext /Library/Extensions (我也是windows下才发现kext原来是个包,记得-R递归拷贝)
  • 递归修改L/E下的文件权限chmod -v -R 755 /Library/Extensions
  • 递归修改L/E下的文件owner chown -v -R root:wheel /Library/Extensions
  • 修改时间戳 touch /Library/Extensions
  • 更新缓存kextcache -i
    然后重启即可。如果是S/L/E下,修改方法完全一样,这里就不赘述了。

你可能感兴趣的:(如何在Catalina中正确安装第三方内核扩展(kext)?)