编译触控板驱动
前言¶
当你看到这部分内容的时候,表示你黑苹果已经研究的比较深了,驱动得自己定制魔改了。所以这里就假设你已经是一个高玩了,不会再啰嗦一些基础的姿势。
实际上这块内容搬运自我博客的这篇文章:双屏笔记本在 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 费用等)
微信
|
支付宝
|
国光我也写了一个打赏页面用以感谢支持我的朋友,详情请看 打赏列表 | 国光