目前有一台具有标准配置(1.8Ghz、8Gb LPDDR3、128Gb PCIe SSD)的 MacBookAir7,2,我当然在其上安装了 Ubuntu。
启动 Ubuntu 后,我立即注意到扬声器的声音非常奇怪。经过一些测试,我发现左扬声器产生大量低频,并且总体上是平衡的,而右扬声器则偏向高频,总体上听起来“刺耳”。这种情况发生在所有非 Apple 操作系统中,包括 Windows 10 和 Ubuntu 16.04.3 LTS,但应该适用于任何具有标准 snd_intel_hda 驱动程序的 Linux 发行版。
音频芯片是 Cirrus Logic 的 CS4208,但是在原生 EFI 启动(我使用,macOS 也使用)下,声音接口显示为 Intel HDA 控制器(在传统启动下,所有 Mac 都将 Cirrus Logic 显示为其自己的设备,这是由 EFI 完成的,它还会在传统启动下禁用配备双 GPU 的 MacBook Pro 上的集成显卡,对于较新的 mac,则禁用原生 EFI 启动。)我有一份 Windows 副本,在安装它时,它也出现了同样的问题(使用 bootmgfw.efi 进行 efi 启动)。因此,作为一名高级用户,我开始研究如何让 macOS 避免出现此问题。
首先,介绍一些背景知识。2011 年之前,所有 Mac 都使用 BIOS-CSM 来启动 Windows(官方说法是,Windows 8.1 及更早版本无法本地启动,因为 Apple 的 EFI 不合规格,而不是 UEFI 实现,)和apple-set-os 协议不存在(我也在 2010 年的 Mac 上测试过),这个问题通过使用 EFI 引导程序加载操作系统得到解决,该操作系统原生地暴露了所有硬件,没有中间层。当 Windows 10 发布时,bootmgfw.efi 意外地在 EFI 1.1 机器上运行(我在 2010 年的 MacBook 上测试过),因为以前 bootmgfw.efi 在尝试加载 Windows 时会冻结。这也大大提高了电池寿命。
2010 年之后,我得出结论,Apple 一定已将其计算机上的 EFI 实现升级为符合 UEFI 2.0 标准,这意味着 Windows 现在可以启动了(当然,在当时是这样)。他们需要一种方法来区分 macOS 和其他操作系统,因为现在他们认可通过 UEFI 安装 Windows(很明显,因为大多数用户都在使用 BootCamp Assistant.app,它可以管理它)。我可以说,很明显,当使用 CSM 启动时,闪烁的光标将显示在屏幕上,并且启动图形会被拉伸(如果使用非 vesa 分辨率,则使用最接近的可用分辨率或 1024x768,这会产生明显的效果)
为了区分这两者,他们在 EFI 中添加了 apple-set-os 协议。将其设置为 Mac OS X 10.* 会原生公开所有硬件,如果不设置,EFI 会应用“兼容层”,如果存在独立 GPU,则会禁用集成 GPU,并更改声音接口的公开方式。开发了一个同名实用程序,可在此处获取:https://github.com/0xbb/apple_set_os.efi这将手动设置该值,这将允许集成显卡显示(这是最初的目标),并允许雷电 gpu 使用 Optimus 或 AMD 等效产品,让集成的英特尔 GPU 驱动内部显示器,这是游戏所需的,因为这将允许外部显卡写入英特尔帧缓冲区(这就是真实的optimus 可以工作,但在这种情况下它可以与外部图形一起使用。
我得到了这个实用程序,将它添加到 refind 中,然后就可以开始了。当调用它并在非苹果操作系统上运行时,它似乎禁用了内部触控板和键盘的一些兼容性接口,这些接口在内部是 SPI,与 macOS 以外的任何设备都不兼容(相关驱动程序是 AppleHSSPIHIDDriver.kext 和 AppleHSSPISupport.kext。)这在 Windows 和 Ubuntu 中都发生了。
在 Windows 中,我使用远程桌面控制 Windows 上的 Mac(除键盘输入和触控板外的所有功能,尽管键盘背光灯可以工作),声音完美。看来 Apple 故意削弱了非 macOS 操作系统的声音,这令人难以置信。或者看起来是这样。我自己检查了一遍又一遍,每次都能明显感觉到差异。设置 apple_set_os 后,键盘和触控板设置为 SPI(或者至少,在比较中不容易看到),内置扬声器的声音完全一致。未设置 apple_set_os 时,内置键盘和触控板可与 Windows 的通用 HID 驱动程序或 Apple 提供的增强型驱动程序配合使用,每次声音都以同样的方式不平衡。
现在,使用 Ubuntu。我尝试了两者。设置 apple_set_os 后,键盘和触控板再次无法检测到,也无法正常工作。但是,扬声器再次发出不平衡的声音。我尝试不设置 apple_set_os,内部输入设备可以正常工作,声音保持不变。但是,有一个区别是,设置 apple_set_os 后,启动期间屏幕上显示的伪影是黑色的,而未设置时,伪影位于相同位置,但 RGB 颜色混乱。
我完全不确定问题是什么。但是,正如在 apple_set_os 破解之后扬声器在 Windows 中听起来正常,而在 Ubuntu 中同样破解之后却不正常一样,这让我感到疑惑。我意识到这个问题很长,而且没有人能真正确定发生了什么,这可能会阻止这个问题得到具体的答案,但我还是想指出这一点,看看是否有任何发现。