ThinkPad E430 (3254AV1) 安装 10.12.6
ThinkPad E430 (3254AV1) 安装 10.12.6首先送上电脑ThinkPad E430(3254AV1)的配置CPU型号 Intel 酷睿i5 2520M主板芯片组 Intel HM77 内存容量 4GB DDR3 1600屏幕分辨率 1366x768显卡芯片 NVIDIA GeForce GT 610M+Intel GMA HD 3000声卡 Conexant 20671(Cx20590)无线网卡 BCM4313有线网卡 Realtek RTL8111蓝牙 BCM202702A0
郑重声明:如果有错误一定是Ctrl+C和Ctrl+V的错一、安装前设置 BIOS参数BIOS版本2.58Config/USB--Always On Usb选择DisabledConfig/Display--Graphics Device 选择Integrated GraphicsSecurity/Secure Boot选择DisabledStartup/UEFI/Legacy BOOT选择UEFI Only —CSM Support 选择YesStartup/OS Optimized Defaults 选择Disabled
显卡ID注入只在Clover里显卡HD3000的ID单纯注入也可能是不能启动的,会卡在AppleSNBGraphicsFB.kext无法加载。这是因为ThinkPad E430(3254AV1)是7代主板(HM77)搭配SNB二代平台的CPU(i5-2520M)集成HD3000的显卡情况(正常应该搭配6代主板),AppleIntelFramebufferCapri.kext 驱动与AppleIntelSNBGraphicsFB.kext因为ID号冲突,所以前者会挡掉后者,造成AppleSNBGraphicsFB.kext无法加载。方法一:在Clover里显卡ID仿冒成1C3A8086,自己修改,或者直接到大神RehabMan那里https://github.com/RehabMan/OS-X-Clover-Laptop-Config/blob/master/config_HD4000_1366x768_6series.plist,这个不能直接点击网页下载用,要把里面的代码复制粘贴到config.plist。ACPI->DSDT->Fixes->AddIMEI_8000=Yes/NewWay_80000000=YesDevices->FakeID->IMEI->0x1C3A8086 BOOT->Arguments->kext-dev-mode=1 dart=0 slide=0 nv_disable=1 Graphics->Inject->Intel=Yes SMBIOS->MacBookPro8,1 <key>DSDT</key> <dict> <key>Fixes</key> <dict> <key>AddIMEI_80000</key> <true/> <key>NewWay_80000000</key> <true/> </dict> <key>Boot</key> <dict> <key>Arguments</key> <string>kext-dev-mode=1 dart=0 slide=0 nv_disable=1</string> </dict> <key>Devices</key> <dict> <key>FakeID</key> <dict> <key>IMEI</key> <string>0x1C3A8086</string> </dict> </dict> <key>Graphics</key> <dict> <key>Inject</key> <dict> <key>Intel</key> <true/> </dict> <key>SMBIOS</key> <dict> <key>ProductName</key> <string>MacBookPro8,1</string> <key>Trust</key> <true/> </dict>
方法二:对DSDT进行显卡ID注入,打上补丁HD3000 on 7-series,请跳到下面驱动的显卡部分。然后在config.plist里勾选DropOEM_DSM。 <key>ACPI</key> <dict> <key>DSDT</key> <dict> <key>DropOEM_DSM</key> <true/> <key>Name</key> <string>DSDT.aml</string> </dict> <key>SSDT</key> <dict> <key>DropOem</key> <true/> </dict> </dict>Clover里SMBIOS选用MacBookPro8,1 <key>SMBIOS</key> <dict> <key>ProductName</key> <string>MacBookPro8,1</string> <key>Trust</key> <true/> </dict>
二、安装 不用说了,请在网上搜索
三、安装后驱动 DSDT/SSDT提取(Cover提取)有三个方法,windows下用AIDI64提取,Clover引导界面按F4键(有的是按Fn+F4),Linux下提取。请自主选择合适自己的方法提取。注意:在windows下用AIDI64提取的SSDT中有一个打开为OEM Table ID "CpuPm”,不能用,这个SSDT是关系到CPU变频的文件。需要网上下载其他人的i5-2520M的SSDT或是用其它方法提取的才能用。
安装前修改DSDT可以找一台Mac系统的电脑用MaciASL或是在Windows下用DSDT Editor。以下是使用MaciASL打补丁过程,补丁源http://raw.github.com/RehabMan/Laptop-DSDT-Patch/master
DSDT/SSDT反编译1、使用iasl编译器,同时反编译所有文件。要做的准备工作有,新建一个文件夹用于存放所有DSDT.aml和SSDT*.aml文件,由于Clover提取的其它文件不使用,并重命名所有文件,例如加上 .aml 扩展名,把SSDT.aml, SSDT-1.aml的顺序重命名。下载最新的iasl编译器来进行反编译。这里是Rehabman的修改版编译器:https://bitbucket.org/RehabMan/acpica/downloads。把iasl编译器拷贝到/usr/bin目录,会让调用iasl更方便。 1.1 终端的安装iasl编译器的命令:cd “你存放iasl的文件夹名”sudo cp aisl /usr/biniasl -v 应该显示如下类似内容Intel ACPI Component ArchitectureASL+ Optimizing Compiler version 20160313-64(RM)Copyright (c) 2000 - 2016 Intel Corporation
1.2终端的反编译命令:cd “你存放DSDT和SSDT的文件夹名”iasl -da -dl *.aml
2、打开DSDT.dsl后第一次编译Compile会有几个警告出现,警告可以不管, 无视之,这就是联合DSDT/SSDT反编译aml为dsl的好处,几乎没有错误
3、在名为OEM Table ID "Cpu0Ist”的SSDT中编译Compile有如下错误4096, syntax error, unexpected PARSEOP_PACKAGE打上补丁Remove _PSS placeholders
CPU变频(i5 2520M)1、提取编译修复SSDT,在windows下用AIDI64提取或是Clover下提取的SSDT中有一个打开为OEM Table ID"CpuPm”不能用。建议用ssdtPRGen.sh生成的SSDT.aml,还可以到网上下载其他人的i5-2520M的SSDT.aml。2、在Clover的config.plist里勾选DropOem=Yes,这时要加上所有SSDT,如果只加变频的一个SSDT,选择DropOem=No并且在DropTables里屏蔽Cpu0Ist和CpuPm。 <key>SSDT</key> <dict> <key>DropOem</key> <true/> </dict>要实际变频实际只要CpuPm这一个SSDT就可以的,通常屏蔽Cpu0Ist和CpuPm这两个 <key>DropTables</key> <array> <dict> <key>Signature</key> <string>SSDT</string> <key>TableId</key> <string>Cpu0Ist</string> </dict> <dict> <key>Signature</key> <string>SSDT</string> <key>TableId</key> <string>CpuPm</string> </dict> <dict> <key>Signature</key> <string>DMAR</string> </dict> </array>
3、Clover里SMBIOS选用MacBookPro8,1 <key>SMBIOS</key> <dict> <key>ProductName</key> <string>MacBookPro8,1</string> <key>Trust</key> <true/> </dict>
4、删除驱动文件夹里的NullCPUPowerManagement.kext5、用HWSensors或是其它程序查看有无变频成功
显卡(HD3000)1、核显名称转换,一般用GFX0 to IGPU,ThinkPad的比较特殊,需要用Rename PCI0.VID to PCI0.IGPU和Rename VID/AGP to IGPU(注:相关SSDT也需要打这个补丁)2、显卡仿冒ID,IMEI注入,注意用HD3000 on 7-series,用Clover的config.plist注入可能不能完全驱动(没有水波纹,花屏等)。3、低分辨率屏(1366x768)HDMI输出,用HD3000 Low Resolution。4、亮度调节补丁Brightness fix (HD3000/HD4000)5、必要时在Clover里勾选显卡注入Intel=Yes<key>Graphics</key> <dict> <key>Inject</key> <dict> <key>Intel</key> <true/> </dict>
楼下还有,这数字限制还有编辑器老是卡死, 好累……{:5_279:}
6、使用最新版的键盘驱动VoodooPS2Controller.kext,Fn+F7和Fn+F8亮度可以调节,但没有小太阳,而且不能保存关机前的亮度。此时有水波纹所以显卡是驱动了的,出现这些问题是因为Fn+F7和Fn+F8对应DSDT没有和驱动VoodooPS2Controller.kext映射对应。 6.1 修改DSDT,亮度增加Fn+F7,查找Method (_Q14, 0, NotSerialized),将里面的代码修改为: Method (_Q14, 0, NotSerialized) { Notify (PS2K, 0x0206) Notify (PS2K, 0x0286) } 6.2 亮度减小,FN+F8,查找Method (_Q15, 0, NotSerialized),修改为: Method (_Q15, 0, NotSerialized) { Notify (PS2K, 0x0205) Notify (PS2K, 0x0285) }6.3 外接显示器,Fn+F6,查找Method (_Q16, 0, NotSerialized),(由于没有HDMI接口显示器并未测试此项,VGA外接还要另外利用KextstoPatch修改AppleIntelSNBGraphicsFB.kext)修改为: Method (_Q16, 0, NotSerialized) { Notify (PS2K, 0x026e) Notify (PS2K, 0x02ee) }7、修改显卡显存384MB到768MB,可以减少随机花屏假死的概率但不能杜绝,不能杜绝,不能杜绝,重要的事说三遍,在AppleIntelSNBGraphicsFB里的二进制文件代码C745C400 000018改为C745C400 000030,尾数18=384MB,20=512MB,30=768MB,40=1024MB。这里选择Colver的KextsToPatch。<key>KernelAndKextPatches</key> <dict> <key>KextsToPatch</key> <array> <dict> <key>Comment</key> <string>Change HD3000 Memory from 384MB to 768MB on 10.12</string> <key>Disabled</key> <false/> <key>Find</key> <data> x0XEAAAAGA== </data> <key>Name</key> <string>com.apple.driver.AppleIntelSNBGraphicsFB</string> <key>Replace</key> <data> x0XEAAAAMA== </data> </dict> </array> </dict>8、据说在开机启动参数里添加“slide=0”也可以减少随机花屏假死的概率,如果添加后不能启动还是去除吧(用HotPatch时就发现添加后不能启动)。
屏蔽独显(Nvidia GT610m)这个单独拿出来说基本原理:在电脑开机时(对应_INI method)和睡眠唤醒时(对应_WAK method)调用关闭Nvidia独显的Method。
这个网站http://hybrid-graphics-linux.tuxfamily.org/index.php?title=ACPI_calls总结了关闭Nvidia显卡的常见methods,还列举了一些机型的具体情况,大家可以去看看,弄清楚自己电脑关闭显卡的method究竟是哪个,然后结合这个帖子来修改DSDT.
正如上面那个网站所示,关闭Nvidia独显一般有两种方法:一、使用 _DSM + _PS3;二、直接用_OFF(或者DOFF,SGOF等等,有些机型是不同的);
虽然上面那个网站一般都是直接调用OFF()函数来关闭独显的,但个人觉得如果有_DSM和_PS3的话,先使用方法一比较好,因为方法二可能会有一些影响,比如CPU变频的问题。(具体请看参考帖子[教程] 解决Optimus 和CPU Turbo 变频冲突)。
具体方法: 很多人喜欢把SSDT的显卡部分移到DSDT中然后添加关闭独显的代码,并且开机DropOEMSSDT只用DSDT。但是我个人觉得这样子很麻烦,首先在移动过程中可能会产生错误,而且Drop掉SSDT后,DSDT中的那些External variables,methods就无法access了,因此DSDT中用到这些Objects,Methods的地方就会产生问题。如果Drop SSDT的目的是为了使用clover和变色龙的Generate P-States和C-States的话,clover可以只Drop掉有CPU信息的SSDT,变色龙可以把除有CPU信息的其他SSDT放在Extra目录下再DropSSDT,所以我认为完全没有必要花时间来移动显卡部分或者其他东西。如果DSDT和SSDT要相互调用对方的函数,那就在definition block那里加上External就好了。(如果新人看不懂这一段就跳过吧) 说了那么多废话,终于开始了。 注意,在修改DSDT和SSDT之前,可以用这个帖子介绍的方法先生成dsl文件,可以减少错误,还有其他错误自己爬帖解决。不过如果你某个DSDT或SSDT有错误不能解决但你不需要再把它编译成AML文件的话,可以不用管它。
方法一: 1.首先在DSDT和SSDT中搜索找到要用的函数_WAK,_INI,_PS3,_DSM。_WAK一般只有一个。_INI可能有很多个,最好用\_SB.PCI0下或\_SB.PCI0.PEG0.PEGP的。_PS3只有一个,如果没有的话看方法二。_DSM会有很多个,一定要用\_SB.PCI0.PEG0.PEGP下的,如果\_SB.PCI0.PEG0.PEGP下没有,搜索看看显卡定义Device(IGPU)下有没有(注意,以下步骤是默认你DSDT的相关methods为一般情况,若有不同需根据你自己的DSDT做相应更改) 2.在_WAK之前新建一个Method PINI()
[*] Method (PINI, 0, NotSerialized)
[*] {
[*] \_SB.PCI0.PEG0.PEGP._DSM (Buffer (0x10)
[*] {
[*] /* 0000 */ 0xF8, 0xD8, 0x86, 0xA4, 0xDA, 0x0B, 0x1B, 0x47,
[*] /* 0008 */ 0xA7, 0x2B, 0x60, 0x42, 0xA6, 0xB5, 0xBE, 0xE0
[*] }, 0x0100, 0x1A, Buffer (0x04)
[*] {
[*] 0x01, 0x00, 0x00, 0x03
[*] })
[*] \_SB.PCI0.PEG0.PEGP._PS3 ()
[*] }
[*]
3.在_WAK和适当的_INI中调用PINI()。_WAK和_INI可能不在同一个DSDT或SSDT中,没有关系
[*] Method (_WAK, 1, Serialized)
[*] {
[*] PINI ()
[*] ......
[*] }
[*][。。。省略。。。]
[*]Method (_INI, 0, NotSerialized)
[*] {
[*] PINI ()
[*] .......
[*] }
[*]
[*]方法二:
[*] 如果没有_PS3函数,或者使用上面的方法没效果,那就试试这个方法吧。
[*] 1.在_WAK和\_SB.PCI0下或\_SB.PCI0.PEG0.PEGP下适当的_INI里面加入”\_SB.PCI0.PEG0.PEGP._OFF() "
[*]Method (_WAK, 1, Serialized)
[*] {
[*] \_SB.PCI0.PEG0.PEGP._OFF()
[*] ......
[*] }
[*][。。。省略。。。]
[*]Method (_INI, 0, NotSerialized)
[*] {
[*] \_SB.PCI0.PEG0.PEGP._OFF()
[*] .......
[*] }
[*]
4.编译,如果有类似“Error Object does not exist (PINI)”的错误若Object does not exist (PINI)在DefinitionBlock(在DSDT和SSDT的最上面)加上 External(PINI, MethodObj)例如 DefinitionBlock ("acpi_dsdt.aml", "DSDT", 1, "LENOVO", "CB-01 ", 0x00000001){ External (_SB_.PCI0.PAUD.PUAM, MethodObj) // Warning: Unresolved Method, guessing 0 arguments (may be incorrect, see warning above) External (_SB_.PCI0.XHC_.DUAM, MethodObj) // Warning: Unresolved Method, guessing 0 arguments (may be incorrect, see warning above) External (_SB_.TPM_.PTS_, MethodObj) // Warning: Unresolved Method, guessing 1 arguments (may be incorrect, see warning above) External (_PR_.CFGD, FieldUnitObj) External (_PR_.CPU0._PPC, IntObj) External (_PR_.CPU0._PSS, PkgObj) External (PINI, MethodObj)
若Object does not exist (\_SB.PCI0.PEG0.PEGP._PS3)在DefinitionBlock加上 External(_SB_.PCI0.PEG0.PEGP._PS3, MethodObj)若Object does not exist (\_SB.PCI0.PEG0.PEGP._DSM)在DefinitionBlock加上 External(_SB_.PCI0.PEG0.PEGP._PS3, MethodObj) 5.没有错误了,编译,save AML,把修改了的DSDT.aml, SSDT.aml和其他所以没有修改的SSDT*.aml放在Extra目录(变色龙),或patched文件夹(Clover),这样的话要DropSSDT。开机,进BIOS里Config/Display--Graphics Device选择双显卡,保存重启幸运的话,Nvidia显卡应该被屏蔽了。
声卡(Conexant Cx20590)1、注入声卡Layout-id=28(十六进制为1C),如果是用标准的AppleALC.kext并注入Layout-id=3,那么内置麦克风不能用。这里使用的是Layout-id=28。 在DSDT里打补丁Audio Layout 3,然后查找layout-id,将下面的0x03, 0x00, 0x00, 0x00修改为0x1C, 0x00, 0x00, 0x00Device (HDEF) { …… Method (_DSM, 4, NotSerialized) { If (LEqual (Arg2, Zero)) { Return (Buffer (One) { 0x03 }) }
Return (Package (0x06) { "layout-id", Buffer (0x04) { 0x1C, 0x00, 0x00, 0x00 },
"hda-gfx", Buffer (0x0A) { "onboard-1" },
"PinConfigurations", Buffer (Zero) {} }) } }
或者是在Clover的config.plist里注入 <key>Devices</key> <dict> <key>Audio</key> <dict> <key>Inject</key> <string>28</string> </dict> </dict>
2、在Clover的config.plist里勾选FixHPET=Yes <key>ACPI</key> <dict> <key>DSDT</key> <dict> <key>Fixes</key> <dict> <key>FixHPET_0010</key> <true/> </dict> </dict>
3、为驱动AppleALC.kext在未支持的版本里运行,添加启动参数“-alcbeta”<key>Boot</key> <dict> <key>Arguments</key> <string>-alcbeta</string> </dict>
4、添加驱动AppleALC.kext到文件夹/L/E
电池电量1、在DSDT里打补丁Lenovo E430/E5402、电池电量总显示为0%,打第2个补丁Fix Mutex with non-zero SyncLevel3、添加驱动ACPIBatteryManager.kext,ACPIPoller.kext到文件夹/L/E
关机/睡眠/USB/呼吸灯关机变为重启,或者睡眠后不断电(风扇一直转动)这很多是由于USB引起的问题1、在DSDT里打补丁USB3_PRW 0x0D(instant wake)1.1、在DSDT里打补丁7-sdries/8-series USB.——待测试是否要打这个补丁因为上一个补丁已添加了设备信息。2、在Clover的config.plist里勾选FixShutdown=Yes和FixUSB=Yes<key>ACPI</key> <dict> <key>DSDT</key> <dict> <key>Fixes</key> <dict> <key>FixShutdown_0004</key> <true/> <key>FixUSB_1000</key> <true/> </dict> </dict> </dict>3、添加驱动USBInjectALL.kext、FakePCIID.kext和FakePCIID_XHCIMux.kext到文件夹/L/E4、睡眠唤醒后LED灯还是处于一闪一闪的呼吸灯状态,应该是变为长亮的状态,通过添加\_SI._SST()的状态代码设置LED灯变化4.1、在_WAK开头添加 \_SI._SST (0x02)在_WAK中间 Return (WAKI)之前和结尾 Return (WAKI)之前添加 \_SI._SST (One) Method (_WAK, 1, NotSerialized)// _WAK: Wake {// tjl-begin fixes// tjl-fix use SPS which was set in _PTS instead of OS value Store (\SPS, Arg0)// tjl-fix added call to SST to reset LEDs after sleep -- 2 is waking \_SI._SST (0x02)……If (LOr (LEqual (Arg0, Zero), LEqual (Arg0, 0x05))) {// tjl-fix added call to SST to reset LEDs after sleep -- 1 is normal \_SI._SST (One) Return (WAKI) /* \WAKI */ }// tjl-end……// tjl-fix added call to SST to reset LEDs after sleep -- value of 1 is normal \_SI._SST (One) Store (Zero, RRBF) /* \RRBF */ Return (WAKI) /* \WAKI */ }
蓝牙把蓝牙BCM202702A0,的Product-id: 0x21F4(十进制为8692)和Vendor-id: 0A5C(十进制为2652)注入到/System/Library/Extensions/IOBluetoothFamily.kext/Contents/PlugIns/BroadcomBluetoothHCIControllerUSBTransport.kext/Contents/Info.plist,找到其中的一个2652的,修改idProduct为自己的ID,我的是4代蓝牙,把8680修改为8692就可,这里用专门优化过的id注入驱动BlueTooth_Injector.kext,这样就避免了修改系统文件,可直接升级。1、修改BlueTooth_Injector.kext/Contents/info.plist<key>IOKitPersonalities</key> <dict> <key>21F4(8692)_0A5C(2652)</key> <dict> <key>CFBundleIdentifier</key> <string>com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport</string> <key>IOClass</key> <string>BroadcomBluetoothHostControllerUSBTransport</string> <key>IOProviderClass</key> <string>IOUSBHostDevice</string> <key>idProduct</key> <integer>8692</integer> <key>idVendor</key> <integer>2652</integer> </dict> </dict>2、把引导驱动BlueTooth_Injector.kext添加到文件夹/L/E
小红点如果用RahabMan发布的标准VoodooPS2Controller.kext会发现小红点移动发飘,需要专门优化过的驱动1、把专门优化过的VoodooPS2Controller.kext添加到文件夹/L/E2.1、修改BlueTooth_Injector.kext/Contents/info.plist<key>IOKitPersonalities</key> <dict> <key>E065(57445)_105B(4187)</key> <dict> <key>CFBundleIdentifier</key> <string>com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport</string> <key>IOClass</key> <string>BroadcomBluetoothHostControllerUSBTransport</string> <key>IOProviderClass</key> <string>IOUSBHostDevice</string> <key>idProduct</key> <integer>57445</integer> <key>idVendor</key> <integer>4187</integer> </dict> </dict>
2.2、把引导注入id驱动BlueTooth_Injector.kext添加到文件夹/L/E
[*]
[*] 无线网卡/有线网卡
[*]1、自带的无线网卡无解,改用了USB百度WiFi,使用RT2870的驱动
[*]2、有线网上直接把驱动RealtekRTL8111.kext添加到文件夹/L/E
相关文件也可以到网盘下载:链接:http://pan.baidu.com/s/1c1IF8cg密码:uy9x
突然发现个问题,applebacklightinjector.kext在/efi/clover/kexts/下的时候Fn亮度快捷键可以调节亮度, 但一安装到L/E/下的时个就不可以了, 很奇怪, 没发现什么原因,所以现在所有驱动都是放在/efi/clover/kexts/下的 caico 发表于 2017-9-27 16:00 https://www.pcbeta.com/static/image/common/back.gif
突然发现个问题,applebacklightinjector.kext在/efi/clover/kexts/下的时候Fn亮度快捷键可以调节亮度, 但一 ...
大神你好,同样机型,我刚装好10.13.4,蓝牙、wifi和睡眠都不行。我想问一下,E430的bios里可以选择只用核显启动,为什么还需要屏蔽独显呢? JohnSangs 发表于 2018-4-27 10:12 https://www.pcbeta.com/static/image/common/back.gif
大神你好,同样机型,我刚装好10.13.4,蓝牙、wifi和睡眠都不行。我想问一下,E430的bios里可以选择只用核 ...
这是为了方便使用windows和mac OS X 双系统的用户,回到windows时可以用独显,不用每次还要手动进bios调回双显卡模式 给老电脑装一个...和现在的套路完全不一样,学习了 太牛逼了 不容易 谢谢 请问我也是这个机型,用你的efi文件为什么连四叶草引导界面都到不了啊?麻烦大神指导一下 谢谢分享 楼主,方便留个联系吗?求指导一下 相约二年 发表于 2019-12-6 21:36 https://www.pcbeta.com/static/image/common/back.gif
楼主,方便留个联系吗?求指导一下
好久没逛论坛了,如果只是初次使用安装,建议用著名的RehabMan的初始安装配置文件https://github.com/RehabMan/OS-X-Clover-Laptop-Config
例如用“config_HD3000_1366x768_7series.plist”重命名为“config.plist"放到CLOVER里。
还有别人配置好的适用thinkpad的efi:《基于HOTPATCH3.1的THINKPAD黑苹果系列完美EFI》https://bbs.pcbeta.com/viewthread-1752094-1-1.html 谢谢,学习了! caico 发表于 2017-9-24 16:05 https://www.pcbeta.com/static/image/common/back.gif
电池电量1、在DSDT里打补丁Lenovo E430/E5402、电池电量总显示为0%,打第2个补丁Fix Mutex with ...
感谢大佬分享 有个相同配置的古董机,最近想折腾一下,感谢分享,学习中
页:
[1]