冷凝器 发表于 2016-3-8 14:39

406731 发表于 2016-3-8 08:45 https://www.pcbeta.com/static/image/common/back.gif
嗯,是的,显卡ID是10029553

给你我的显卡驱动


406731 发表于 2016-3-8 15:08

冷凝器 发表于 2016-3-8 14:39 https://www.pcbeta.com/static/image/common/back.gif
给你我的显卡驱动

十万分感谢。。。。🙏

neycwby09 发表于 2016-3-8 15:13

冷凝器 发表于 2016-3-8 14:39 https://www.pcbeta.com/static/image/common/back.gif
给你我的显卡驱动

你DSDT里USB部分 Device (EH01) 和 Device (EH02) 下的接口 是不是自己修改了?

是的话,麻烦传一份原来没改的版本,因为我看了下你现在DSDT里定义的USB接口全都是被禁用的

neycwby09 发表于 2016-3-8 18:30

本帖最后由 neycwby09 于 2016-3-8 18:33 编辑

翻了翻以前的旧帖:https://bbs.pcbeta.com/viewthread-1489194-1-1.html 有了点想法:

主要我的dsdt比较奇葩,大家基本都是GFX0而我必须是VGA(而且我的dsdt中也有GFX,用IORegistryExplorer看如果显卡驱动起来就是GFX,没有驱动起来就是VGA),不知道怎么解决,还是用回了aty_init.kext。

我回想起了当年显卡位置在 DSDT 的问题,现在我搞清楚了。所以写了写自己的想法和结论,也算是了却一个一直放不下的疑问。

你的独显 545v 一直都在 Device (P0P2) >> Device (VGA) 下面。

DSDT 里的 Device (GFX0) 是核显,因为你的笔记本跟我的一样都是出厂屏蔽了,所以这个设备不用理会。
DSDT 里也能看出这个名为 GFX0 的设备里不包含任何显示设备。当然这个很正常,因为内屏(LVDS)、VGA 和 DP 接口都直接连接到了独显上,这个也可以从 Device (VGA) 下面有若干 Device (LCD) Device (CRT) Device (HDMI) 设备看出。(LCD 是内屏;CRT 属于模拟输出,在这就属于 VGA 输出;HDMI 属于数字输出,在这就属于 DP 输出)。

关于当时我们第一反应觉得 GFX0 应该是独显,其实这个判断是错误的,属于思维定式了。
设备名只是个名字,真正判断到底是什么设备还是要看所在地址。

DSDT里可以看出 Device (GFX0) 的地址是 0x00020000。Device (GFX0)
{
      Name (_ADR, 0x00020000)
      Name (_SUN, One)
      ......
}
而 Device (VGA) 的父级设备或上级设备 Device (P0P2) 的地址是 0x00010000。Device (P0P2)
{
      Name (_ADR, 0x00010000)
      ......
}
我查了下 ACPI 规范以及参阅了一些 DSDT,一般地,0x00010000 下接的都是独显,0x00020000 接的都是核显。

除此之外,从你笔记本的 IOReg 里也能看到:



ACPI-Path 即 ACPI 路径处的值为 IOACPIPlane:/_SB/PCI0@0/P0P2@10000/VGA@0
(其中 P0P2@10000 对应的是 P0P2 的地址 0x00010000;VGA@0 对应的是 VGA 的地址 0x0)
Device (VGA)
{
         Name (_ADR, Zero) // 地址
         ......
}
综上,通过这些能100%确定独显在并且一直都在 Device (P0P2) >> Device (VGA) 。

那么问题就来了,为什么(上图) IOReg 里显示显卡为 P0P2 下的 GFX@0。
(而且我的dsdt中也有GFX,用IORegistryExplorer看如果显卡驱动起来就是GFX,没有驱动起来就是VGA)
这个 GFX@0 不是 DSDT 里的 Device (GFX0)。这个 GFX 名称是因为 ATY_init.kext 搞的。

