Thinkpad E40 Mountain Lion 完善过程分享 - 编辑中
本帖最后由 nksmiles 于 2012-7-28 07:56 编辑说明:本帖并无本人原创内容,所有完善方法、资源均来自于pcbeta或者insanelymac论坛。
资源115统一下载:
http://115.com/folder/fetlme73
电池驱动:(适用Lion和Mountain Lion)
颜色文件:
显示器文件:
键鼠驱动1:
键鼠驱动2:
一、目录
1楼…………更新说明,资料下载,目录
2楼…………系统安装、plist配置、FakeSMC等
3楼…………显卡驱动,修改过程、注意事项
4楼…………DSDT修改
5楼…………声卡驱动,修改过程、注意事项
6楼…………电池、键鼠、网卡及其他
下文所需工具下载:
PlistEditPro:
官网:http://www.fatcatsoftware.com/plisteditpro/
HexEdit:
官网:http://www.ifd.com/product_info.php?products_id=87
系统安装、plist配置、FakeSMC等
本帖最后由 nksmiles 于 2012-7-28 08:13 编辑二、系统安装,plist配置、FakeSMC等
2.1 安装盘制作、引导工具
2.1.1 安装盘制作
MacPE - 编辑中
Mountain Lion GM版出来时就打算折腾了,因为Apple一般GM就是正式版,事实ML仍然如此。可惜一直没有时间,今天终于抽出时间重新安装了ML,安装时没有用懒人版,只是自己动手做了个安装盘,只是将mach_kernel、Package文件夹放到了BaseSystem.dmg里面,然后替换了OSInstall和OSInstall.mpkg。
本以为轻车熟路应该很容易,结果重启安装后用HJMac UDT引导出现了Resetting IOCatalogue然后没有反应。加-x参数后仍然没法启动,后来将自己原来在Lion下用的org.chameleon.Boot.plist文件和SMBios.plist文件以及FakeSMC.kext放进了HJMac UDT里面成功引导了。
2.1.2 引导工具
推荐使用HJMac的UDT,非常强大的工具,集成了各种常用的工具、软件。对于新手或者手上没有Mac系统的人来说,个人觉得比Win版变色龙好用的多。
HJMac Plus: 涉及参数说明:
1、CSTUsingSystemIO、GenerateCStates、GeneratePStates参数,设为Yes,使用变色龙开启CPU降频;
2、Default Partition,设置默认启动分区;
3、Kernel Flags,添加npci=0x2000在我的E40上没有发现其他作用,但可以解决开机没有小菊花的问题。
4、UseKernelCache,Lion下这个参数设为Yes可以提高开机速度。但是Moutain Lion DP1~DP2下必须设为No,否则开机异常!
5、USBBusFix,修复USB内建问题;
6、UseMemDetect,识别内存,E40设为No也可以正常识别。
2.2.2 SMBios.plist文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>SMbiosdate</key>
<string>07/26/10</string>
<key>SMbiosvendor</key>
<string>Apple Inc.</string>
<key>SMbiosversion</key>
<string>MBP61.88Z.0057.B0C.1007261552</string>
<key>SMboardmanufacter</key>
<string>Apple Inc.</string>
<key>SMboardproduct</key>
<string>Mac-F22589C8</string>
<key>SMboardversion</key>
<string>Not Specified</string>
<key>SMchassismanufacter</key>
<string>Apple Inc.</string>
<key>SMchassisserial</key>
<string>C02CJ2DNDC79</string>
<key>SMchassisversion</key>
<string>Mac-F2268DAE</string>
<key>SMfamily</key>
<string>MacBook Pro</string>
<key>SMmanufacter</key>
<string>Apple Inc.</string>
<key>SMmanufacturer</key>
<string>Apple Inc.</string>
<key>SMproductname</key>
<string>MacBookPro6,1</string>
<key>SMserial</key>
<string>C02FR2D2DC79</string>
<key>SMsystemversion</key>
<string>1.0</string>
</dict>
</plist>用于设置机型信息,这里把E40机型设为MacBookPro6,1型号,合理设置机型可以更好的发挥硬件性能,可以直接使用Chameleon Wizard进行设置。序列号也是自动生成的。另外,smbios.plist文件设置的机型必须与FakeSMC相对应!
2.3 FakeSMC
最新版FakeSMC下载:
https://bbs.pcbeta.com/viewthread-1012276-1-1.html p.H
注意:下载回来的FakeSMC不能直接使用,需要手动设置机型和REV值,设置方法和设置值参考紫米和落下爱的帖子:
https://bbs.pcbeta.com/viewthread-799385-1-1.html 紫米
https://bbs.pcbeta.com/viewthread-973896-1-1.html 落下爱
似乎紫米的参数和落下爱帖子里提供的参数并不完全一致,比如这里用的MacBookPro6,1的值就恰好不同,我采用了落下爱的值。
机型smc-compatibleREV
MacBookPro6,1smc-piketon{0x01,0x62,0x0f,0x00,0x00,0x06}1.62f6AWIPAAAG
更简单的设置方法是直接使用PlistEditPro编辑info.plist文件,包括参数对应关系,见下图。
https://bbs.pcbeta.com/data/attachment/album/201204/15/073247folqzp2oqke77ueu.png
显卡驱动,修改过程及注意事项
本帖最后由 nksmiles 于 2012-4-15 18:51 编辑三、显卡驱动,修改过程及注意事项
ATI 4系的显卡经过大家的努力已经比较成功的驱动了,当然国际象棋仍然死机的问题还无法解决。无论是Shrike参数还是Peregrine参数,都必须保证安装后的系统S/L/E目录下有以下7个原始文件:
ATI4600Controller.kext (加入ID)
ATIFramebuffer.kext
ATISupport.kext
ATIRadeonX2000.kext (确认有ID)
ATIRadeonX2000GA.plugin
ATIRadeonX2000GLDriver.bundle
ATIRadeonX2000VADriver.bundle并且要确认ATI4600Controller.kext和ATIRadeonX2000.kext内的info.plist文件中有显卡硬件id(0x95531002)
3.1 修改FrameBuffer使用Shrike参数驱动显卡
最早是按照crazybirdy的帖子修改FrameBuffer参数实现QE/CI开启的,但当时对各个参数了解并不清晰,所以驱动后仍存在不少问题,后来经绝情奶牛提醒,参照 Arkzenith 的帖子,才算对这些参数有个比较清晰的了解。参照教程:
https://bbs.pcbeta.com/viewthread-848362-1-1.html crazybirdy
https://bbs.pcbeta.com/viewthread-857076-1-1.html crazybirdy
https://bbs.pcbeta.com/viewthread-991835-1-1.html Arkzenith
crazybirdy第一篇帖子和Arkzenith的帖子中都有对各个参数的说明,感兴趣的可以自己详阅参数含义,这里仅对E40的显卡涉及部分做一些说明。相比较而言,对于获取显卡信息,Arkzenith的方法更容易操作,尤其是大多数其实安装完系统能够进入OS X系统在图形界面操作,不需要开机时-s进入单用户模式操作。所以这里以Arkzenith的方法讨论。
首先是用Arkzenith提供的两个工具获取port.txt和route.txt。解压Arkzenith帖子里的两个zip文件,得到redsock_bios_decoder和radeon_bios_decode。
开启终端,用cd命令切换到解压后两个文件所在目录,执行命令:./radeon_bios_decode < ati9462.rom > port.txt得到port.txt,类似于下述文本:
ATOM BIOS Rom:
SubsystemVendorID: 0x17aa SubsystemID: 0x215b
IOBaseAddress: 0x2000
Filename: BR41628.001
BIOS Bootup Message:
BR41628.001 M92 DDR3 64bit 720e/800m
PCI ID: 1002:9553
Connector at index 0
Type [@offset 45748]: VGA (1)
Encoder [@offset 45752]: INTERNAL_KLDSCP_DAC1 (0x15)
i2cid [@offset 45810]: 0x95, OSX senseid: 0x6
Connector at index 1
Type [@offset 45758]: HDMI-A (11)
Encoder [@offset 45762]: INTERNAL_UNIPHY (0x1e)
i2cid [@offset 45833]: 0x91, OSX senseid: 0x2
Connector at index 2
Type [@offset 45768]: LVDS (7)
Encoder [@offset 45772]: INTERNAL_UNIPHY2 (0x21)
i2cid [@offset 45860]: 0x90, OSX senseid: 0x1再次执行命令:./redsock_bios_decoder < ati9462.rom > route.txt得到route.txt文件,类似于下述文本:
BR41628.001 :
BR41628.001 M92 DDR3 64bit 720e/800m
Subsystem Vendor ID: 17aa
Subsystem ID: 215b
Object Header Structure Size: 197
Connector Object Table Offset: 32
Router Object Table Offset: 0
Encoder Object Table Offset: 97
Display Path Table Offset: 10
Connector Object Id which is
encoder obj id which is linkb: false
Connector Object Id which is
encoder obj id which is enc 0x1)] linkb: true
Connector Object Id which is
encoder obj id which is enc 0x4)] linkb: false我们需要修改的原始Shrike参数为:
02 00 00 00 40 00 00 00 09 01 00 00 02 01 00 03
02 00 00 00 00 01 00 00 09 01 00 00 20 01 02 02
00 04 00 00 04 03 00 00 00 01 00 00 10 00 01 01我们需要对这些参数进行修改以驱动显卡。这些参数是由以下部分组成的(修改后的参数):
Connector_Type接口类型ATY_ControlFlags接口标志位Features显示特性Alignment对齐位TransmitterEncoderHotPlugIDSenseID
VGA10 00 00 0010 00 00 0000 0100 0000100206
HDMI00 08 00 0000 02 00 0000 7100 0020010102
LVDS02 00 00 0040 00 00 0009 0100 0012040001
接口类型这一列应该是没有任何疑问的,有非常明确的定义:
#define CONNECTORTYPE_LVDS 0x00000002 /* 内置低电压LCD ,比如说笔记本上的LCD */
#define CONNECTORTYPE_VGA0x00000010 /* VGA 接口 */
#define CONNECTORTYPE_HDMI 0x00000800 /* HDMI 接口*/
接口标志位是与接口类型对应的,也很容易确定:(0x0100待测试)
接口类型> 可以对应接口标志位
0x0002 : LVDS > ControlFlag : 0x0040 / 0x0100
0x0010 : VGA> ControlFlag : 0x0010
0x0800 : HDMI > ControlFlag : 0x0200
显示特性,直接参照Arkzenith的说明:
显示特性: 这个是用来说明你的显示器有什么样的特性, 比如说支持背光 ,这个数值是根据数据位来启用响应的功能的, 前面两个字节决定特性, 后面的两位决定功能(根据我自己的研究,但是我的设备有限, 目前只知道支持音频传输HDMI, 可以设置成 71 来开启音频传输 ), 比如说HMDI 可以传输音频数据 就是 00 71, 内置LCD 支持背光, 就是09 01
对齐位,无实际意义,略过。
Transmitter,参见获取的route.txt,用redsock工具得到的文件中txmit后面的就是Transmitter值。
就是发射器 transmiter 根据ATI 的技术资料, 现在的transmitter 一般都是使用UniPhy 的, DEC3.2协议以后一般都是使用3个UniPhy, DEC 2.0 和DEC 3.0 比较混乱, 使用两个个UniPhy 和 有可能1个DAC , 在DEC2.0 协议以前一般都是使用DAC, 所以请根据你的显卡支持的DEC 协议类型决定, 不过, redsockosx , 可以直接读取bios 的资料, 我们根据redsockosx 改就好了, redsockosx 的作者真是大好人, 虽然那我不知道他是谁, 哈哈
Encoder,同样参见route.txt,enc后面的值就是Encoder值。
就是编码其 encoder 这个东西是用高8位和底8为来决定, 是使用数字encoder 还是模拟encoder 的 ati4000的一般分为两类, 一类是数字转模拟信号的编码器, 另一类是数字信号编码器, 现在新的显卡5000 以后一般都是只有数字信号编码器, 增加到6个数字信号编码器, 之前的一般都是2个, 再早的一般是2类,数量比较混乱
HotPlugID,参数含义参照Arkzenith的说明:
他在Apple的驱动中有两个作用, 一个是编排主次显示其的顺序, 一个是识别这个接口是否有数据线接入, 这个可以自定义, 主显示端口一般是排在高位, 第一个用00 表示, 第2个01 , 第3个02 , 以次类推, 不过有的显卡00 代表全部接口通电, 所以建议从01开始排,另外有些厂商设置显卡是从靠近主板哪段设置位起始端口, 有些是反过来的, 建议大家自己决定, 笔记本就更乱了
在crazybirdy的说明中,这个参数是可以通过显卡rom文件获取的,不过根据Arkzenith的说明,这个参数是完全可以自己调整的。按照crazybirdy的方法获取的HotPlugID顺序应为00,01,02,但是绝情奶牛按照Arkzenith的说明,调整为02,01,00,目前效果良好。这个参数设置对于睡眠唤醒黑屏有影响,应把主显示器设为00。参考绝情奶牛的帖子:
https://bbs.pcbeta.com/viewthread-1007595-1-1.html
SenseID,参数含义参照Arkzenith的说明:
接口映射的电路线图,这个比较重要, 是否黑频就看这个了, (花屏多数是transmitter 和encoder 的接错了,导致的), 这个值是根据我们用我们导出的port.txt 中文件 里的senseID 设置的, senseID 是多少, 这个就是多少, 比如说我的ATI4860 HDMI 的是04, 那我这里就把接口类型位HDMI 的那行代码的senseID 设置位04 , 就可以了
这样就得到了目前能够比较好的驱动E40显卡的参数:
10 00 00 00 10 00 00 00 00 01 00 00 00 10 02 06 00 08 00 00 00 02 00 00 00 71 00 00 20 01 01 02 02 00 00 00 40 00 00 00 09 01 00 00 12 04 00 01使用HexEdit打开ATI4600Controller.kext/Content/MacOS/ATI4600Controller文件,将原来的Shrike参数替换为上面得到的参数即可。
目前驱动效果:VGA可用,HDMI待测试,DVD可用,PPT可播放,但国际象棋仍然死机。
3.2 使用Peregrine参数驱动显卡
使用Peregrine参数驱动显卡其实非常简单,只需要驱动识别,无需额外的参数破解、修改,所以相对容易,只要硬件ID已经加入到ATI4600Controller.kext和ATIRadeonX2000.kext内的info.plist文件中,可以直接到 crazybirdy 的帖子里下载一个ATY_Init.kext 即可驱动。但这种方法识别的驱动DVD播放程序会退出,PPT无法全屏播放。胜在方法简单。
3.3 显卡驱动识别
显卡驱动识别可以通过三种方法,一是变色龙boot文件添加显卡硬件id,通过GraphicsEnabler=Yes识别;二是修改DSDT将显卡ROM庞大的信息加入到DSDT中去;三是使用ATY_Init.kext,会自动传输值到驱动内存中以识别显卡。
推荐使用ATY_Init.kext的方法识别显卡驱动,操作简单而且变色龙、系统等升级不需要对他做变动。
3.4 亮度调节与使用ACPIBacklight.kext实现开机亮度保存
参考贴:https://bbs.pcbeta.com/viewthread-927563-1-1.html
使用ACPIBacklight.kext必须保证\_SB.PCI0.PEGP.VGA.LCD下面同时存在以下四个函数:_DOS _BCL _BCM _BQC。按照tmacyunn 的说明,系统必须已经加载AppleBacklightDisplay.kext才能使用,但是我在Lion下通过Kext Wizard查看已加载扩展,没有AppleBacklightDisplay.kext,倒是有个AppleBacklightExpert.kext被加载。反正最后成功使用ACPIBacklight.kext了。
相应的DSDT代码支持参见4楼章节4.2。
另外,使用p.H的方法可以保证睡眠、重新登录亮度恢复为最大的问题:
https://bbs.pcbeta.com/viewthread-1004593-1-1.html
3.5 添加显示器EDID和颜色文件
3.5.1 添加显示器EDID信息
注:在E40上添加EDID信息没有对驱动或显示有明显改善,而且添加EDID信息可能会对分辨率造成限制。仅提供方法供参考。
延伸显示能力识别(Extended display identification data,简称EDID)是指萤幕解析度的资料,包括厂商名称与序号,一般EDID存在于显示器的PROM (programmable read-only memory) 或是EEPROM内。一般如要读取EDID都是透过I2C,slave address是0x50。目前HDMI 1.0 - 1.3c 使用EDID 结构1.3版。
许多现成的套装软体都可以读取并显示EDID 资讯, 像是read-edid和Powerstrip可以使用于Windows之上, 又如XFree86 (将EDID 资料输出到log档, 如果verbose logging 是在(startx -- - logverbose 6)) 可以使用于Linux平台上,以及BSD unix。在Linux平台上你也可以看到raw EDID 的十六进位格式,只要你执行"xrandr --verbose"。 Mac OS X平台上可自然的读取EDID 资讯(见/var/log/system.log or hold down Cmd-V on startup) 并加以程式化,像是SwitchResX 或DisplayConfigX可以显示其资讯.
1、在Windows下用EDID Manager获取EDID信息:
https://bbs.pcbeta.com/data/attachment/album/201204/15/182133p6ms9ei6werkbm3k.png
整理为一行连续的EDID信息:
00FFFFFFFFFFFF0030AEA0400000000000130103801F1178EA87F594574F8C2727505400000001010101010101010101010101010101411C56A0500016303020250035AE10000019CA16566F500016303020250035AE100000190000000F008C09328C09281609004CA34154000000FE004C544E313430415430374C30310055其实E40的显卡在使用修改ATI4600Controller.kext里的framebuffer驱动后用IORegistryExplorer也可以查看到EDID信息,而且与Windows下获取的是相同的。说明不需要添加EDID文件也已经完全识别。(在IORegistryExplorer搜索display,在display0下面的AppleBacklightDisplay中有个IODisplayEDID。)
2、根据VendorID和ProductID信息修改/创建显示器EDID文件:
https://bbs.pcbeta.com/data/attachment/album/201204/15/1827450c8tz45k400dc08c.png
根据IORegistryExplorer的信息,显示器的VendorID为30ae,ProductID为40a0,修改 /System/Library/Displays/Overrides/DisplayVendorID-30ae/DisplayProductID-40a0文件(如不存在,则创建相应的文件夹和文件),将上面获取的EDID信息填入IODisplayEDID内。然后将VendorID和ProductID转换为10进制后也填入(参考上图)。
可以将EDID信息留空,只设置一下显示器名称等。
3.5.2 添加联想官网提供的icm颜色文件,改善E40显示异常
ThinkPad官网提供显示器描述文件的下载:
http://support.lenovo.com/en_US/detail.page?LegacyDocID=MIGR-62923
下载后在Windows下运行,会解包到C:\DRIVERS\WIN\MONITOR,包括多个icm文件,通过查看显示属性里的颜色管理,可以看到对应的是TPLCD60.ICM:
https://bbs.pcbeta.com/data/attachment/album/201204/08/185343hdqttf8zhzwcuzby.png
将C盘C:\DRIVERS\WIN\MONITOR下的TPLCD60.ICM 文件复制出来,进入OS X系统,将其复制到 /System/Library/ColorSync/Profiles 或 /Users/你的用户名/Library/ColorSync/Profiles/ 下,从系统偏好设置-显示器-颜色中选择Thinkpad的颜色文件即可修正颜色显示。
DSDT修改
本帖最后由 nksmiles 于 2012-4-15 09:54 编辑四、DSDT修改
4.1 添加苹果方法函数
要想使用苹果的原生驱动,添加苹果的方法函数是必须的,可以在DSDT开始部分或者第一个Scope (\){…}后添加。
//// DTGP method to support Apple MacOS native driver
Method (DTGP, 5, NotSerialized)
{
If (LEqual (Arg0, Buffer (0x10)
{
/* 0000 */ 0xC6, 0xB7, 0xB5, 0xA0, 0x18, 0x13, 0x1C, 0x44,
/* 0008 */ 0xB0, 0xC9, 0xFE, 0x69, 0x5E, 0xAF, 0x94, 0x9B
}))
{
If (LEqual (Arg1, One))
{
If (LEqual (Arg2, Zero))
{
Store (Buffer (One)
{
0x03
}, Arg4)
Return (One)
}
If (LEqual (Arg2, One))
{
Return (One)
}
}
}
Store (Buffer (One)
{
0x00
}, Arg4)
Return (Zero)
}
//// end of DTGP method另外,修复重启BIOS重置也是必须的查找(RTC)或者(RTC0)字段,将里面的 0x04 //Length或
0x08 //Length修改为:
0x02, // Length ////modify from 0x08/0x04 to avoid BIOS reset
另外Lion和Mountain Lion睡眠后再次重启仍会重置BIOS,需要破解AppleRTC才可以,具体参考6楼。
4.2 显卡DSDT代码
4.2.1 显卡亮度调节
在\_SB scope下面加入PNLF Device
//// code for brightness adjust
Device (PNLF)
{
Name (_HID, EisaId ("APP0002"))
Name (_CID, "backlight")
Name (_UID, 0x0A)
Name (_STA, 0x0B)
}
//// end of code for brightness4.2.2 ACPIBacklight.kext支持代码
1、在Device (VGA)下面添加_DSM函数:
//// add to support ACPI backlight
Method (_DSM, 4, NotSerialized)
{
Store (Package ()
{
"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
},
"@0,built-in",
Buffer ()
{
One
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
//// end2、在Device (LCD)下面添加:_DOS 函数(其他三个_BCL _BCM _BQC已经存在。)
//// add to support ACPI backlight
Method (_DOS, 1, NotSerialized)
{
Store (And (Arg0, 0x03), SWIT)
}
//// end4.3 添加声卡代码
查找Device (HDEF)字段,技嘉主板是AZAL,将AZAL改为HDEF即可。ASUS是HDAU,ATI是SBAZ,同样将其改为HDEF即可。在Device (HDEF)内添加_DSM函数。然后E40需要修改后的代码如下:
//// code to support apple audio driver
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x0A)
{
"codec-id",
Buffer (0x04)
{
0x69, 0x02, 0xEC, 0x10
},
"layout-id",
Buffer (0x04)
{
0x0D, 0x01, 0x00, 0x00
},
"device-type",
Buffer (0x25)
{
"Realtek ALC269 @ Intel Ibex Peak PCH"
},
"hda-gfx",
Buffer (0x0A)
{
"onboard-1"
},
"PinConfigurations",
Buffer (Zero) {}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
////end of audio _DSM method其中里面的参数layout-id涉及到AppleHDA的正确驱动,这里0x010D=269,与AppleHDA里面的layout-id为269对应。另外可以通过设置PinConfigurations的Buffer值来显示音频内建的具体信息。如果AppleHDA正常驱动,不需要设置,会自动从AppleHDA中读取。
ALC269 codec 声卡驱动,修改方法、注意事项,已完美工作!
本帖最后由 nksmiles 于 2012-4-15 10:34 编辑五、声卡驱动,修改方法、注意事项
声卡驱动相对比较容易,可以直接使用VoodooHDA.kext驱动,只需要把声卡硬件ID加入即可,但是VoodooHDA最新版本在五国、噪音、爆破音等方面也大有改善,但是仍有缺陷,例如不能使用语音识别,VoiceOver等功能,需要删除AppleHDA.kext,导致升级不方便等等。
所以尽管声卡有VoodooHDA这样的通用易行的解决方法,大家仍然热衷于修改AppleHDA驱动声卡。下面就AppleHDA的修改做讨论。(基于10.6.7之后的AppleHDA结构,不制作LegacyHDA,而是直接修改。)另外iDSDT是个非常不错的工具,虽然无法直接驱动,但是导入信息,输出的仿冒或者修改的AppleHDA可以参考其中的Layouts 和 PathMaps,只需要核实一下有无错误即可。可以省去很多麻烦。
5.0 声卡codec文件获取
通常我们通过Linux下获取codec文件,作为修改AppleHDA的依据,可以使用Ubuntu、DeepinLinux等发行版运行后提取codec文件。但为了一个文本文件去下载个Linux感觉挺不值当的,现在我们可以用HJMac的UDT来获取,方便易行。以下图片仅作示例,可能与最新版的UDT中的Linux界面有所区别。
https://bbs.pcbeta.com/data/attachment/album/201107/30/11334590xbxwxxm099wc2m.gif
5.1 ConfigData文件修改
对于ConfigData(PinConfigration)除了从Linux获取的codec文件分析得到,我们还可以直接从Windows 7注册表中提取,参考下图:
https://bbs.pcbeta.com/data/attachment/album/201107/23/200117w5z2k5gqukdcbwk6.gif
下面说明从Linux的codec文件整理的方法:
搜索每个节点下的Pin_Default值,加上Address值和节点信息,如下:
Address: 0
Vendor Id: 0x10ec0883
0x11 0x411111f0 Speaker at Ext Rear Black
0x12 0x99a30930 Mic at Int ATAPI Unknown
0x14 0x99130110 Speaker at Int ATAPI Unknown
0x15 0x0321101f HP Out at Ext Left Black HP
0x16 0x411111f0 Speaker at Ext Rear Black
0x18 0x03a11020 Mic at Ext Left Black VREF_80
0x19 0x411111f0 Speaker at Ext Rear Black VREF_80
0x1a 0x411111f0 Speaker at Ext Rear Black VREF_HIZ
0x1b 0x411111f0 Speaker at Ext Rear Black VREF_HIZ
0x1d 0x40038205 Line Out at Ext N/A Purple
0x1e 0x411111f0 Speaker at Ext Rear Black两位一组,倒序转换,得到如下结果:
11 f0 11 11 41 Speaker at Ext Rear Black
12 30 09 a3 99 Mic at Int ATAPI Unknown
14 10 01 13 99 Speaker at Int ATAPI Unknown
15 1f 10 21 03 HP Out at Ext Left Black HP
16 f0 11 11 41 Speaker at Ext Rear Black
18 20 10 a1 03 Mic at Ext Left Black VREF_80
19 f0 11 11 41 Speaker at Ext Rear Black VREF_80
1a f0 11 11 41 Speaker at Ext Rear Black VREF_HIZ
1b f0 11 11 41 Speaker at Ext Rear Black VREF_HIZ
1d 05 82 03 40 Line Out at Ext N/A Purple
1e f0 11 11 41 Speaker at Ext Rear Black所有节点表示不存在,一律屏蔽,屏蔽节点设为f0 00 00 40,另外为了所有节点工作,需要做一些更改,将外置Mic设为LineIn,修改结果如下:
11 f0 00 00 40 Speaker at Ext Rear Black
12 10 01 a3 90 Mic at Int ATAPI Unknown
14 40 01 13 90 IntSpeaker at Int ATAPI Unknown
15 50 10 21 01 Headphone at Ext Left Black HP
16 f0 00 00 40 Speaker at Ext Rear Black
18 20 10 81 01 Line In at Ext Left Black VREF_80
19 f0 00 00 40 Speaker at Ext Rear Black VREF_80
1a f0 00 00 40 Speaker at Ext Rear Black
1b f0 00 00 40 Speaker at Ext Rear Black
1d f0 00 00 40 Line Out at Ext N/A Purple
1e f0 00 00 40 Speaker at Ext Rear Black根据紫米的教程,转换为最终的Config:Address + Node + 71c + 【12】
Address + Node + 71d + 【34】
Address + Node + 71e + 【56】
Address + Node + 71f + 【78】
加上01470c02这组神奇参数,得到下面的Config参数:
01171cf0 01171d00 01171e00 01171f40
01271c10 01271d01 01271ea3 01271f90
01471c40 01471d01 01471e13 01471f90
01571c50 01571d10 01571e21 01571f01
01671cf0 01671d00 01671e00 01671f40
01871c20 01871d10 01871e81 01871f01
01971cf0 01971d00 01971e00 01971f40
01a71cf0 01a71d00 01a71e00 01a71f40
01b71cf0 01b71d00 01b71e00 01b71f40
01d71cf0 01d71d00 01d71e00 01d71f40
01e71cf0 01e71d00 01e71e00 01e71f40
01470c02最开始内置Mic始终不能工作,对0x12的节点所有参数进行测试没有结果,最后不得已放弃了。最近ALC269有了很多成功的先例,仔细查看ConfigData,经过测试发现是因为0x18节点设为Mic(20 10 a1 01,参数第5位)时,内置Mic(节点0x12)就无法工作,必须将外置Mic设为LineIn才能够使0x12节点工作。也就是20 10 81 01。外置Mic设为LineIn后,内置Mic设为Mic或者LineIn都可以工作,但是内置Mic和外置Mic都设为LineIn内核日志会报错,所以采用内置Mic设为Mic,外置Mic设为LineIn的办法。
所以,内置和外置Mic之间是会有相互影响的,如果某个节点不能工作,尝试修改同一类型的其他节点,看看是否正常工作。
5.3 Layouts修改
用的iDSDT生成的默认数值,而且通过codec参数,也只有一个NodeID 18那行有个VREF_80可以根据教程的公式计算…80转换为16进制为0x50,VREF + 0100 + NodeID = 0x50010018 = 1342242840其他参数都是套用iDSDT生成文件中的参数。但是要根据自己的ConfigData调整Layouts参数,比如前面已经把外置Mic设为LineIn,那么Layouts里面也要把MuteGPIO值修改到LineIn下面。
5.4 PathMaps修改
可以直接查看iDSDT生成的驱动中的PathMaps,在Platforms.xml文件中,然后根据根据紫米的教程中提到的方法,核查一下PathMaps数值:Mic: 0x12 < 0x23 < 0x08 ~ 8 > 35 > 18IntSpeaker: 0x14 > 0x0c > 0x02 ~ 20 > 12 > 2
Headphone:0x15 > 0x0d > 0x03 ~ 21 > 13 > 3LineIn: 0x18 < 0x24 < 0x07 ~ 7 > 36 > 24注意:在codec文件中输入和输出的PathMaps寻找方法不同,两者路径指向是相反的。
5.5 AppleHDA破解和DSDT支持
DSDT支持参考4楼章节4.3.。
从Snow Leopard 10.6.3开始,包括Lion和Mountain Lion的AppleHDA都对声卡codec做了限制,只有Apple使用的codec才能被识别,因为ALC269这个codec并不在Apple列表内,所以我们需要将其替换。
可以使用HexEdit,查找AppleHDA.kext/Content/MacOS/AppleHDA中的Hex值:62 02 EC 10,将其替换为69 02 EC 10。
或者终端运行命令:
sudo perl -pi -e 's|\x62\x02\xec\x10|\x69\x02\xec\x10|g' /System/Library/Extensions/AppleHDA.kext/Contents/MacOS/AppleHDA
电池、鼠标、键盘、网卡、其他
本帖最后由 nksmiles 于 2012-4-20 22:04 编辑六、电池、键鼠、网卡及其他
6.1 电池驱动
电池驱动参照whitegerry贴子,目前使用替换的AppleACPIPlatform:
https://bbs.pcbeta.com/viewthread-886519-1-1.html
6.2 鼠标、键盘驱动
这里分享两个驱动,第一个驱动,来自catkids的帖子:
https://bbs.pcbeta.com/viewthread-843110-1-1.html
这个驱动两个文件安装到E/E或者S/L/E后能直接使用,并且系统偏好设置里直接可以看到设置面板可用。
第二个驱动,来自xie492836222的帖子:
https://bbs.pcbeta.com/viewthread-893935-1-1.html
这个驱动除了两个驱动文件,还包括一个Trackpad.prefPane,用法:
将Trackpad.prefPane放到S/L/Preferencepanes目录下将原来的Trackpad.prefPane改名为Trackpadold.prefPane 不能删除在将里面的。两个鼠标键盘kext放在e/e目录下重启 (修复磁盘权限)还有第一次开机别忘了-f,这时在设置里没办法设置触摸板但在S/L/preferencepanes/ Trackpadold.prefPane(就是原来自带的)双击就能设置了 希望对你们有效
这两个驱动都支持两指的上下滑动手势,其他折腾了半天,没发现其他手势有用。注意这两个驱动不能轻触点击。关于手势,参考苹果Lion对手势的说明:
http://www.apple.com.cn/macosx/whats-new/gestures.html
如果需要轻触点击,参考下面的帖子:
https://bbs.pcbeta.com/viewthread-843296-1-1.html
6.3 网卡驱动
有线网卡推荐使用由Lnx2Mac开发的Realtek RTL81xx Driver,此驱动一直有更新,感谢紫米的分享。无线网卡目前还没有解决方法。6.4 AppleRTC破解,修复睡眠Bios重置
从Snow Leopard 10.6.8开始,包括Lion和Mountain Lion,即便DSDT已经修复Bios重置问题,但是在睡眠后重启时仍然会导致Bios重置,是因为苹果在AppleRTC中添加了校验,破解方法为查找AppleRTC.kext/Content/MacOS/AppleRTC中的Hex值75 30 44 89 f8,将其替换为eb 30 44 89 f8,查找Hex值 75 3d 8b 75 08,将其替换为 eb 3d 8b 75 08,或者在终端中运行命令:(DP3此方法已无用!)
sudo perl -pi -e 's|\x75\x30\x44\x89\xf8|\xeb\x30\x44\x89\xf8|; s|\x75\x3d\x8b\x75\x08|\xeb\x3d\x8b\x75\x08|' /System/Library/Extensions/AppleRTC.kext/Contents/MacOS/AppleRTC别忘了修复权限,重建缓存。
6.5 关于Windows时间与OS X时间不一致
两种方法,二选一:
修改Mac时间(貌似ML不管用):
https://bbs.pcbeta.com/viewthread-392877-1-1.html
修改Win时间(XP不好使)
https://bbs.pcbeta.com/viewthread-668621-1-1.html
7楼备用…… 本帖最后由 p.H 于 2012-4-14 08:35 编辑
guda~
原来我也使用acpibacklight的。
后来我发现,睡眠唤醒,和注销之后亮度都会重置最大
于是我就决定抛弃acpi的驱动了
直接用一个自启动的脚本,设定亮度。 很方便。亮度将会一直稳定~~~
楼主有兴趣可以一试 本帖最后由 nksmiles 于 2012-4-14 08:44 编辑
p.H 发表于 2012-4-14 08:35 https://bbs.pcbeta.com/static/image/common/back.gif
guda~
原来我也使用acpibacklight的。
后来我发现,睡眠唤醒,和注销之后亮度都会重置最大
看到你的那个帖子了,非常不错!我就是看到你的提示才去折腾ACPIBacklight.kext的,嘿嘿。
回去试试。我在想这两个办法能不能结合起来用,或者弄个com.nofearl.brightness.plist快捷设置工具就方便多了。
nksmiles 发表于 2012-4-14 08:43 static/image/common/back.gif
看到你的那个帖子了,非常不错!我就是看到你的提示才去折腾ACPIBacklight.kext的,嘿嘿。
回去试试 ...
快捷设置工具?
那个不会很复杂的啊,就把plist文件里面的一个数值改了就好啦~~~ p.H 发表于 2012-4-14 08:49 static/image/common/back.gif
快捷设置工具?
那个不会很复杂的啊,就把plist文件里面的一个数值改了就好啦~~~
嗯,改个plist也挺方便的。/System/Library/LaunchAgents/需要root权限不?
我是想能不能把两个功能合并,调整亮度时把值保存下来,然后login时运行脚本。不过估计实现起来很麻烦。
有时间再看看ACPIBacklight的源码。 nksmiles 发表于 2012-4-14 08:55 static/image/common/back.gif
嗯,改个plist也挺方便的。/System/Library/LaunchAgents/需要root权限不?
我是想能不能把两个功能合 ...
按这条指令来看,需要sudo chown root:wheel /System/Library/LaunchAgents/com.nofearl.brightness.plist哇咔咔,你是想改变屏幕亮度的时候同时把值写入plist么? p.H 发表于 2012-4-14 09:04 static/image/common/back.gif
按这条指令来看,需要哇咔咔,你是想改变屏幕亮度的时候同时把值写入plist么?
是这么个想法。如果有足够的时间折腾,我想试试。 nksmiles 发表于 2012-4-14 09:10 static/image/common/back.gif
是这么个想法。如果有足够的时间折腾,我想试试。
对这些深入内容还木有研究
哇咔咔,期待。~ 太厉害了,我的本子和你一样,准备试试 nksmiles 发表于 2012-4-13 22:04 static/image/common/back.gif
四、DSDT修改
4.1 添加苹果方法函数
我都不知道我的N 卡行不行呢? 老大又没编辑好的对e40的各种驱动包 强夯,lz能不能共享下驱动啊? 不错,老大能不能把你的e40驱动修改一次性大包,谢了,同一片天空,同一个本子 fox0491 发表于 2012-4-14 22:23 static/image/common/back.gif
我都不知道我的N 卡行不行呢?
那个ACPIBacklight?感觉那个A卡和N卡是通用的。