为什么kexts是由Boot Loader加载的,而不是在内核获得控制之后

时间:2014-11-19 11:20:51

标签: macos security kernel-module boot hackintosh

我是Hackintosh的新手,现在我正在研究启动过程。

据我所知:

  • efi binary是UEFI固件运行的“字节码”
  • kexts是内核模式设备驱动程序,由机器特定代码编译,由内核加载,在内核模式下运行,内核
  • kexts注入就像动态加载库一样,但在内核模式下

我的问题是,为什么与变色龙/三叶草和kexts等引导加载程序存在某种关系? kexts应该由内核加载而不是引导加载程序,对吗?

我在这看到的东西。 http://cloverboot.weebly.com/kexts.html?bcsi_scan_50b5cc4d2c82cc03=bG/X91Fwptz2CvnL0WdFPvjdTdWsAAAAioMalg==&bcsi_scan_filename=kexts.html

Say Hackintosh需要FakeSMC.kext。但它不是引导程序的业务。引导加载程序需要做的是将Mac OS内核的init代码放入内存并将控件传递给它。应该是Mac OS内核加载FakeSMC.kext。

不是吗?

1 个答案:

答案 0 :(得分:3)

首先,PC过去只有传统BIOS而且没有EFI,但Apple从未使用过传统BIOS,只有EFI。

但是现在已经发生了变化,因为现在大多数现代PC都内置了UEFI,所以不需要模拟EFI。

有两种方法可以在带有旧版BIOS的hackintosh上启动OS X.第一个是Chameleon,第二个是Clover。

Clover和Chameleon以不同的方式加载OS X.

Clover使用DUET EFI的修改版本(在传统bios之上的开源EFI实现),或者如果计算机拥有它自己的内置三叶草的UEFI使用它。 Clover还使用位于/System/Library/CoreServices/boot.efi的OS X分区上的默认引导加载程序来引导OS X.boot.efi加载kexts并将控制权传递给内核,就像在真正的mac上一样。

Chameleon拥有自己内置的假EFI实现,使得内核认为它在EFI Mac上运行。但是伪造的EFI不足以加载boot.efi,所以Chameleon拥有它自己的加载器。变色龙自己加载kexts,然后将控制传递给内核。

两个引导加载程序都内置了ACPI表注入,SMBIOS欺骗,设备ID注入等。

FakeSMC是一个模拟器,模拟真实Mac中的系统管理控制器,其中包含解密Apple Protected Binaries的密钥。

Chameleon将FakeSMC和其他kexts单独加载为独立或者是kernelcache的一部分,如果你使用Clover,boot.efi也可以完成相同的操作。

注意: Clover有一个你可能正在谈论的功能,它可以动态地注入kexts,看起来它们被Clover加载但实际上它们已成为kernelcache的一部分。