OpenCore引导触摸板驱动总结 |
您所在的位置:网站首页 › oc引导修改dsdt › OpenCore引导触摸板驱动总结 |
前言: 此文在阅读@宪武大佬的OC补丁和@penghubingzho的帖子触摸板驱动基础上实践出来的,现结合自己遇到的一些问题与解决方法,分享出来给大家供大家参考,让需要的人少走弯路,在此感谢各位大佬,使用的方法是:屏蔽原有的触摸板,新建一个仿冒设备; 1.在Clover引导界面提取DSDT,按F4提取1完成后会在EFI-ACPI-origin文件夹下面生成一堆后缀为AML的文件,将整个origin文件夹复制到桌面,接下来进行反编译操作,下载IASL文件,在桌面点击前往-前往文件夹-输入:/usr/local/bin没有这个文件夹的话,自己创建一个,将IASL文件放进去; 在终端输入: cd /Users/你的用户名/Desktop/origin复制代码iasl -dl DSDT.aml SSDT*.aml 复制代码执行以下命令后,在origin文件夹会有DSL后缀格式的DSDT文件; 2..打开DSDT.dsl,搜索以下关键词的查看你的触摸板名称是什么: 触摸板: TPDX, ELAN, SYNA, CYPR, TPAD, ETPD 触摸屏: TPLX, ELAN, ETPD, SYNA, ATML 声明:以上触摸板和触摸屏的内容抄袭自@望海之州的博客。 3.打开MaciASL软件查找,我的是TPD0,设备位于I2C1总线文件结构如下: 将_SB.PCI0.I2C1的所有内容复制,放入我提供的例程DSL文件里,然后结构如下: 确认你的触摸板设备ID,比如我的是SYNA2846,我让_INI这个方法只识别我的ID,屏蔽SRXO,IF只返回One: 加入操作系统判断补丁,让_STA返回0xf,让MAC识别你的触摸板设备,此补丁只在MAC生效: 接下修改_CRS方法只返回SBFG,使用GPI0中断模式: 接下来进行SSDT排错: 查看你原有的DSDT搜索报错的名称添加外部引用比如: 报错的(_SB.PCI0.I2C1)在DSDT的定义的是设备类型地址 External (_SB_.PCI0.I2C1, DeviceObj) 报错的(_SB_.PCI0.HIDD)在DSDT定义的是方法 External (_SB_.PCI0.HIDD, MethodObj) 添加到声明处,其他报错的解决方法一致,可按以上解决 只剩下一个警告,可以忽略,接下来屏蔽原有设备,将TPD0改为TPDX,然后添加如下: 可以看到,我原有的DSDT是通过TPTY进行数据调用,将TPTY = 0 就可以屏蔽原有的设备,修改完成后,将DSL编译为AML文件放入OpenCore配置文件里面 接下把voodI2C主驱动和卫星驱动voodi2cHID添加进OpenCore配置文件里面,如下: 值得一提OC的驱动加载是有顺序要求的,大家要注意一下,接下重启使用IORegistryExplorer查看设备的加载情况,可以看到系统已经识别了我们的仿冒设备TPDX,并且屏蔽的原有的设备TPD0,那为什么驱动不了呢? 接下要使用,MACLOG这个软件,查看系统的日志,帮助我们找到原因,打开MACLOG这个软件,加载完毕后,在右上角输入voodoo查看KEXT的加载情况和反馈的问题: 我们可以从日志可以看到,系统出现以下字眼: 2019-12-3011:01:52.397956+0200 0xe5 Default 0x0 0 0 kernel: (VoodooI2C)VoodooI2CControllerNub::pci8086,a369 SSCN not implemented in ACPI tables 2019-12-30 11:01:52.398296+0200 0xe5 Default 0x0 0 0 kernel: (VoodooI2C)VoodooI2CControllerNub::pci8086,a369 FMCN not implemented in ACPI tables 2019-12-30 11:01:52.398594+0200 0xe5 Default 0x0 0 0 kernel: (VoodooI2C)VoodooI2CControllerDriver::pci8086,a369 Warning: Error getting bus config,using defaults where necessary 意思是,缺少总线速度等相关信息,因为我的DSDT本地没有SSCN+FMCN等相关的信息,需要手动添加,解决方法是在我们刚刚的仿冒的设备里面添加进去: 重启后,我们的触摸板就可以正常使用了; 3.答疑: 1.楼主,我看了很多教程,使用GPI0中断模式不是要计算GPI0的16进制引脚吗?为什么你的教程不用? 答:因为楼主的GPI0引脚在引导时,是bios自动填充的,因此不需要计算引脚。 2.那我的和你的不一样我要如何计算引脚呢? 答:楼主以自己的APIC16进制引脚举个例子,大家参考一下: 我使用IORegistryExplorer查看IOInterruptSpecifiers的值是 APIC十六进制引脚数 GPP_C11_IRQ 0x53 GPI0十进制引脚数 GPP_C11 62
CNL_GPP(0,51,74,64), / * GPP_C * / 计算公式:计算如下:62-51=11+64=75转换为16进制=4B GPI0十六进制引脚数 而系统返回的正是0x4B,不知道正不正确,请各位大佬纠正,详细的教程可以去亚历山大的github查看GPI0固定指南,这里附上链接: https://github.com/alexandred/VoodooI2C/blob/master/Documentation/GPIO%20Pinning.md 总结: 以上教程实现的方法,是学习@宪武大佬的OC补丁和@penghubingzho的博客再结合自己的实际操作,总结得来,如有侵权,请联系删除,再次感谢各位大佬提供的教程,尾部提供本文使用的软件和例程下载,供大家参考,本文有不严谨之处,请各位大佬指出,欢迎大家加入群聊:857996987共同学习,谢谢!! |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |