概述:
因为:
- 笔记本DVMT pre-allocated memory的默认值时32MB。
- 厂商不会解锁这样的BIOS高级设置。
- 还可以修改BIOS,但是,在刷修改好的BIOS的时候,通不过安全检查。
驱动方法:
这里我大概理解为上面提到的苹果提升了stolen memory 的最小值,所以我们需要改变BIOS里的Dedicated Video Memory的值才可以。
在Windows控制面板,打开“屏幕分辨率”窗口,点击“高级设置”,看 Dedicated Video Memory的值是多少。
经过作者的多次尝试,得出了以下关系:
- 如果 Dedicated Video Memory = 0MB, BIOS设置里的 DVMT pre-allocated memory 就应该是32MB。
- 如果 Dedicated Video Memory = 32MB, BIOS设置里的 DVMT pre-allocated memory 就应该是 64MB。
- 如果 Dedicated Video Memory = 64MB, BIOS设置里的 DVMT pre-allocated memory 就应该是 96MB。
- 如果 Dedicated Video Memory = 128MB, BIOS设置里的 DVMT pre-allocated memory 就应该是 128MB。
Windows控制面板里检测到的Dedicated Video Memory 和 BIOS设置了的 DVMT pre-allocated memory 的关系表如下:
第二种方法查看:
- 按Windows键+ I打开“ 设置”菜单。
- 选择“ 系统”条目,然后单击左侧栏上的“ 显示 ”。
- 向下滚动并单击“ 高级显示设置”文本。
- 在结果菜单上,选择您要查看设置的显示器(如有必要)。然后单击底部的显示适配器属性文本。
- 在新窗口中,您将看到当前视频RAM列在专用视频内存旁边。
规律:
一般,如果BIOS设置里DVMT pre-allocated memory的值小于等于96MB,那么Windows检测到的StolenMemory就应该是(DVMT – 32) MB。
如果BIOS设置里DVMT pre-allocated memory的值大于等于128MB,那么Windows检测到的StolenMemory就应该是(DVMT) MB。(即 等于BIOS里DVMT pre-allocated memory的值)
总之,让 Dedicated Video Memory(Windows检测) >=64MB (相当于 DVMT pre-allocated memory(BIOS里) >= 96MB),就可以避免内核崩溃。
方法一:改BIOS设置
通过给kext打补丁,跳过Stolen Memory assertion(判断)。
我们需要给 AppleIntelBDWGraphicsFramebuffer 的二进制文件打补丁。
查找 39CF763C,把它替换成 39CF773C。
注意:你可以用16进制编辑软件(例如 0xED、或 Hex Fiend) 或者 Clover的KextsToPatch来进行补丁操作。
打过这个补丁后,理论上,就不需要修改BIOS设置了。现在就可以尝试注入ig-platform-id,看看系统的启动、驱动情况。
方法二:EFI Shell 修改 BIOS DVMT值
制作EFI Shell的引导U盘。
需要一个FAT32格式的U盘。
下载EFI Shell,解压后,你可以看到一个叫BOOT的文件夹。
https://www.firewolf.science/wp-content/uploads/2015/04/EFI-shell.zip
把BOOT文件夹复制到U盘的根目录。
1、提取完整的BIOS文件。
可以在Windows下,用一些BIOS工具软件,把BIOS文件提取到桌面。
例如,对于AMI Aptio UEFI BIOS,可以用AMI BIOS Utility软件。
(请根据自己的BIOS类型,搜索对应的提取软件)
2、从得到的BIOS文件里,提取BIOS的设置信息。
用UEFITools打开BIOS文件。找到名字是Setup的这一项,展开,提取PE32 image section,保存为一个二进制文件。
文件会被提取到桌面。以作者的为例,得到文件Setup.bin。
回Windows,打开Universal IFR Extractor软件,用它打开刚才用UEFITools提取好的二进制文件(Setup.bin),点击Extract,把文件保存为普通文本格式。
现在,打开刚才导出的文本文件setup IFR.txt,搜索关键字DVMT。你就可以找到代表了DVMT pre-allocated memory的变量和变量的值。
以上图为例,DVMT pre-allocated memory的变量名是0x1C3,表示96MB的值是0x3。记好这两个值。接下来,重启电脑,用之前做好的EFI Shell启动U盘启动。现在,我们要用 setup_var 命令来修改BIOS的设置。
命令的语法:
- setup_var address value
以作者的为例,命令是 setup_var 0x1C3 0x3 (把变量0x1C3的值,改成0x3,相当于把DVMT改成96MB)。
修改好BIOS里的DVMT pre-allocated memory值后,回到Windows,检查当前Dedicated Video Memory 的值是不是 64MB了。 (96 – 32 = 64MB)
3、注入AAPL, ig-platform-id。
你可以用 Clover 或者 DSDT/SSDTs,来注入AAPL, ig-platform-id。如果用Clover, 需要开启 InjectIntel = True 并且注入 ig-platform-id=0x16160002 。如果用DSDT/SSDT注入AAPL, ig-platform-id,还是注入0x16160002。
打开DSDT, 搜索 Device (GFX0) 或者 Device (IGPU) 或者 Name (_ADR, 0x00020000) ,找到后,在相应位置添加下面的Device-Specific Method:
- Method (_DSM, 4, NotSerialized)
- {
- If (LEqual (Arg2, Zero))
- {
- Return (Buffer (One)
- {
- 0x03
- })
- }
- Return (Package (0x08)
- {
- “device-id”,
- Buffer (0x04)
- {
- 0x16, 0x16, 0x00, 0x00
- },
- “AAPL,ig-platform-id”,
- Buffer (0x04)
- {
- 0x02, 0x00, 0x16, 0x16
- },
- “model”,
- Buffer (0x17)
- {
- “Intel HD Graphics 5500”
- },
- “hda-gfx”,
- Buffer (0x0A)
- {
- “onboard-1”
- }
- })
- }
把修改好的文件放到 /EFI/Clover/ACPI/Patched/ 。
或者使用本贴提供的config注入(用的是0x16160002)。重启电脑,如果顺利,Intel HD Graphics 5500已经驱动了!
花屏和冻屏
显卡驱动后可能还存在的问题及解决办法:
1、花屏:(这里是指进桌面之后花屏,如果是系统启动过程中的花屏,是另外的问题,Broadwell的启动花屏补丁和之前的补丁一样,搜索一下吧。或者,比较推荐自己修改下RehabMan大神的通用config,里面提供的补丁很全)在BIOS开启Legacy Support就可以解决。
2、冻屏(屏幕画面突然卡死):
把DVMT pre-allocated memory 改回 32MB 并给kext打 2.1步的补丁。 (案例:XPS13 2015)
或者先进Windows,再重启进OS X(也就是不要冷启动)。或者就只能等官方更新BIOS了。(案例:Dell Inspiration 7548)
3、CPUSensors.kext引起的Kernel panic:
删除 FakeSMC.kext里面带的 CPUSensors.kext。
4、AppleACPIPlatform.kext 和 Machine Check at 0xHexAddress 引起的Kernel panic:
修改过BIOS后,可能会出现这个问题。(例如修改了BIOS里的DVMT后)
这时,只能删除之前修改好的DSDT.aml 或者 重新在Windows用AIDA64或者在Linux提取原始DSDT.aml。