[开始上课]今天的题目是:HD3000、HDMI音频的解法
本帖最后由 easylin 于 2012-6-6 20:34 编辑最近经常有网友抱怨HD3000卡顿,或询问HDMI音频输出的问题,
我在这里合并一个帖子来说,目的是提供关于HD3000的全方位解答
让大家都能完美用上这款性能不错、又节能环保的核显。本教程分两部分:
1、驱动HD3000的关键
2、HDMI音频输出
第一部分 驱动HD3000的关键
其实早在去年这个问题就已经攻破,有些人“丢个mbp81的smbios就完美的飘过”,有些人“死活都不能驱动”,这个问题的难点在哪呢,怎么会差距这么大?原因就在于,HD3000的硬件ID有太多种,苹果官方只用了其中某几种,同样是HD3000,但ID不在苹果官方使用列表里的话,就没驱动上。我们先来看看原生驱动的info.plist
打开/S/L/E/AppleIntelHD3000Graphics.kext/Contents/info.plist可以找到以下内容
0x01068086 0x11068086 0x16018086 01168086 01268086
其中0126是macbookpro和macmini机型使用的HD3000设备代号。那些无法成功驱动的朋友,你们到win设备管理器里看一看,ID是不是都很奇怪,和上面的不同,没关系,我的比你们更怪!我的至强带的HD3000是8086010A,我的都可以成功驱动,所以放心往下看。
接下来的步骤,跟以往修改驱动的方法有所不同。拿N卡来说,5xx要驱动的话,我们是往info里面添加自己的真实显卡ID;但对于Hd3000,我们要做的是往dsdt里加入虚假的显卡id,也就是,从上面5个官方支持的id中挑选一个写进dsdt。骗系统“以为”你的hd3000可支持,开启原生驱动,这就是解决问题的关键。
基于以上分析还可以知道,对于奇怪的ID,是不能使用变色龙GraphicsEnabler =Yes来驱动的,因为变色龙会inject真实ID,并向系统“告密”,造成无法驱动,所以,我们只好用dsdt。当然,如果你的ID正常,是5个其一,就可以用变色龙。
接下来编辑dsdt,找到Device (IGD0)或者Device (GFX0)字段的位置 Device (IGD0)
{
Name (_ADR, 0x00020000)的下面添加 Method (_DSM, 4, NotSerialized)
{
Store (Package (0x06)
{
"device-id",
Buffer (0x04)
{
0x26, 0x01, 0x00, 0x00
},
"model",
Buffer (0x17)
{
"Intel HD Graphics 3000"
},
"hda-gfx",
Buffer (0x0A)
{
"onboard-2"
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}这里我选用0126,你也可以结合自己的机型来选择一个
注意一下前后括弧的匹配
建议把 GFX0 都统一成 IGD0
重启可以看到我的010A已经假冒成0126了
然后放入SMBios.plist,台机建议macmini5.1,本本建议macbookpro8.1
幸运的朋友到这里已经可以成功驱动了,不过有些仍然不行或者很卡
于是接下来修改FB接口位置,用Ultraedit或者HexEdit打开
S/L/E/AppleIntelSNBGraphicsFB.kext/Contents/MacOS/AppleIntelSNBGraphicsFB
跳到0x2A600,或者搜索0102 0400 1007 0000 1007 0000
以下是支持的接口类型
0503 0000 0200 0000 3000 0000 - Internal LCD
0205 0000 0004 0000 0700 0000 - HDMI
0304 0000 0004 0000 0900 0000 - DVI
0406 0000 0004 0000 0900 0000 - DVID
0602 0000 1000 0000 0900 0000 - VGA
原版驱动是这样的:
0102 0400 1007 0000 1007 0000 表示本机拥有4个接口
0503 0000 0200 0000 3000 0000 优先使用内建LCD
0205 0000 0004 0000 0700 0000
0304 0000 0004 0000 0900 0000
0406 0000 0004 0000 0900 0000
我改成这样:
0102 0300 1007 0000 1007 0000 扔掉内建LCD
0205 0000 0004 0000 0700 0000 - HDMI
0304 0000 0004 0000 0900 0000 - DVI
0406 0000 0004 0000 0900 0000 - DVID
0000 0000 0000 0000 0000 0000
可以结合自己情况修改。
由于台式机没有内建LCD,但是Intel的驱动傻傻分不清楚会一直去找,导致其他几个口也都不能正常工作,所以很卡。
然后我们再回到刚才打开的
/System/Library/Extensions/AppleIntelHD3000Graphics.kext/Contents/info.plist里面
01168086 01268086这里,注意到id前面少了0x,我们帮它补上。
顺便加上真实的显卡id,比如我的0x010A8086。
再打开/System/Library/Extensions/AppleIntelSNBGraphicsFB.kext/Contents/info.plist
作同上的修正。虽然有些机器不用,保险起见还是改一下。
重建缓存,修复权限
至此HD3000基本上都可以成功驱动,QE/CI也打开了,有些机子偶尔会有一条色块或图标花了,一会就会自己消失,不影响使用。
第二部分 HDMI音频输出
HDMI音频相对比较麻烦,需要建立在第一部分的基础上,首先必须满足:
1。显卡由dsdt识别,完美驱动
2。声卡由dsdt识别,完美驱动
3。无第三方声显卡enabler捣乱,只用Lion原生驱动AppleHDA(版本号2.1.x,可自行仿冒)
第一部分我们已经改好显卡dsdt,现在开始改声卡,以我的alc892为例
打开dsdt,找到: Device (HDEF)
{
Name (_ADR, 0x001B0000)下面的内容每个人机器不完全相同,注意不要覆盖,而是加入 Method (_DSM, 4, NotSerialized)
{
Store (Package (0x0E)
{
"hda-gfx",
Buffer (0x0A)
{
"onboard-2"
},
"subsystem-id",
Buffer (0x04)
{
0xA0, 0x00, 0x00, 0x00
},
"subsystem-vendor-id",
Buffer (0x04)
{
0x6B, 0x10, 0x10, 0x10
},
"layout-id",
Buffer (0x04)
{
0x88, 0x01, 0x00, 0x00
},
"codec-id",
Buffer (0x04)
{
0x92, 0x08, 0xEC, 0x10
},
"device-type",
Buffer (0x11)
{
"ALC892"
},
"PinConfigurations",
Buffer (Zero) {}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}注意"layout-id"不要照抄了,要换成你自己的声卡id,以往有用dsdt修过声卡的应该都有经验。
重启之后,IORegistryExplorer可以看到:
这样系统里HDMI音频通道就建立了,但是还没用上。
接下来的工作是修改AppleHDA,具体就是把仿冒驱动里的字典移植进AppleHDA,关于这个问题论坛有很多帖子,很成熟了,我不再赘述。 这里提供成品alc892的AppleHDA,是老外toleda修改好的版本,MultiBeast里面也收录了,alc8xx声卡的朋友可以直接下载MultiBeast安装。
10.7.3的AppleHDA:
//***这里无需操作,下载已含
这里要说明的是,不知是由于lion还是alc8xx存在bug,原有的两条Line-out在走hdmi音频的时候会出错,于是删掉了一条Line-out,针对不同音频输出通道定义了两套不同的profile:1.非HDMI音频输出时保持原状:
Audio ID: 892, layout-id: 892 (dec), 0x7C, 0x03, 0x00, 0x00 (hex)
2.HDMI音频输出时:
Audio ID: 392, layout-id: 392 (dec), 0x88, 0x01, 0x00, 0x00 (hex)新增一套392的profile以示区别,避免冲突,内容其实和892一样,只是走hdmi路线。
所以上面dsdt我用的是188(392),声卡不同的朋友可以以此类推。
***//
接下来是很重要的一步,确认显卡frameBuffer接口类型
看图说话,打开ioreg,找到如下位置:
注意左边,是有个display0的上层
再看右边,正确的HDMI音频输出情况要满足:av-signal-type = 8
connector-type = 8使用macmini5.1的朋友这里应该已经是8了,修复权限,重建缓存,重启就可以享受HDMI音频了。
因为白苹果的macmini5.1 就是2 DisplayPort 和 1 HDMI,frameBuffer表里有HDMI信息,那么上面的值基本上都是8。macbookpro8,1因为不带hdmi接口所以上面的值都不是8,还需要继续作修改。
当然这里你有两条路可走,懒得继续改,就抛弃mbp8.1,换macmini5.1就行了,想继续改的话往下看:
这里类似第一部分,用HexEdit编辑AppleIntelSNBGraphicsFB
找到01 02 04 00 10 07 00 00 10 07 00 00
原版驱动是这样的:
01 02 04 00 10 07 00 00 10 07 00 00
05 03 00 00 02 00 00 00 30 00 00 00
02 05 00 00 00 04 00 00 07 00 00 00
03 04 00 00 00 04 00 00 09 00 00 00
04 06 00 00 00 04 00 00 09 00 00 00
改成这样:
01 02 02 00 10 07 00 00 10 07 00 00
02 05 00 00 00 08 00 00 06 00 00 00
05 03 00 00 00 04 00 00 07 00 00 00
03 04 00 00 00 04 00 00 09 00 00 00
04 06 00 00 00 04 00 00 09 00 00 00
至此mbp81也可以使用hdmi输出音频了
大功告成,HD3000 HDMI音频的有关问题我就说到这里,欢迎补充。各位看官是不是看得眼花了呢,相信耐心加细心,你一定可以搞定它的。
最后附上我的dsdt,配置见签名,由于我的主板BIOS已经升级到华硕官方最新的3808版,版本不同的童鞋不能直接用,但是可以把需要的部分贴过去用。
本帖最后由 easylin 于 2012-6-6 13:08 编辑
进一步提高可以看:www.insanelymac.com/forum/index.php?showtopic=259705 注意爬楼,这里的回帖解决了很多问题www.tonymacx86.com/viewtopic.php?f=162&t=31664独立显卡hdmi音频也可以类似处理 不错不错{:5_291:} 感谢分享,下次可以按照LZ的配置一台完美的苹果了。 还是不行啊
我的是ThinkPad E420 1141A86
HD3000的ID是80860116
照您所说应该是可以用变色龙完美驱动
可就是折腾不起来
倒不会黑屏
就是分辨率上不去 好吧,我表示我也准备了此文
-0-
看起来挺复杂的。 我再给楼主加上一条,使用HD3000的HDMI音频输出,每次开机、重启osx,必须重新开启一次显示器,不然声音会变形。以前都是怀疑声卡的驱动有问题,后来在老外的站点看到这个解决方法。 本帖最后由 lsls01 于 2012-6-6 08:54 编辑
请教楼主"onboard-2"这个后面的2是怎么判断的?
另外为什么要在接口那里扔掉内建LCD?这个会有什么影响么?
这个很好,强烈支持 支持,先收藏,放假了慢慢折腾。 怎么.Xeon志强也带核显的么 sorry, i can catch up. jackiezh 发表于 2012-6-6 02:46 static/image/common/back.gif
还是不行啊
我的是ThinkPad E420 1141A86
HD3000的ID是80860116
你可以在变色龙 -v 第一屏还没跳完之前按下pause
看一看变色龙inject的id是不是80860116
有些变色龙版本没有支持hd3000 lsls01 发表于 2012-6-6 08:44 static/image/common/back.gif
请教楼主"onboard-2"这个后面的2是怎么判断的?
另外为什么要在接口那里扔掉内建LCD?这个会有什么影响么? ...
我也是爬文看来的独显hdmi是onboard-1,集显是onboard-2
因为台式机没有内建LCD,但是系统会傻傻分不清楚一直一直找,导致其他几个口也都受影响所以很卡 太及时了~ 本帖最后由 jackiezh 于 2012-6-6 12:30 编辑
easylin 发表于 2012-6-6 10:49 static/image/common/back.gif
你可以在变色龙 -v 第一屏还没跳完之前按下pause
看一看变色龙inject的id是不是80860116
有些变色龙版本 ...
看过了
id确定是80860116
而且系统也识别了:
变色龙和fakesmc我都用上了最新的版本
变色龙:v2.1_r1979
fakesmc: v4.2_rev609
收藏,以后慢慢折腾 jackiezh 发表于 2012-6-6 12:08 static/image/common/back.gif
看过了
id确定是80860116
而且系统也识别了:
你到AppleIntelHD3000Graphics/Contents/info.plist看看
01168086 01268086 前面是不是都没有0x,补上0x看看