|
联想ThinkPad触控板和小红点黑苹果驱动分享
近几年的 ThinkPad 都是 Synaptics(新思)的 ELAN 触控板,连接方式分为三种:通过 I2C 连接、通过 SMBus 连接、通过 PS2 连接。在 Windows 的「设备管理器」中找到触控板设备,双击后在「详细信息」中的菜单、选择「BIOS 设备位置」,查看设备的 PCI 总线路径,可以确认连接方式。
除了连接方式的区别以外,根据外观 ThinkPad 的触控板还可以再分成两类,TouchPad 和 ClickPad
上图的两种触控板的类型是 ClickPad。识别特征是触控板上方有三个独立按键,而触控的部分也可以整体点击,故称 ClickPad。近几年的 ThinkPad 的商务笔记本机型基本都是采用 ClickPad。
上图的两种触控板的类型是 TouchPad。识别特征是触控板有三个独立按键,而在触控板下方还有二至三个独立按键,而触控的部分不能点击。ThinkPad 的移动工作站机型除 ThinkPad P1 以外基本都是采用 TouchPad,代表机型有 ThinkPad P52、P53、P73 等。
确定驱动方式
根据连接类型来看,只有通过 I2C 总线连接触控板的 ThinkPad 机型可以使用 VoodooI2C 驱动,已知机型只有 ThinkPad Yoga 系列和 X1 Tablet 系列。即使这部分 ThinkPad 机型可用 VoodooI2C,VoodooI2C 也不支持 ThinkPad 小红点 TrackPoint 的驱动。对于走 PS2 总线的机型需要使用 VoodooPS2 驱动。
对于走 SMBus 的部分机型,如 ThinkPad E480、E580、R480、R580、L380、T480s、P52、P53,也可以使用 VoodooSMBus 驱动。但是该驱动较不完善、开发进程缓慢,仅供尝鲜、不不推荐日常使用。这部分机型也一样可以使用 VoodooPS2 驱动。
由于 ThinkPad 绝大部分机型都适合用 VoodooPS2 驱动,因此接下来的教程先介绍如何通过 VoodooPS2 驱动触控板。
VoodooPS2
添加 SSDT
VoodooPS2 兼容几乎所有的笔记本、台式机的 PS2 设备。因此为了启用 VoodooPS2 中内置的 ThinkPad 优化、以及同时启用小红点、触控板顶部的三个按键和触控板,需要通过 SSDT 在 _SB.PCI0.LPC.KBD 下新增 RMCF 变量、注入触控板属性供 VoodooPS2 读取。
相关的热补丁 SSDT 我已经提交给 OC-little ( https://github.com/daliansky/OC-little ) 并已经合并,你现在可以直接在 OC-little 的「品牌机器特殊补丁 - ThinkPad 机器专用补丁」章节中直接下载、编译即可。如果你的触控板是 ClickPad,那么需要下载的是 SSDT-ThinkPad_ClickPad.dsl ;如果你的触控板是 TouchPad 则下载 SSDT-ThinkPad-TouchPad.dsl。下载好 DSL 文件后用 iasl 编译为 AML 文件、添加到 EFI 中即可。
需要注意,我提交给 OC-little 中的 SSDT 中已经包含了数位前辈调优过的小红点参数(解决了小红点漂移),如果小红点用起来不习惯,可以自行调整 SSDT 中的参数。除此以外,如果你依赖 Custom PS2 Map 或 Custom ADB Map 的键位映射,也会涉及到对 RMCF 变量的修改,因此需要合并 SSDT。如何合并 SSDT 的样例也已经包含在 OC-little 的「品牌机器特殊补丁 - ThinkPad 机器专用补丁」章节中,自行参考。
放入 kext
下载 VoodooPS2 ( https://github.com/acidanthera/VoodooPS2 ) 添加到 EFI 中即可(Clover 直接放入 EFI 对应目录即可,OpenCore 则还需要在 config.plist 中手动添加 Contents/Plugins 下的所有子 kext)。VoodooInput ( https://github.com/acidanthera/VoodooInput ) 是一个扩展驱动,目前最新版的 VoodooPS2 已经内置。 VoodooInput 通过模拟 Magic TrackPad 2、可以完整支持全部触控板手势;还可以将 ThinkPad ClickPad 的触控板点击 模拟为 Magic TrackPad 的压力触控(Force Touch and Haptic Feedback)。
放好 SSDT 和 kext 以后,重启即可。如果发现触控板无反应而小红点可以使用,先用下述命令检查相关 kext 是否已经加载:
- $ kextstat | grep -Ei "VoodooInput"
- $ kextstat | grep -Ei "PS2"
复制代码 VoodooSMBus
VoodooSMBus 由于还不完善、仍在缓慢开发中,安装方式相对复杂、在 Catalina 上存在随机出现的无法初始化的问题、需要用到的 Patch 不能用于 OpenCore(Replace 和 Find 长度不同),因此 仅推荐使用 Clover 且足够熟悉黑苹果的用户体验 VoodooSMBus。
首先,检查在 macOS 下是否能够识别到下表中的任何一个设备:
Name | ID | Sunrise Point-LP (PCH) | pci8086,9d23 | Cannon Lake-H (PCH) | pci8086,a323 |
接着,检查自己的触控板是否是通过 SMBus 总线连接的。触控板的连接方式除了可以在 Windows 下通过「设备管理器」查看,还可以在 Linux 下用 dmesg | grep -E 'psmouse|i801' 命令查看。只有同时满足上述两个条件才可以用 VoodooSMBus 驱动。
如果你已经在用 VoodooPS2 驱动,先删除添加的 SSDT 和 VoodooPS2。
下载 VoodooPS2 ( https://github.com/acidanthera/VoodooPS2 ) (键盘还是要用 VoodooPS2 驱动的)。接着删除 VoodooPS2Controller.kext 和 VoodooInput.kext(如果使用 Clover 驱动,右键点击「查看包内容」、删除其中的 Contents/Plugins/VoodooPS2Mouse.kext 和 Contents/Plugins/VoodooInput.kext)。
在 Clover 的 config.plist 中添加如下 KextToPatch:
- Comment: Prevent VoodooPS2Controller attaching to MOU
- Identifier: as.acidanthera.voodoo.driver.PS2Controller
- Find: 3C737472 696E673E 504E5030 4630453C 2F737472 696E673E 3C7374 72696E67 3E504E50 30463133 3C2F7374 72696E67 3E
- Replace: 3C737472 696E673E 504E5030 4630453C 2F737472 696E673E
复制代码- Comment: Prevent Apple I2C kexts from attaching to I2C controllers #1, credit CoolStar
- Identifier: com.apple.driver.AppleIntelLpssI2C
- Find: 494F4B69 74
- Replace: 494F4B69 73
复制代码- Comment: Prevent Apple I2C kexts from attaching to I2C controllers #2, credit CoolStar
- Identifier: com.apple.driver.AppleIntelLpssI2CController
- Find: 494F4B69 74
- Replace: 494F4B69 73
复制代码- Comment: Prevent Apple SMBus kexts from attaching to SMBUS controller #1
- Identifier: com.apple.driver.AppleSMBusController
- Find: 494F4B69 74
- Replace: 494F4B69 73
复制代码- Comment: Prevent Apple SMBus kexts from attaching to SMBUS controller #2
- Identifier: com.apple.driver.AppleSMBusPCI
- Find: 494F4B69 74
- Replace: 494F4B69 73
复制代码
下载 VoodooSMBus ( https://github.com/leo-labs/VoodooSMBus ) 并安装到 EFI 中,重启即可。
|
打赏楼主
扫码打赏,你说多少就多少
|