我逆向了 ATY_init,发现在驱动加载后的检测硬件过程,有一处逻辑:如果没找到对应的型号,那么就指定默认的 GFX 为名称。当然具体 ATY_init 这段检测逻辑是什么也没细看,但是目测十有八九 IOReg 里显示 GFX 是因为 ATY_init.kext。

所以我稍微调整了 DSDT 的架构。
改动如下:
1. 删除 Device (GFX0) 下的 Method (_DSM, 4, NotSerialized) 函数,因为这个设备是核显,所以给它注入A卡的信息也没什么用。
2. 把 Device (VGA) 从 Scope (_SB.PCI0.P0P2) 这个作用域中移走。直接把这个 VGA 设备放到 Device (PCI0) >> Device (P0P2) 下面。
3. 重命名 Device (VGA) 为 Device (PEGP) 并同时修改其他调用 VGA 设备的地方为 PEGP。
4. 移动 Device (HDAU) 到 Device (P0P2) 下。Device (HDAU) 的位置在层级上永远与对应显卡设备并列。以前的位置(即在 Device (PCI0) 下)是错误的,这也就说明 https://bbs.pcbeta.com/viewthread-1489194-1-1.html 上次搞DSDT HDMI音频输出的时候一直没出来,最后依靠 ATY_init 注入属性了。

以上修改主要是为了规范下 DSDT 的架构,然后规范下命名。

修改后的架构就是这样:_SB.PCI0.P0P2.HDAU
_SB.PCI0.P0P2.PEGP

至此当年的疑问就解决了。

用这个新的 DSDT,可以考虑搭配 Clover 的 InjectATI=True,FBName=Shrike,LoadVBIOS=True,InjectEDID=True 外加 Clover 自定义 Framebuffer 就可以摆脱 ATY_init.kext 了。还可以试试用 Clover 的 FakeID 功能,把你的显卡仿冒成苹果用的 ATI Mobility Radeon HD 4670(设备ID:0x9490)这样以后就不用再改 AMD4600Controller.kext 了。

(当然仿冒之后预计也无法完美驱动 545v。毕竟 545v 属于 ATI 4500 系列的显卡,苹果在4系上只支持 4600 和 4800 系。硬件所属系列的正确驱动可能不同于苹果本身提供的 4600 系驱动。所以仿冒只是为了摆脱下每次改驱动。)


那么这个唤醒黑屏问题,我不知道你是唤醒死机还是唤醒黑屏但机器还在工作。如果只是唤醒后黑屏,试试接 DP/VGA 看看外屏有无输出。

既然换完 SMBIOS 还没解决,我估计问题可能出在 Framebuffer 上了。

https://bbs.pcbeta.com/viewthread-1489194-1-1.html 当时把内屏的 enc 从 04 改成 00 了。

所以我猜是不是跟这个改动有关系。

首先把 SMBIOS 调成 MacBookPro6,2 ,试试我刚才提到的 Clover 方法看看能否摆脱 ATY_init 来驱动 545v。
然后你可以试试先把 DP 和 VGA 那两行的 FB 全用 00 来屏蔽,这样只剩 LVDS 内屏这一个接口。先试原来的 enc 看看唤醒会不会点亮内屏。如果还黑,试试把内屏的 enc 改成 01(苹果原版 4600 FB 里的 LVDS 就是这样的)然后再改成你后来成功的 00 试试。

根据目前的信息来看,A卡在 OS X 10.11+ 下唤醒黑屏问题主要出现在 6系以及以上的显卡上。5系的目前我没遇到有人说唤醒黑屏的,4系的我觉得更不应该。(虽然我有个最坏的预想是因为你的核显,因为你 DSDT 出现核显设备,有点奇怪。)

所以,如果可以的话,麻烦你上传你原始的 DSDT 和 所有 SSDT。(可以在 Clover 引导界面按 F4 自动提取,提取后的所有原版 ACPI 表在 EFI 分区下的 /EFI/Clover/ACPI/origin/ 下。)

