0

我对 Hackintosh 很陌生,现在我正在研究启动过程。

我所知道的:

  • efi 二进制文件是 UEFI 固件运行的“字节码”
  • kexts 是内核模式设备驱动程序,它编译在机器特定代码中,由内核加载,与内核一起在内核模式下运行
  • kexts 注入类似于库的动态加载,但在内核模式下

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

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

假设 Hackintosh 需要 FakeSMC.kext。但这不是引导加载程序的业务。bootloader 需要做的就是将 Mac OS 内核的 init 代码放到内存中,并将控制权交给它。应该是 Mac OS 内核加载 FakeSMC.kext。

不是吗?

4

1 回答 1

3

首先,过去的 PC 只有旧版 BIOS,没有 EFI,但苹果从未使用过旧版 BIOS,只有 EFI。

但这已经改变,因为现在大多数现代 PC 都内置了 UEFI,因此无需模拟 EFI。

有两种方法可以在带有旧版 BIOS 的 hackintosh 上启动 OS X。第一个是变色龙,第二个是三叶草。

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

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

Chameleon 有自己内置的假 EFI 实现,使内核认为它在 EFI Mac 上运行。但是那个假的 EFI 不足以加载 boot.efi 所以 Chameleon 有它自己的加载器。Chameleon 自己加载 kext,然后将控制权交给内核。

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

FakeSMC 是一个模拟器,它模拟真实 Mac 中的系统管理控制器,其中包含解密 Apple 保护二进制文件的密钥。

Chameleon 将 FakeSMC 和其他 kexts 作为独立或内核缓存的一部分单独加载,如果您使用 Clover,则 boot.efi 可以完成同样的事情。

注意:Clover 有一个您可能正在谈论的功能,即动态注入 kext,使其看起来像是由 Clover 加载的,但实际上它们成为内核缓存的一部分。

于 2015-03-27T21:44:30.583 回答