lyBp
znMOSsm
zmQPugibQ
mQosvtDD
ReGMffq
Win10论坛

Win10正式版系统下载主题平板

重定义Modern UI,打造完美Windows全新体验

Windows10下载|安装|新手宝典|必备软件

wTMTY
wjytbPhAvjZ
bfbwRwdnCpYR
ArEuHYVCwCgX
JYfDaz
KQbVqTVHHWPM
ZdhyqtvXFS
gVPlaYDNP
MMwIfxtLwE
mOWBn
ULKoYM
hahBnvGuTk
GejJDZDP
IZToO
hqgXQxnb
eGWznqzQjAtT
bwXUgFVTUqY
dbMjyghBn
hawBllyKl
UwoFgHwqba
nafsazOfbn
CGoC
WHqhEBlWV
ncMlmIHfPb
SIgcIpgGdCQU
CGnCn
kfufOmNW
gjdmKh
HbzzV
MJbSLOeZNT
YZGHYUlUvx
QVgc
zrbbxKjvRzu
ypuvGznL
DqdeGiy
EFEsnujAW
dhmfC
GAJpLJRGB
eIHTJG
ciFsCB
mUiBBTB
oBPBDmi
mtOtwAREp
GlYOwUySN
CJJsXY
jjDbZp
搜索
查看: 85449|回复: 342

[分享] Thinkpad E40 Mountain Lion 完善过程分享 - 编辑中   [复制链接]
跳转到指定楼层
复制 

Vico

Rank: 9

UID
542221
帖子
2170
PB币
507
贡献
0
技术
212
活跃
352

Win10先驱者 7周年庆典勋章

楼主
发表于 2012-4-13 22:02:35 IP属地山东 |只看该作者 |倒序浏览
快御云安全
本帖最后由 nksmiles 于 2012-7-28 07:56 编辑

说明:本帖并无本人原创内容,所有完善方法、资源均来自于pcbeta或者insanelymac论坛。


资源115统一下载:
http://115.com/folder/fetlme73

电池驱动: 2012-04-15_Battery.zip (459.42 KB, 下载次数: 929) (适用Lion和Mountain Lion)
颜色文件: 2012-04-15_ColorICM_TPLCD60.zip (747 Bytes, 下载次数: 308)
显示器文件: 2012-04-15_DisplayVendorID-30ae.zip (1.01 KB, 下载次数: 377)
键鼠驱动1: 2012-04-16_PS2_Voodoo.zip (181.12 KB, 下载次数: 473)
键鼠驱动2: 2012-04-16_PS2_Apple.zip (1.01 MB, 下载次数: 985)

一、目录

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


20120414_dsdt_backlight.zip

56.33 KB, 下载次数: 427, 下载积分: PB币 -1

20120414_ACPIBacklight.kext.zip

25.63 KB, 下载次数: 335, 下载积分: PB币 -1

10

查看全部评分

Vico

Rank: 9

UID
542221
帖子
2170
PB币
507
贡献
0
技术
212
活跃
352

Win10先驱者 7周年庆典勋章

沙发
发表于 2012-4-13 22:03:02 IP属地山东 |只看该作者

系统安装、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文件
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3. <plist version="1.0">
  4. <dict>
  5. <key>SMbiosdate</key>
  6. <string>07/26/10</string>
  7. <key>SMbiosvendor</key>
  8. <string>Apple Inc.</string>
  9. <key>SMbiosversion</key>
  10. <string>MBP61.88Z.0057.B0C.1007261552</string>
  11. <key>SMboardmanufacter</key>
  12. <string>Apple Inc.</string>
  13. <key>SMboardproduct</key>
  14. <string>Mac-F22589C8</string>
  15. <key>SMboardversion</key>
  16. <string>Not Specified</string>
  17. <key>SMchassismanufacter</key>
  18. <string>Apple Inc.</string>
  19. <key>SMchassisserial</key>
  20. <string>C02CJ2DNDC79</string>
  21. <key>SMchassisversion</key>
  22. <string>Mac-F2268DAE</string>
  23. <key>SMfamily</key>
  24. <string>MacBook Pro</string>
  25. <key>SMmanufacter</key>
  26. <string>Apple Inc.</string>
  27. <key>SMmanufacturer</key>
  28. <string>Apple Inc.</string>
  29. <key>SMproductname</key>
  30. <string>MacBookPro6,1</string>
  31. <key>SMserial</key>
  32. <string>C02FR2D2DC79</string>
  33. <key>SMsystemversion</key>
  34. <string>1.0</string>
  35. </dict>
  36. </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文件,包括参数对应关系,见下图。