如果条件允许的话,唤醒黑屏后外接有亮的话,麻烦保存唤醒后的 IOREG 和 日志(在控制台>>所有信息 然后菜单另存为)

我找时间再去找找 A卡FB相关的信息,看看有没有类似的案例。

新的 DSDT:


对了,忘了件事,你的 Clover config.plist 里启动参数加了 npci=0x2000 这个是必须要加的吗?如果不是的话,最好去掉,这个参数有时候很耽误事。

neycwby09 发表于 2016-3-8 18:50

这是我改的 config.plist

1. 调整 SMBIOS 为 MacBookPro6,2
2. 在 Devices 模块加入仿冒 A 卡硬件ID为 0x94901002 (AMD4600Controller原生支持的ID)
3. 在 Graphics 模块设置了 FBName=Shrike;LoadVBIOS=True;PatchVBIOS = True;InjectEDID=True;InjectATI=True;VideoPorts=3

KernelAndKextsPatches 模块我没在 Clover 里设置自动给 AMD4600Controller 打补丁。
你可以在 ATI Connectors Data 处填写 Shrike 的原版 FB,在 ATI Connectors Patch 处填写你自己的 FB;然后把 ATI Connectors Controller 的值改成 4600。



原版 Shrike FB 值(基于 10.11.3)Shrike (3) @ 0x9eb50
LVDS, LVDS, DP
02000000400000000901000002010003
02000000000100000901000020010202
00040000040300000001000010000101合并成一行:020000004000000009010000020100030200000000010000090100002001020200040000040300000001000010000101

冷凝器 发表于 2016-3-8 19:54

neycwby09 发表于 2016-3-8 18:50 https://www.pcbeta.com/static/image/common/back.gif
这是我改的 config.plist

1. 调整 SMBIOS 为 MacBookPro6,2


最原始的dsdt我还真提取了一份,是在win下提取的
最近比较忙,明天晚上我试试

冷凝器 发表于 2016-3-8 19:59

neycwby09 发表于 2016-3-8 15:13 https://www.pcbeta.com/static/image/common/back.gif
你DSDT里USB部分 Device (EH01) 和 Device (EH02) 下的接口 是不是自己修改了?

是的话,麻烦传一份原 ...

在10.11下,如果直接用ehc1和ehc2,那么所有的usb口就不能使用,只有改为eh01和eh02,配合usbinjectall.kext才能解决10.11下usb不能使用的情况
 原版的dsdt就是把eh01和eh02改为EHC1和ech2就行

neycwby09 发表于 2016-3-9 06:41

冷凝器 发表于 2016-3-8 19:59
在10.11下,如果直接用ehc1和ehc2,那么所有的usb口就不能使用,只有改为eh01和eh02,配合usbinjectall.k ...

恩 我看了下原始dsdtusb问题我弄明白了 原因是因为dsdt里关于usb下端口的信息不全+部分有误。

麻烦你在usb所有口都好使的情况下(即dsdt eh01 eh02 配合 usbinjectall.kext)

先打开ioreg 保持ioreg窗口开启
然后找一个U盘 把你机器上的所有usb口挨个插一遍完成后 保存这个记录所有插拔过程的ioreg 然后上传发给我下。

这样我就知道你机器到底哪些口是真正可以被使用 并且工作正常的 然后依据这个ioreg 我再直接改dsdt+做匹配的injector


冷凝器 发表于 2016-3-9 20:24

neycwby09 发表于 2016-3-9 06:41 https://www.pcbeta.com/static/image/common/back.gif
恩 我看了下原始dsdtusb问题我弄明白了 原因是因为dsdt里关于usb下端口的信息不全+部分有误。

麻烦你 ...

可不可以所有usb口都使用的情况下(就是我把所有usb同时都用上)保存ioreg,发给你

neycwby09 发表于 2016-3-10 06:05

