Clover KextsToPatch 使用方法 2015.10.21
Clover KextsToPatch 使用方法 2015.10.21
前些天,因为 Thinkpad X230 BIOS 白名单限制,给她换了一块 ar9285 无线网卡,只是因为这块网卡正好可以被 Mac OS X 驱动,也正好在 Thinkpad X230 BIOS 白名单之中。给 Clover 配置的时候,为了防止忘记,便记录下来。
因为灵活使用 Clover 成为黑苹果用户的必修课,否则你就只能漫天寻找 kext,寄希望与运气能正确驱动你的硬件了。Clover 中有一个强大的功能 KextsToPatch,属于 KernelAndKextPatches 的子项。
之所以用到 KextsToPatch,是因为不想每次升级的时候,都去更改系统 Kext,同时也为了防止升级时出现意外,也保持系统原汁原味,干净整洁。故一般情况下,我很少直接去动系统的内核扩展文件。
Apart from the built-in patches you can create your own ones providing following data: the binary file name, the data to find and the data to replace with - both in hexadecimal. The data length must be equal. A smaller replacement data line can be filled with zeroes.
按照官方说法,是给内核扩展打补丁开启一些被限制的功能。譬如 OS X 本身已经支持 ar9285。只是提供的 Info.plist 不够完善,没有开启。用 ar9285 的同学都知道,只需要修改 AirPortAtheros40.kext 中的一个 ID 即可,即 pci168c,2a –> pci168c,2b。
前面已经说过,KextsToPatch 是 KernelAndKextPatches 的一个子项,故修改的时候注意,他的大体格式如下
<key>KernelAndKextPatches</key>
<dict>
......
<key>KextsToPatch</key>
<array>
<dict>
<key>Comment</key>
<string>your comment</string>
<key>Find</key>
<data>
data string
</data>
<key>InfoPlistPatch</key>
<true/>
<key>Name</key>
<string>kexts name</string>
<key>Replace</key>
<data>
new data string
</data>
</dict>
</array>
</dict>
- Name:是你用于修改的 kext 的文件名
- Comment:值是一些便于你识别的信息
- Find Data:顾名思义查找你用于替换的信息的 base64 编码
- Replace Data:替换你的新信息的 base64 编码
- InfoPlistPatch:给 Info.plist 打补丁
一切清楚明了,修改的是 AirPortAtheros40,Info.plist 位于 /System/Library/Extensions/IO80211Family.kext/Contents/PlugIns/AirPortAtheros40.kext/Contents 下,打开后可以看到如下的一些信息
<key>IONameMatch</key>
<array>
<string>pci168c,30</string>
<string>pci168c,2a</string>
<string>pci106b,0086</string>
<string>pci168c,1c</string>
<string>pci168c,23</string>
<string>pci168c,24</string>
</array>
所要做的就是将 pci168c,2a 替换成 pci168c,2b,粗暴的做法,就是直接修改这个文件,下面加一行 <string>pci168c,2b</string>,重建缓存或重启两次,ar9285 就被驱动了,而我要做的是在 Clover 中进行替换。
将 pci168c,2a、pci168c,2b 都进行 base64 编码,打开终端:
→ ~ $ echo -n 'pci168c,2a'|base64
cGNpMTY4YywyYQ==
→ ~ $ echo -n 'pci168c,2b'|base64
cGNpMTY4YywyYg==
注意,echo 需要加 -n 参数,防止编码时被加入回车字符。
将之写入 Clover 的 config.plist 的 KernelAndKextPatches 子项之中
<key>KernelAndKextPatches</key>
<dict>
......
<key>KextsToPatch</key>
<array>
<dict>
<key>Comment</key>
<string>AR9285_NoNeedToEditPlist</string>
<key>Find</key>
<data>
cGNpMTY4YywyYQ==
</data>
<key>InfoPlistPatch</key>
<true/>
<key>Name</key>
<string>AirPortAtheros40</string>
<key>Replace</key>
<data>
cGNpMTY4YywyYg==
</data>
</dict>
</array>
</dict>
同时 Thinkpad X230 的蓝牙,默认也可以驱动,只是蓝牙版本是 3.0 的,同理,我们修改的是 BroadcomBluetoothHostControllerUSBTransport,Info.plist 位于 /System/Library/Extensions/IOBluetoothFamily.kext/Contents/PlugIns/BroadcomBluetoothHostControllerUSBTransport.kext/Contents 目录下,找到 idVendor 为 2652的设备,并随便找一个 BT V3.0 的型号,譬如 PID 8600 0x2198 VID 2652 0xA5C,我们就拿它来开刀
→ ~ $ echo -n '8600' |base64
ODYwMA==
→ ~ $ echo -n '8678' |base64
ODY3OA==
得到 base64 码后,写入 config.plist
<key>KernelAndKextPatches</key>
<dict>
<!--......-->
<key>KextsToPatch</key>
<array>
...
<dict>
<key>Comment</key>
<string>inject_BCM20702A0</string>
<key>Find</key>
<data>
ODYwMA==
</data>
<key>InfoPlistPatch</key>
<true/>
<key>Name</key>
<string>BroadcomBluetoothHostControllerUSBTransport</string>
<key>Replace</key>
<data>
ODY3OA==
</data>
</dict>
</array>
</dict>
Clover KextsToPatch 使用方法 2015.10.21的更多相关文章
- Daily Scrum (2015/10/21)
今天可以说是项目正式开始的第一天,由于大家缺乏做团队项目的经验,对TFS的使用都还不太熟悉,所以今天大家的主要工作是熟悉TFS的使用和对代码进行初步的理解.我们预计需要2-3天时间来理解透彻源代码.以 ...
- Daily Scrumming 2015.10.21(Day 2)
今明两天任务表 Member Today’s Task Tomorrow’s Task 江昊 配置ruby与rails环境 配置mysql与数据库用户管理 配置apache2环境 学习rails Ac ...
- 【我的书】Unity Shader的书 — 文件夹(2015.12.21更新)
写在前面 感谢全部点进来看的朋友.没错.我眼下打算写一本关于Unity Shader的书. 出书的目的有以下几个: 总结我接触Unity Shader以来的历程,给其它人一个借鉴.我非常明确学Shad ...
- 背水一战 Windows 10 (21) - 绑定: x:Bind 绑定, x:Bind 绑定之 x:Phase, 使用绑定过程中的一些技巧
[源码下载] 背水一战 Windows 10 (21) - 绑定: x:Bind 绑定, x:Bind 绑定之 x:Phase, 使用绑定过程中的一些技巧 作者:webabcd 介绍背水一战 Wind ...
- Daily Scrum 10.21
然后由于服务器端有变化,另外具体IDE已经确定,接下来对已经分配下去的任务做些细节补充: 10.20日晚所有人必须完成AS的配置,统一版本为1.3.2,安卓版本为4.4.0,可视化界面手机为Nexus ...
- Murano Weekly Meeting 2015.07.21
会议时间: 2015.07.21 主持人: Kirill Zaitsev, core from Mirantis 会议摘要: 1.murano client和murano dashboard升级到y ...
- 4分钟apache自带ab压力测试工具使用: 2015.10.4
2015.10.44分钟apache自带ab压力测试工具使用:win8.1 wampserver2.5 -Apache-2.4.9-Mysql-5.6.17-php5.5.12-64b 可以参考一下部 ...
- 2015.12.21~2015.12.24真题回顾!-- HTML5学堂
2015.12.21~2015.12.24真题回顾!-- HTML5学堂 山不在高,有仙则名!水不在深,有龙则灵!千里冰封,非一日之寒!IT之路,须厚积薄发!一日一小练,功成不是梦!小小技巧,尽在HT ...
- Java-Runoob-高级教程-实例-方法:10. Java 实例 – 标签(Label)
ylbtech-Java-Runoob-高级教程-实例-方法:10. Java 实例 – 标签(Label) 1.返回顶部 1. Java 实例 - 标签(Label) Java 实例 Java 中 ...
随机推荐
- [Xcode 实际操作]九、实用进阶-(8)实现App的Setting设置:添加和读取程序的配置信息
目录:[Swift]Xcode实际操作 本文将演示如何实现添加和读取程序的配置信息. 在项目文件夹[DemoApp]上点击鼠标右键->[New File]创建一个设置束文件 ->[Sett ...
- bzoj1339/1163:[Baltic2008]Mafia
传送门 最小割,割点,模板... 代码: #include<cstdio> #include<iostream> #include<algorithm> #incl ...
- 超简单 Promise封装小程序ajax 超好用 以及封装登录
//网络类 //封装网络请求 const ajax = (ajaxData, method) => { wx.showLoading({ title: '加载中', mask: true }); ...
- C# 委托链、多路广播委托
委托链.多路广播委托:也就是把多个委托链接在一起,我们把链接了多个方法的委托称为委托链或多路广播委托 例: class HelloWorld { //定义委托类型 delegate void Dele ...
- 20 个案例教你在 Java 8 中如何处理日期和时间?
前言 前面一篇文章写了<SimpleDateFormat 如何安全的使用?>, 里面介绍了 SimpleDateFormat 如何处理日期/时间,以及如何保证线程安全,及其介绍了在 Jav ...
- 代码review
对于代码review个人也有些小小的看法: 1.首先我觉得我们所有开发人员要弄明白 现在Code Review 的目的 ,凡事不弄明白目的,无法做好完成一件事情,个人觉得有以下一些目的: a)可以在项 ...
- 【转】HashMap,ArrayMap,SparseArray源码分析及性能对比
HashMap,ArrayMap,SparseArray源码分析及性能对比 jjlanbupt 关注 2016.06.03 20:19* 字数 2165 阅读 7967评论 13喜欢 43 Array ...
- dp考试
a[问题描述]
- Vue的十个常用指令
1.v-text:用于更新标签包含的文本,作用和{{}}的效果一样. 2.v-html:绑定一些包含html代码的数据在视图上. 3.v-show:用来控制元素的display属性,和显示隐藏有关.v ...
- ios has denied the launch request.
ios has denied the launch request. You can choose either of the two ways. Solution 1: Open System Pr ...