OpenCore引导触摸板驱动总结

您所在的位置:网站首页 oc引导修改dsdt OpenCore引导触摸板驱动总结

OpenCore引导触摸板驱动总结

#OpenCore引导触摸板驱动总结| 来源: 网络整理| 查看: 265

前言:

      此文在阅读@宪武大佬的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