1

查看全部评分

Vico

Rank: 9

UID
542221
帖子
2170
PB币
507
贡献
0
技术
212
活跃
352

Win10先驱者 7周年庆典勋章

板凳
发表于 2012-4-13 22:03:25 IP属地山东 |只看该作者

显卡驱动,修改过程及注意事项

本帖最后由 nksmiles 于 2012-4-15 18:51 编辑

三、显卡驱动,修改过程及注意事项
ATI 4系的显卡经过大家的努力已经比较成功的驱动了,当然国际象棋仍然死机的问题还无法解决。无论是Shrike参数还是Peregrine参数,都必须保证安装后的系统S/L/E目录下有以下7个原始文件:
  1.   ATI4600Controller.kext (加入ID)
  2.   ATIFramebuffer.kext
  3.   ATISupport.kext
  4.   ATIRadeonX2000.kext (确认有ID)
  5.   ATIRadeonX2000GA.plugin
  6.   ATIRadeonX2000GLDriver.bundle
  7.   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命令切换到解压后两个文件所在目录,执行命令:

  1. ./radeon_bios_decode < ati9462.rom > port.txt
复制代码
得到port.txt,类似于下述文本:
  1. ATOM BIOS Rom:
  2.         SubsystemVendorID: 0x17aa SubsystemID: 0x215b
  3.         IOBaseAddress: 0x2000
  4.         Filename: BR41628.001
  5.         BIOS Bootup Message:
  6. BR41628.001 M92 DDR3 64bit 720e/800m

  7. PCI ID: 1002:9553
  8. Connector at index 0
  9.         Type [@offset 45748]: VGA (1)
  10.         Encoder [@offset 45752]: INTERNAL_KLDSCP_DAC1 (0x15)
  11.         i2cid [@offset 45810]: 0x95, OSX senseid: 0x6
  12. Connector at index 1
  13.         Type [@offset 45758]: HDMI-A (11)
  14.         Encoder [@offset 45762]: INTERNAL_UNIPHY (0x1e)
  15.         i2cid [@offset 45833]: 0x91, OSX senseid: 0x2
  16. Connector at index 2
  17.         Type [@offset 45768]: LVDS (7)
  18.         Encoder [@offset 45772]: INTERNAL_UNIPHY2 (0x21)
  19.         i2cid [@offset 45860]: 0x90, OSX senseid: 0x1
复制代码

再次执行命令:

  1. ./redsock_bios_decoder < ati9462.rom > route.txt
复制代码
得到route.txt文件,类似于下述文本:
  1. BR41628.001 :

  2. BR41628.001 M92 DDR3 64bit 720e/800m

  3. Subsystem Vendor ID: 17aa
  4. Subsystem ID: 215b
  5. Object Header Structure Size: 197
  6. Connector Object Table Offset: 32
  7. Router Object Table Offset: 0
  8. Encoder Object Table Offset: 97
  9. Display Path Table Offset: 10
  10. Connector Object Id [5] which is [VGA]
  11. encoder obj id [0x15] which is [INTERNAL_KLDSCP_DAC1 (osx txmit 0x00 enc 0x10?)] linkb: false
  12. Connector Object Id [12] which is [HDMI_TYPE_A]
  13. encoder obj id [0x1e] which is [INTERNAL_UNIPHY (osx txmit 0x20 [duallink 0x0] enc 0x1)] linkb: true
  14. Connector Object Id [14] which is [LVDS]
  15. encoder obj id [0x21] which is [INTERNAL_UNIPHY2 (osx txmit 0x12 [duallink 0x2] enc 0x4)] linkb: false
复制代码
我们需要修改的原始Shrike参数为:
  1. 02 00 00 00 40 00 00 00 09 01 00 00 02 01 00 03
  2. 02 00 00 00 00 01 00 00 09 01 00 00 20 01 02 02
  3. 00 04 00 00 04 03 00 00 00 01 00 00 10 00 01 01
