- 积分
- 2870
- 最后登录
- 2024-3-24
- 精华
- 2
- 阅读权限
- 50
- 主题
- 85
- UID
- 3322572
- 帖子
- 7001
- PB币
- 34744
- 威望
- 10
- 贡献
- 0
- 技术
- 4738
- 活跃
- 929
- UID
- 3322572
- 帖子
- 7001
- PB币
- 34744
- 贡献
- 0
- 技术
- 4738
- 活跃
- 929
|
沙发
发表于 2014-2-19 20:06:39
IP属地云南
|只看该作者
本帖最后由 daxuexinsheng 于 2014-3-17 10:25 编辑
方案一,使用Clover引导的FakeID功能,把桌面版HD4400的设备id仿冒成苹果的显卡驱动支持的设备id。
FakeID功能位于Clover引导程序的Devices模块。它是一个把苹果原本不支持的PCI设备的DeviceID和VendorID属性仿冒成苹果原生支持的某个设备的DeviceID和VendorID,从而使系统能够为这个“不支持的设备”加载原生驱动,并让它能够工作的方法。
如下面的例子:(引用自Clover官方和解答组成员g958的Clover综合贴,感谢。)
AMDRadeonHD7850没有被支持,DeviceID = 0x6819。可以替换为0x6818(新版已支持)
戴尔无线网卡1595,DeviceID = 0x4315不支持。可以替换为0x4312。
网卡Marvell Yukon 8056,DeviceID = 0x4353。可以替换为0x4363。
还有其它已知的不支持设备的替换。
FakeID功能生效的条件:
只有当injectATI(NVIDIA,Intel)被设置或在FixDSDT面板里设置了该设备时,这种替换才生效。
综上,对于桌面版HD4400有如下的设置。
(大部分桌面版HD4400的设备id为041E,不在苹果原生支持列表,可以使用Clover的FakeID将其在每次启动时,临时替换成苹果原生支持的设备id。比如桌面版HD4600的设备id-0412。或者替换为其它的id。)
(Clover的具体设置,请自行到置顶贴学习,这里只给出所需部分的配置。)
<key>Devices</key>
<dict>
<key>FakeID</key>
<dict>
<key>IntelGFX</key>
<string>0x04128086</string>
以上是仿冒设备id的配置,之后,是尝试驱动它的配置。
<key>Graphics</key>
<dict>
<key>Inject</key>
<dict>
<key>ATI</key>
<false/>
<key>Intel</key>
<true/>
<key>NVidia</key>
<false/>
</dict>
<key>VRAM</key>
<integer>1024</integer>
<key>ig-platform-id</key>
<string>0x0d220003</string>
</dict>
先按以上设置试试,有可能,还需要在Windows下获取屏幕的EDID,再用Clover注入。在Windows下获取屏幕的EDID可以使用EDID Manager软件,注入可以在Mac下用Clover Configurator软件,把EDID粘贴到相应区域就可以了。(虽然显卡目前还没有驱动,但一般还是可以进入系统,进行这样的操作。)
以上操作全是对Clover的config.plist的配置,就可以完成方案一的操作。对于FakeID只能通过对config.plist配置实现,但是,尝试驱动显卡还有使用向DSDT加入显卡信息的方法。在本帖,楼主也想借此机会,把之前的贴子没能介绍全面的方面进行补充。
除了使用参数注入,还可以使用DSDT注入显卡信息。是对其显卡部分的Method(_DSM)进行修改实现的。一般,电脑的显卡设备定义在DSDT或者某一个SSDT中,名字一般是Device (GFX0)或者Device (IGPU),它们的{}大括号的范围里,可能已经有了Method(_DSM),也可能没有。没有的话加上就行。有的话,为了简单,可以直接替换原来的。
如果显卡部分在SSDT里,可以把它移到DSDT里。(一般显卡部分在SSDT的情况是,那个SSDT里,从软件的左边栏看,只有一个\_.SB.PCI0,它的下面就有显卡设备了。)
显卡设备代码的迁移方法:
1、把包含Device (GFX0)的SSDT里的整个
Scope (\_SB.PCI0) {
}
一般复制到整个SSDT的倒数第二个“ } ”。把这些内容复制到DSDT。那么,要粘贴到哪里呢?
2、在打开DSDT的编辑软件的左边栏,随便点击一个“_SB.PCI0”,在软件的右边会跳转到那里,把以上的内容粘贴到“Scope (_SB.PCI0)”的上方。仅仅把以上内容复制到DSDT还不够,还需要把以上内容用到的其它信息复制到DSDT。
3、接下来复制的信息是在同一个SSDT中,在代码的开始往后一点的地方,一般是这样的:
OperationRegion (SANV, SystemMemory, 0x92FB7D98, 0x0141)
Field (SANV, AnyAcc, Lock, Preserve)
{
}
需要把它粘贴到DSDT中的类似的地方,比如DSDT的开始往后一点的地方也有OperationRegion,把以上代码粘贴到DSDT中的第一个OperationRegion的上方。
4、如果出现错误“Object already exits in scope (一个名字)”,搜索提示的名字,把DSDT最开始的地方的
External (那个名字)
把这一行代码删除。
5、如果出现错误“Object does not exits (一个名字)”,可以到SSDT中,把相应的
External (那个名字)
把它复制到DSDT开头的很多的External语句的前面或者后面。
注入显卡信息:
现在,显卡部分已经在DSDT里了,可以向它添加更多的信息了。
首先,要有黑苹果必需的一个函数-DTGP,可以使用软件打补丁的方式添加。
之后,就可以添加显卡注入代码了。在Device(GFX0) { }或者Device (IGPU) { } 的最后一个“}”之前添加(如果原来就有Method(_DSM),就替换它。)
- Method (_DSM, 4, NotSerialized)
- {
- Store (Package (0x16)
- {
- "AAPL,slot-name",
- Buffer (0x08)
- {
- "Slot -1"
- },
- "built-in",
- Buffer (One)
- {
- 0x01
- },
- "AAPL,HasPanel",
- Buffer (0x04)
- {
- 0x01, 0x00, 0x00, 0x00
- },
- "AAPL,Haslid",
- Buffer (0x04)
- {
- 0x01, 0x00, 0x00, 0x00
- },
- "AAPL,backlight-control",
- Buffer (0x04)
- {
- 0x01, 0x00, 0x00, 0x00
- },
- "@0,backlight-control",
- Buffer (0x04)
- {
- 0x01, 0x00, 0x00, 0x00
- },
- "@0,AAPL,boot-display",
- Buffer (0x04)
- {
- 0x01, 0x00, 0x00, 0x00
- },
- "device-id",
- Buffer (0x04)
- {
- 0x12, 0x04, 0x86, 0x80
- },
- "AAPL,ig-platform-id",
- Buffer (0x04)
- {
- 0x03, 0x00, 0x22, 0x0d
- },
- "AAPL00,DualLink",
- Buffer (0x04)
- {
- 0x01, 0x00, 0x00, 0x00
- },
- "hda-gfx",
- Buffer (0x0A)
- {
- "onboard-1"
- }
- }, Local0)
- DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
- Return (Local0)
- }
复制代码 其中,
"AAPL00,DualLink",
Buffer (0x04)
{
0x01, 0x00, 0x00, 0x00
},
是1600*900 及以上的分辨率的,才需要添加。另一个作用,好像可以解决笔记本内屏黑屏的问题。
如果还需要使用DSDT注入EDID,可以参考这个贴子。https://bbs.pcbeta.com/viewthread-1281844-1-1.html
楼下还有其它的方案。
|
|