最近在给一台DELL OptiPlex 7040 PC安装黑苹果, intel i7-6700的CPU, Intel HD Graphics 530的集成显卡, 用的Lilu.kext+IntelGraphicsFixup.kext+IntelGraphicsDVMTFixup.kext来驱动显卡; 使用起来一切正常, 除了开机启动二阶段花屏(八苹果闪烁). 其实对于macOS来说, 是可以原生驱动HD 530, iMac17,1用的就是i7-6700K, HD 530显卡, 而IntelGraphicsFixup.kext+IntelGraphicsDVMTFixup.kext本身并不是能驱动, 只是系统启动前对macOS原生驱动"com.apple.driver.AppleIntelSKLGraphicsFramebuffer"打补丁而已. 如果主板BIOS里有DVMT的选项的话, 把DVMT设置为64~128MB(e.g. 96MB)的话, 是可以免驱启动, 完全不需要使用IntelGraphics*Fixup这两个hotpatch的. 可是主板BIOS里没有DVMT选项呢? 其实大部分BIOS都是有DVMT选项的, 只是并不能通过GUI的方式设置而已; 接下来, 就是介绍如何找到DVMT选项, 并通过hack的方式来修改BIOS(隐藏的选项).
· 首先需要提取主板的BIOS ROM, 我的主要是AMBIOS, 所以我通过AMI Flasher utility提取 很简单, 直接点击Save保存即可, 得到bios.rom · BIOS的固件里, 有一个模块记录着这BIOS所有的配置项, 及每个配置项允许的取值; 这里可以通过UEFITool打开这个rom文件, 然后通过unicode搜索"DVMT", 定位到存储这个配置的模块, 另存为setup.bin · 提取到了setup.bin, 可这个模块是二进制的, 可以通过IFR-Extractor将此BIOS模块转换为可读的文本Setup.txt · 打开Setup.txt(里面不仅仅有DVMT配置项目, 还有各种有用的如"CFG lock"), 找到DVMT Pre-Allocated配置项目, 你到看到这个配置项的VarOffset(理解为地址吧), 如这里的0x350, 以及DVMT的所有的取值, 如0x3 表示96MB · 可是我们要如何更新BIOS里的DVMT这个设置值呢? 刷固件吗? 不, 你开机启动时修改个BIOS设置超频什么的也不用重刷固件呀的, 因为这些值存储在CMOS里; 这里我们可以通过EFI-shell执行一个命令来更新任意配置项的设置(包括任意不可以通过BIOS GUI里没有的配置) · 解压EFI-shell.zip到U盘的任意FAT32分区根目录(e.g. 分区:/EFI/BOOT/bootx64.efi),然后重启用UEFI方式启动这个U盘, 进入到grub命令行, 执行setup_var 0x350 0x3 即可 读取: setup_var 0x350 写入: setup_var 0x350 0x3
设置0x350时忘记拍照的, 这里是在禁用CFG lock, 自己脑补一下即可 · 噔噔噔噔, 你已成功更新DVMT为96MB, 此时可以删除掉显卡的DVMT补丁IntelGraphicsDVMTFixup.kext,正常来说, 也可以免驱了, 删除掉IntelGraphicsFixup.kext也可以正常免驱启动, 更不会有开机八苹果闪烁了! BTW, 你也可以用上述方法去修改任意你想但无法直接GUI选择的BIOS设置哦, 如涉及到CPU电源管理的CFG lock (MSR 0xE2)配置哦! 感觉黑苹果的玩法越来越多了, 以前用软件hotpatch, 现在直接hack BIOS
现在只需要下面这几个kext就可以完美驱动黑苹果了啦
引用链接: https://github.com/irelandKen/DELL-OptiPlex-7040-Clover
https://www.firewolf.science/2015/04/guide-intel-hd-graphics-5500-on-os-x-yosemite-10-10-3/
https://github.com/acidanthera/AptioFixPkg
|