复制代码
我们需要对这些参数进行修改以驱动显卡。这些参数是由以下部分组成的(修改后的参数):



Connector_Type

接口类型

ATY_ControlFlags

接口标志位

Features

显示特性

Alignment

对齐位

Transmitter

Encoder

HotPlugID

SenseID

VGA

10 00 00 00

10 00 00 00

00 01

00 00

00

10

02

06

HDMI

00 08 00 00

00 02 00 00

00 71

00 00

20

01

01

02

LVDS

02 00 00 00

40 00 00 00

09 01

00 00

12

04

00

01


接口类型这一列应该是没有任何疑问的,有非常明确的定义:
  1. #define CONNECTORTYPE_LVDS 0x00000002 /* 内置低电压LCD ,比如说笔记本上的LCD */
  2. #define CONNECTORTYPE_VGA  0x00000010 /* VGA 接口 */
  3. #define CONNECTORTYPE_HDMI 0x00000800 /* HDMI 接口*/
复制代码

接口标志位
是与接口类型对应的,也很容易确定:(0x0100待测试)
  1.      接口类型  > 可以对应接口标志位
  2. 0x0002 : LVDS > ControlFlag : 0x0040 / 0x0100
  3. 0x0010 : VGA  > ControlFlag : 0x0010
  4. 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显卡的参数:
  1. 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信息:

整理为一行连续的EDID信息:
  1. 00FFFFFFFFFFFF0030AEA0400000000000130103801F1178EA87F594574F8C2727505400000001010101010101010101010101010101411C56A0500016303020250035AE10000019CA16566F500016303020250035AE100000190000000F008C09328C09281609004CA34154000000FE004C544E313430415430374C30310055