冷凝器 发表于 2016-3-9 20:24 https://www.pcbeta.com/static/image/common/back.gif
可不可以所有usb口都使用的情况下(就是我把所有usb同时都用上)保存ioreg,发给你

可以



字数补丁

冷凝器 发表于 2016-3-11 08:33

本帖最后由 neycwby09 于 2016-3-11 09:26 编辑

neycwby09 发表于 2016-3-10 06:05 https://www.pcbeta.com/static/image/common/back.gif
可以



我把三个usb口都用上了

(已查收)

neycwby09 发表于 2016-3-11 09:26

冷凝器 发表于 2016-3-11 08:33 https://www.pcbeta.com/static/image/common/back.gif
我把三个usb口都用上了

漂亮 OK 收到

冷凝器 发表于 2016-3-11 09:39

neycwby09 发表于 2016-3-11 09:26 https://www.pcbeta.com/static/image/common/back.gif
漂亮 OK 收到

 刚刚连接VGA试验了一下,内屏黑屏,但是vga显示是可以的

neycwby09 发表于 2016-3-11 13:14

本帖最后由 neycwby09 于 2016-3-11 14:34 编辑

Thinkpad L412 5系 USB 修复:

如下是你机器的 USB 端口架构图,备着以后苹果再在 USB 上搞什么幺蛾子。
也方便以后查看,不需要再看 IOREG 里的 USB 信息了。



适用于以下 SMBIOS 机型:
MacBookPro6,1
MacBookPro6,2
MacBookPro8,1
MacBookPro8,2

需要配合这个 DSDT:


定制的注入器驱动:


把注入器驱动安装到 SLE 或者 LE,删除 USBInjectAll.kext,修复权限重建缓存。
使用新的 DSDT,重启后,你的所有内置或外置的USB端口就应该好使了。

neycwby09 发表于 2016-3-11 13:17

冷凝器 发表于 2016-3-11 09:39 https://www.pcbeta.com/static/image/common/back.gif
 刚刚连接VGA试验了一下,内屏黑屏,但是vga显示是可以的

喔 也就是说唤醒后 只是内屏黑屏 但是外接VGA还是有图像的。。。

我觉得还是可能跟内屏LVDS那行FB 上次改的 enc 有关。

应该是 FB 的问题

冷凝器 发表于 2016-3-11 14:32

neycwby09 发表于 2016-3-11 13:17 https://www.pcbeta.com/static/image/common/back.gif
喔 也就是说唤醒后 只是内屏黑屏 但是外接VGA还是有图像的。。。

我觉得还是可能跟内屏LVDS那行FB 上次 ...

好的,我调整一下enc

neycwby09 发表于 2016-3-11 14:33

冷凝器 发表于 2016-3-11 14:32 https://www.pcbeta.com/static/image/common/back.gif
好的,我调整一下enc

还有34F的USB

eashuang 发表于 2016-3-11 15:57

能贴个鲁大师的配置图吗。我看看和我的联想小新有适用的驱动没有。。

冷凝器 发表于 2016-3-11 16:57

neycwby09 发表于 2016-3-11 14:33 https://www.pcbeta.com/static/image/common/back.gif
还有34F的USB

经过试验发现蓝牙不能用

冷凝器 发表于 2016-3-11 17:12

本帖最后由 冷凝器 于 2016-3-11 17:34 编辑

neycwby09 发表于 2016-3-11 14:33 https://www.pcbeta.com/static/image/common/back.gif
还有34F的USB
首先usb除了蓝牙外其他都可以了
显卡的仿冒,现在内屏一直是黑屏,外接VGA显示完全没有问题,而且在关于本机中也变成了4570了,现在看来就是内屏了!我把我的内屏数据变成了我最原始的数据,依然没有点亮

补充:仿冒的结果睡眠唤醒内外屏都黑
页: 1 [2] 3 4 5
查看完整版本: ThinkPad L412安装10.11.3成功