跳转至

编译触控板驱动

前言

当你看到这部分内容的时候,表示你黑苹果已经研究的比较深了,驱动得自己定制魔改了。所以这里就假设你已经是一个高玩了,不会再啰嗦一些基础的姿势。

实际上这块内容搬运自我博客的这篇文章:双屏笔记本在 macOS 下的触控板驱动研究

由于文章比较长,所以就从里面提起关键的部分放到了这个教程里面,感兴趣的朋友也可以去原文观看一下。下面直接开始 VoodooI2C 项目的编译教程。

更新一下:VoodooI2C 的项目一直在变化,所以国光我没有精力去一直维护更新这篇文文章,虽然项目一直变,但是本文基本的思路还是值得参考的。

克隆源码

VoodooI2C 项目所依赖的模块属于不同的仓库,所以 git clone 的时候需要使用 recursive 参数一次性克隆下载完:

# 本次存放的文件夹路径仅供参考
$ pwd
/Users/bytedance/Desktop/XCode

$ cd ~/Desktop/XCode

$ git clone --recursive https://github.com/VoodooI2C/VoodooI2C.git

打开项目

使用 Xcode 打开VoodooI2C.xcworkspace文件:

打开项目肯定不是一帆风顺的,我们会看到许多 issue:

这里实际上我们不用管它,全部默认就好了,不要手动去点击「Perform Changes」哦。

IOKit 缺失

点击「Product」-「Build」先编译一下,发现报错了,提示:'IOKit/IOLib.h' file not found

这个地方一开始卡了我很久,后面发现在项目的「Build Settings」里面的「Library Search Paths」里面的 MacKernelSDK这个文件夹我并没有:

所以才会导致找不到 IOKit 的库文件,解决方法就是手动去补充完善 MacKernelSDK 的文件夹。

acidanthera 大佬维护的 MacKernelSDK 的一个开源项目地址为:https://github.com/acidanthera/MacKernelSDK

# 注意我当前操作的路径
$ pwd                                                           ✔
/Users/bytedance/Desktop/XCode/VoodooI2C

# 直接下载这个项目
$ git clone https://github.com/acidanthera/MacKernelSDK.git

此时再编译会发现之前的'IOKit/IOLib.h' file not found 报错消失了,这个问题得到了解决。

VoodooInputMultitouch 缺失

解决完上面一个小问题后,会发现又出了新的报错了:

'VoodooInputMultitouch/VoodooInputTransducer.h' file not found

不要慌,问题很大,这是因为项目里面缺少了对应的文件,也需要我们手动去补充一下。比较巧合的是,这个项目也是由acidanthera 大佬维护的 ,地址为:https://github.com/acidanthera/VoodooInput

VoodooInputMultitouch 文件拷贝到 VoodooI2C/Multitouch\ Support/Native 目录下:

此时再编译应该不会报错了。

cldoc 或者 cpplint 缺失

不过总有人会各种不顺,还可能会遇到 xargs: cldoc: No such file or directory 或者 cpplint: command not found这类报错,国光我这里忘记怎么解决的了,好像是直接安装 Python 的库来解决的:

sudo easy_install cldoc
sudo easy_install cpplint

貌似 macOS 12.3 开始移除了 Python2 了,就没有 easy_install命令, 我们可以使用 brew 命令来替代:

brew install cpplint

接着可能还遇到 cldoc 命令缺失的问题,除了安装对应的 cldoc 命令以外,还可以在项目里面直接移除掉:「Generate Documentation」部分:

具体更多细节忘记了,但是这块不复杂,既然都研究到 Xcode 编译这一步了,所以这个问题应该也难不倒大家的吧。

编译项目

至此所有的报错都解决了,下面直接来编译生成 kexts 吧,首先点击 build编译一下,很顺利:

然后点击「Product」接着点击「Archive」打包项目:

然后会弹出应该窗口,选择我们打包的最新版本,选择「Distribute Content」

后面默认选择「Build Products」即可:

最后桌面上就躺好了我们编译好的 kexts 文件了:

坑点记录

我们编译的 VoodooI2C.kext 的 Pluglns 不完整,里面是两个替身:

解决方法可以手动复制目录外面的 kext 进去,或者直接使用官方编译好的 VoodooI2C.kext

支持一下?

在这个喧嚣浮躁的时代,坚持写博客输出原创文章的人还有多少呢?写博客感觉一直是用爱发电的状态......

如果你恰巧财力雄厚,感觉本文对你有所帮助的话,可以考虑打赏一下本文,用以维持高昂的服务器运营费用(域名费用、服务器费用、CDN 费用等)

微信
支付宝

国光我也写了一个打赏页面用以感谢支持我的朋友,详情请看 打赏列表 | 国光


最后更新: 2022-09-19