复制代码
其实E40的显卡在使用修改ATI4600Controller.kext里的framebuffer驱动后用IORegistryExplorer也可以查看到EDID信息,而且与Windows下获取的是相同的。说明不需要添加EDID文件也已经完全识别。(在IORegistryExplorer搜索display,在display0下面的AppleBacklightDisplay中有个IODisplayEDID。

2、根据VendorID和ProductID信息修改/创建显示器EDID文件:


根据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:

将C盘C:\DRIVERS\WIN\MONITOR下的TPLCD60.ICM 文件复制出来,进入OS X系统,将其复制到 /System/Library/ColorSync/Profiles /Users/你的用户名/Library/ColorSync/Profiles/ 下,从系统偏好设置-显示器-颜色中选择Thinkpad的颜色文件即可修正颜色显示。


点评

ftl19941216  E40显卡驱动到现在这样已经很不错了.适合日常工作.但是只要一碰3D就死.  发表于 2012-4-21 10:28 IP属地浙江

Vico

Rank: 9

UID
542221
帖子
2170
PB币
507
贡献
0
技术
212
活跃
352

Win10先驱者 7周年庆典勋章

4F
发表于 2012-4-13 22:04:27 IP属地山东 |只看该作者

DSDT修改

本帖最后由 nksmiles 于 2012-4-15 09:54 编辑

四、DSDT修改
4.1 添加苹果方法函数
要想使用苹果的原生驱动,添加苹果的方法函数是必须的,可以在DSDT开始部分或者第一个Scope (\){…}后添加。
  1.     //// DTGP method to support Apple MacOS native driver
  2.     Method (DTGP, 5, NotSerialized)
  3.     {
  4.         If (LEqual (Arg0, Buffer (0x10)
  5.                     {
  6.                         /* 0000 */    0xC6, 0xB7, 0xB5, 0xA0, 0x18, 0x13, 0x1C, 0x44,
  7.                         /* 0008 */    0xB0, 0xC9, 0xFE, 0x69, 0x5E, 0xAF, 0x94, 0x9B
  8.                     }))
  9.         {
  10.             If (LEqual (Arg1, One))
  11.             {
  12.                 If (LEqual (Arg2, Zero))
  13.                 {
  14.                     Store (Buffer (One)
  15.                            {
  16.                                0x03
  17.                            }, Arg4)
  18.                     Return (One)
  19.                 }
  20.                 If (LEqual (Arg2, One))
  21.                 {
  22.                     Return (One)
  23.                 }
  24.             }
  25.         }
  26.         Store (Buffer (One)
  27.                {
  28.                    0x00
  29.                }, Arg4)
  30.         Return (Zero)
  31.     }
  32.     //// end of DTGP method
复制代码
另外,修复重启BIOS重置也是必须的查找(RTC)或者(RTC0)字段,将里面的
  1.     0x04    //Length
复制代码

  1.     0x08    //Length
复制代码
修改为:
  1.     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
  1. //// code for brightness adjust
  2. Device (PNLF)
  3. {
  4.     Name (_HID, EisaId ("APP0002"))
  5.     Name (_CID, "backlight")
  6.     Name (_UID, 0x0A)
  7.     Name (_STA, 0x0B)
  8. }
  9. //// end of code for brightness
复制代码
4.2.2 ACPIBacklight.kext支持代码
1、在Device (VGA)下面添加_DSM函数:
  1. //// add to support ACPI backlight
  2. Method (_DSM, 4, NotSerialized)
  3. {
  4.     Store (Package ()
  5.     {
  6.         "AAPL,HasPanel",
  7.         Buffer (0x04)
  8.         {
  9.             0x01, 0x00, 0x00, 0x00
  10.         },

  11.         "AAPL,Haslid",
  12.         Buffer (0x04)
  13.         {
  14.             0x01, 0x00, 0x00, 0x00
  15.         },
  16.    
  17.         "AAPL,backlight-control",
  18.         Buffer (0x04)
  19.         {
  20.             0x01, 0x00, 0x00, 0x00
  21.         },

  22.         "@0,backlight-control",
  23.         Buffer (0x04)
  24.         {
  25.             0x01, 0x00, 0x00, 0x00
  26.         },

  27.         "@0,AAPL,boot-display",
  28.         Buffer (0x04)
  29.         {
  30.             0x01, 0x00, 0x00, 0x00
  31.         },

  32.         "@0,built-in",
  33.         Buffer ()
  34.         {
  35.             One
  36.         }
  37.     }, Local0)
  38.     DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
  39.     Return (Local0)
  40. }
  41. //// end
复制代码
2、在Device (LCD)下面添加:_DOS 函数(其他三个_BCL _BCM _BQC已经存在。)

  1. //// add to support ACPI backlight
  2. Method (_DOS, 1, NotSerialized)
  3. {
  4.     Store (And (Arg0, 0x03), SWIT)
  5. }
  6. //// end
复制代码
4.3 添加声卡代码

查找Device (HDEF)字段,技嘉主板是AZAL,将AZAL改为HDEF即可。ASUS是HDAU,ATI是SBAZ,同样将其改为HDEF即可。在Device (HDEF)内添加_DSM函数。

然后E40需要修改后的代码如下:

  1.                 //// code to support apple audio driver
  2.                 Method (_DSM, 4, NotSerialized)
  3.                 {
  4.                     Store (Package (0x0A)
  5.                         {
  6.                             "codec-id",
  7.                             Buffer (0x04)
  8.                             {
  9.                                 0x69, 0x02, 0xEC, 0x10
  10.                             },
  11.                             "layout-id",
  12.                             Buffer (0x04)
  13.                             {
  14.                                 0x0D, 0x01, 0x00, 0x00
  15.                             },
  16.                             "device-type",
  17.                             Buffer (0x25)
  18.                             {
  19.                                 "Realtek ALC269 @ Intel Ibex Peak PCH"
  20.                             },
  21.                             "hda-gfx",
  22.                             Buffer (0x0A)
  23.                             {
  24.                                 "onboard-1"
  25.                             },
  26.                             "PinConfigurations",
  27.                             Buffer (Zero) {}
  28.                         }, Local0)
  29.                     DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
  30.                     Return (Local0)
  31.                 }
  32.                 ////end of audio _DSM method
复制代码
其中里面的参数layout-id涉及到AppleHDA的正确驱动,这里0x010D=269,与AppleHDA里面的layout-id为269对应。另外可以通过设置PinConfigurations的Buffer值来显示音频内建的具体信息。如果AppleHDA正常驱动,不需要设置,会自动从AppleHDA中读取。

Vico

Rank: 9

UID
542221
帖子
2170
PB币
507
贡献
0
技术
212
活跃
352

Win10先驱者 7周年庆典勋章

5F
发表于 2012-4-13 22:05:26 IP属地山东 |只看该作者

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感觉挺不值当的,现在我们可以用HJMacUDT来获取,方便易行。以下图片仅作示例,可能与最新版的UDT中的Linux界面有所区别。


5.1 ConfigData文件修改
对于ConfigData(PinConfigration)除了从Linux获取的codec文件分析得到,我们还可以直接从Windows 7注册表中提取,参考下图:

下面说明从Linux的codec文件整理的方法:
搜索每个节点下的Pin_Default值,加上Address值和节点信息,如下:

  1. Address: 0
  2. Vendor Id: 0x10ec0883

  3. 0x11 0x411111f0 [N/A] Speaker at Ext Rear      Black
  4. 0x12 0x99a30930 [Fixed] Mic at Int ATAPI       Unknown
  5. 0x14 0x99130110 [Fixed] Speaker at Int ATAPI   Unknown
  6. 0x15 0x0321101f [Jack] HP Out at Ext Left      Black      HP
  7. 0x16 0x411111f0 [N/A] Speaker at Ext Rear      Black
  8. 0x18 0x03a11020 [Jack] Mic at Ext Left         Black      VREF_80
  9. 0x19 0x411111f0 [N/A] Speaker at Ext Rear      Black      VREF_80
  10. 0x1a 0x411111f0 [N/A] Speaker at Ext Rear      Black      VREF_HIZ
  11. 0x1b 0x411111f0 [N/A] Speaker at Ext Rear      Black      VREF_HIZ
  12. 0x1d 0x40038205 [N/A] Line Out at Ext N/A      Purple
  13. 0x1e 0x411111f0 [N/A] Speaker at Ext Rear      Black
复制代码
两位一组,倒序转换,得到如下结果:
  1. 11 f0 11 11 41 [N/A] Speaker at Ext Rear      Black
  2. 12 30 09 a3 99 [Fixed] Mic at Int ATAPI       Unknown
  3. 14 10 01 13 99 [Fixed] Speaker at Int ATAPI   Unknown
  4. 15 1f 10 21 03 [Jack] HP Out at Ext Left      Black           HP
  5. 16 f0 11 11 41 [N/A] Speaker at Ext Rear      Black
  6. 18 20 10 a1 03 [Jack] Mic at Ext Left         Black           VREF_80
  7. 19 f0 11 11 41 [N/A] Speaker at Ext Rear      Black           VREF_80
  8. 1a f0 11 11 41 [N/A] Speaker at Ext Rear      Black           VREF_HIZ
  9. 1b f0 11 11 41 [N/A] Speaker at Ext Rear      Black           VREF_HIZ
  10. 1d 05 82 03 40 [N/A] Line Out at Ext N/A      Purple
  11. 1e f0 11 11 41 [N/A] Speaker at Ext Rear      Black
复制代码
所有[N/A]节点表示不存在,一律屏蔽,屏蔽节点设为f0 00 00 40,另外为了所有节点工作,需要做一些更改,将外置Mic设为LineIn,修改结果如下:
  1. 11 f0 00 00 40 [N/A] Speaker at Ext Rear      Black
  2. 12 10 01 a3 90 Mic at Int ATAPI               Unknown
  3. 14 40 01 13 90 IntSpeaker at Int ATAPI        Unknown
  4. 15 50 10 21 01 Headphone at Ext Left          Black           HP
  5. 16 f0 00 00 40 [N/A] Speaker at Ext Rear      Black
  6. 18 20 10 81 01 Line In at Ext Left            Black           VREF_80
  7. 19 f0 00 00 40 [N/A] Speaker at Ext Rear      Black           VREF_80
  8. 1a f0 00 00 40 [N/A] Speaker at Ext Rear      Black   
  9. 1b f0 00 00 40 [N/A] Speaker at Ext Rear      Black  
  10. 1d f0 00 00 40 [N/A] Line Out at Ext N/A      Purple
  11. 1e f0 00 00 40 [N/A] Speaker at Ext Rear      Black
复制代码

根据紫米的教程,转换为最终的Config:

Address + Node + 71c + 【12】
Address + Node + 71d + 【34】
Address + Node + 71e + 【56】
Address + Node + 71f + 【78】

加上01470c02这组神奇参数,得到下面的Config参数:
  1. 01171cf0 01171d00 01171e00 01171f40
  2. 01271c10 01271d01 01271ea3 01271f90
  3. 01471c40 01471d01 01471e13 01471f90
  4. 01571c50 01571d10 01571e21 01571f01
  5. 01671cf0 01671d00 01671e00 01671f40
  6. 01871c20 01871d10 01871e81 01871f01
  7. 01971cf0 01971d00 01971e00 01971f40
  8. 01a71cf0 01a71d00 01a71e00 01a71f40
  9. 01b71cf0 01b71d00 01b71e00 01b71f40
  10. 01d71cf0 01d71d00 01d71e00 01d71f40
  11. 01e71cf0 01e71d00 01e71e00 01e71f40
  12. 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 > 18

IntSpeaker: 0x14 > 0x0c > 0x02     ~ 20 > 12 > 2


Headphone:  0x15 > 0x0d > 0x03     ~ 21 > 13 > 3

LineIn:     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。
或者终端运行命令:
  1. sudo perl -pi -e 's|\x62\x02\xec\x10|\x69\x02\xec\x10|g' /System/Library/Extensions/AppleHDA.kext/Contents/MacOS/AppleHDA
复制代码


Vico

Rank: 9

UID
542221
帖子
2170
PB币
507
贡献
0
技术
212
活跃
352

Win10先驱者 7周年庆典勋章

6F
发表于 2012-4-13 22:06:10 IP属地山东 |只看该作者

电池、鼠标、键盘、网卡、其他

本帖最后由 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此方法已无用!)
  1. 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

