Clover 四叶草引导工具 | 技术背景

EFI

EFI(The Extensible Firmware Interface,可扩展固件接口)是位于操作系统和硬件固件之间的一个软件接口。相对于BIOS那最多64kb的可用空间和运行于16位处理器模式,EFI大小可以达到4MB,运行于32位或64位模式,并且理论上是平台无关的。但实际上想要达到全平台兼容是不可能的。

Clover

Clover是一个操作系统启动加载器(boot loader),能够同时运行于支持EFI方式启动的新式电脑和不支持它的老式电脑上。一些操作系统可以支持以EFI方式启动,比如OS X, Windows 7 64-bit, Linux;也有不支持的,比如Windows XP,它只能通过传统的BIOS方式来启动,也就是通过启动扇区来启动。

EFI不仅存在于操作系统的启动过程中,它还会创建操作系统可访问的表和服务(tables and services),操作系统的运行依赖于EFI正确的提供功能。从内建的UEFI来启动OS X是不可能的,用原始的DUET来启动OS X也不可能。CloverEFI和CloverGUI做了大量的工作来修正内部表,让运行OS X成为可能。

译注:DUET(Developer's UEFI Emulation),开发者的UEFI模拟

Clover的任务

  1. 设置SMBIOS (DMI)信息来模拟一台真实的Apple电脑 - 这对于运行OS X系统是必需的。序列号是伪造的,但是有效的。
  2. ACPI表 - 包含在电脑的固件中 - 通常没有被正确的编写而且可能包含bugs,这大多是因为制造商的懒惰:APIC表中包含错误的CPU核心数量,没有NMI数据,FACP表中没有重置寄存器(reset register),错误的电源配置,SSDT表中没有EIST数据,甚至没有DSDT表。Clover试图去修正这些问题。
  3. 接着OS X会从boot loader获取用来描述附加的设备如显卡、网卡或声卡的数据,这些数据就是所谓的EFI字符串(EFI Strings)。Clover产生这些数据。
  4. 基于BIOS的电脑在启动初期,USB运行于旧的模式(legacy mode),当控制权传递给操作系统时,会产生问题。Clover负责改变USB的运行模式。
  5. OS X使用一块特殊的称为NVRAM的内存来进行信息交换,它被包含在运行时服务(RuntimeServices)中(在启动的初期不存在,not present in a legacy loader)。Clover提供这种信息交换,使Firewire功能正常,“启动磁盘”设置面板也可正常使用。附加的NVRAM也用于注册iCloud和iMessage服务。
  6. ConsoleControl协议是必要的并且DUET中没有.
  7. 通过DataHub协议为EFI/Platform填充某些必要的信息,这些信息DUET中没有,而UEFI中也不一定会有。而且会设置非常重要的FSB频率值(FSBFrequency value),因为这个值有时是错的或者根本就没有。
  8. CPU在工作前必须被正确地初始化,但是主板为了兼容大量的不同的CPU,内部表中不包含任何正确的CPU数据。Clover会对安装的CPU做一个完全的检测,修正这些表中的CPU信息。其中的一个效果就是CPU加速模式(turbo mode)能够工作。
  9. 还有一个小问题:DUET和EDK2源码是为了兼容不同的硬件而编写的,但不同的硬件依赖于不同的常量。这意味着每个编译对应一个特定的平台。Clover提供了自动平台检测。

相关推荐

weinxin
黑苹果社区公众号
扫一扫随时掌握黑苹果社区最新动态
超级管理员
发表评论

您必须登录才能发表留言!

目前评论:1   其中:访客  1   博主  0

  1. 超级管理员 8885 4

    禁止垃圾评论或外借账号!发现后封号处理!

    登录者:8885