Vico

Rank: 9

UID
542221
帖子
2170
PB币
507
贡献
0
技术
212
活跃
352

Win10先驱者 7周年庆典勋章

7F
发表于 2012-4-14 06:15:33 IP属地山东 |只看该作者
7楼备用……

UID
2409498
帖子
27335
PB币
915
贡献
4
技术
1353
活跃
712
8F
发表于 2012-4-14 08:35:17 IP属地湖北 |只看该作者
本帖最后由 p.H 于 2012-4-14 08:35 编辑

guda~  
原来我也使用acpibacklight的。
后来我发现,睡眠唤醒,和注销之后亮度都会重置最大
于是我就决定抛弃acpi的驱动了
直接用一个自启动的脚本,设定亮度。 很方便。亮度将会一直稳定~~~
楼主有兴趣可以一试

Vico

Rank: 9

UID
542221
帖子
2170
PB币
507
贡献
0
技术
212
活跃
352

Win10先驱者 7周年庆典勋章

9F
发表于 2012-4-14 08:43:33 IP属地菲律宾 |只看该作者
本帖最后由 nksmiles 于 2012-4-14 08:44 编辑
p.H 发表于 2012-4-14 08:35
guda~  
原来我也使用acpibacklight的。
后来我发现,睡眠唤醒,和注销之后亮度都会重置最大


看到你的那个帖子了,非常不错!我就是看到你的提示才去折腾ACPIBacklight.kext的,嘿嘿。

回去试试。我在想这两个办法能不能结合起来用,或者弄个com.nofearl.brightness.plist快捷设置工具就方便多了。

UID
2409498
帖子
27335
PB币
915
贡献
4
技术
1353
活跃
712
10F
发表于 2012-4-14 08:49:16 IP属地湖北 |只看该作者
nksmiles 发表于 2012-4-14 08:43
看到你的那个帖子了,非常不错!我就是看到你的提示才去折腾ACPIBacklight.kext的,嘿嘿。

回去试试 ...

快捷设置工具?
那个不会很复杂的啊,就把plist文件里面的一个数值改了就好啦~~~

Vico

Rank: 9

UID
542221
帖子
2170
PB币
507
贡献
0
技术
212
活跃
352

Win10先驱者 7周年庆典勋章

11F
发表于 2012-4-14 08:55:56 IP属地菲律宾 |只看该作者
p.H 发表于 2012-4-14 08:49
快捷设置工具?
那个不会很复杂的啊,就把plist文件里面的一个数值改了就好啦~~~

嗯,改个plist也挺方便的。/System/Library/LaunchAgents/需要root权限不?

我是想能不能把两个功能合并,调整亮度时把值保存下来,然后login时运行脚本。不过估计实现起来很麻烦。
有时间再看看ACPIBacklight的源码。

UID
2409498
帖子
27335
PB币
915
贡献
4
技术
1353
活跃
712
12F
发表于 2012-4-14 09:04:53 IP属地湖北 |只看该作者
nksmiles 发表于 2012-4-14 08:55
嗯,改个plist也挺方便的。/System/Library/LaunchAgents/需要root权限不?

我是想能不能把两个功能合 ...

按这条指令来看,需要
  1. sudo chown root:wheel /System/Library/LaunchAgents/com.nofearl.brightness.plist
复制代码
哇咔咔,你是想改变屏幕亮度的时候同时把值写入plist么?

Vico

Rank: 9

UID
542221
帖子
2170
PB币
507
贡献
0
技术
212
活跃
352

Win10先驱者 7周年庆典勋章

13F
发表于 2012-4-14 09:10:31 IP属地菲律宾 |只看该作者
p.H 发表于 2012-4-14 09:04
按这条指令来看,需要哇咔咔,你是想改变屏幕亮度的时候同时把值写入plist么?

是这么个想法。如果有足够的时间折腾,我想试试。

UID
2409498
帖子
27335
PB币
915
贡献
4
技术
1353
活跃
712
14F
发表于 2012-4-14 09:19:25 IP属地湖北 |只看该作者
nksmiles 发表于 2012-4-14 09:10
是这么个想法。如果有足够的时间折腾,我想试试。

对这些深入内容还木有研究
哇咔咔,期待。~

Rank: 1

UID
1616859
帖子
86
PB币
83
贡献
0
技术
0
活跃
3
15F
发表于 2012-4-14 22:23:04 IP属地湖北 |只看该作者
太厉害了,我的本子和你一样,准备试试

YSKoo

Rank: 7Rank: 7Rank: 7

UID
1313498
帖子
1608
PB币
1814
贡献
0
技术
57
活跃
1333

7周年庆典勋章 8周年庆典勋章

16F
发表于 2012-4-14 22:23:22 IP属地广东 |只看该作者
nksmiles 发表于 2012-4-13 22:04
四、DSDT修改
4.1 添加苹果方法函数

我都不知道我的N 卡行不行呢?

Rank: 1

UID
1616859
帖子
86
PB币
83
贡献
0
技术
0
活跃
3
17F
发表于 2012-4-14 22:26:35 IP属地湖北 |只看该作者
老大又没编辑好的对e40的各种驱动包

Rank: 2Rank: 2

UID
905670
帖子
137
PB币
189
贡献
0
技术
3
活跃
22
18F
发表于 2012-4-15 15:25:43 IP属地贵州 |只看该作者
强夯,lz能不能共享下驱动啊?

Rank: 1

UID
1616859
帖子
86
PB币
83
贡献
0
技术
0
活跃
3
19F
发表于 2012-4-15 20:52:33 IP属地湖北 |只看该作者
不错,老大能不能把你的e40驱动修改一次性大包,谢了,同一片天空,同一个本子

点评

nksmiles  正在整理上传。  发表于 2012-4-15 20:55 IP属地山东

Vico

Rank: 9

UID
542221
帖子
2170
PB币
507
贡献
0
技术
212
活跃
352

Win10先驱者 7周年庆典勋章

20F
发表于 2012-4-15 20:54:45 IP属地山东 |只看该作者
fox0491 发表于 2012-4-14 22:23
我都不知道我的N 卡行不行呢?

那个ACPIBacklight?感觉那个A卡和N卡是通用的。
回顶部
Copyright (C) 2005-2024 pcbeta.com, All rights reserved
Powered by Discuz!  苏ICP备17027154号  CDN加速及安全服务由「快御」提供
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。
远景在线 | 远景论坛 | 苹果论坛 | Win11论坛 | Win10论坛 | Win8论坛 | Win7论坛 | WP论坛 | Office论坛