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,2apci168c,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>
时间: 2024-10-10 02:32:25

Clover KextsToPatch 使用方法 2015.10.21的相关文章

求大神改错,程序有问题!!!问老师解决不了2015.10.21

#include<stdio.h> /*宏定义*/ #define m(x) printf("x\n") #define a break main() { int month; m(qing shu ru yue fen); scanf("%d",&month); switch(month) { case 1;m(january);a; case 2;m(february);a; case 3;m(march);a; case 4;m(apria

Daily Scrumming 2015.10.21(Day 2)

今明两天任务表 Member Today’s Task Tomorrow’s Task 江昊 配置ruby与rails环境 配置mysql与数据库用户管理 配置apache2环境 学习rails ActiveRecord 购买.注册域名 杨墨犁 制作新版UI,对首页进行完善 设计logo 付帅 继续学习html,并根据第一版UI做出外观相似的静态网页. 开始学习javascript,将javascript的片段添加到网页中以实现功能,改进网页设计 王若愚 学习HTML 学习CSS 王开 学习ra

2015.1.21学习笔记和心得!

2015.1.21 随笔: 指令:cp -v 显示复制过程 sort 按次序显示文件 whereis 查找命令 ln -s src dest 连接文件 dest -> src /etc/apt/sources.list //存放镜像的地址 /var/lib/lists/* // 存放索引文件的地址 /var/cache/apt/archives //下载的软件包缓存的地址 编写shell脚本:三步走 1.创建shell脚本,vim shell.sh 2.修改权限,增加执行权限 chmod 777

【我的书】Unity Shader的书 — 文件夹(2015.12.21更新)

写在前面 感谢全部点进来看的朋友.没错.我眼下打算写一本关于Unity Shader的书. 出书的目的有以下几个: 总结我接触Unity Shader以来的历程,给其它人一个借鉴.我非常明确学Shader的艰难,在群里也见了非常多人提出的问题. 我认为学习Shader还是一件有规律可循的事情,但问题是中文资料难觅,而大家又不愿意去看英文...这对我有什么优点呢?强迫我对知识进行梳理,对细节问题把握更清楚. 第二个原因你懂的. 关于本书的定位问题: 面向Unity Shader刚開始学习的人,但要

我关注的一周技术动态 2015.10.25

分布式系统实践 1. ScyllaDB:用 C++ 重写后的 Cassandra ,性能提高了十倍 http://blog.jobbole.com/93027/?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io 要点: 一直非常不喜欢hadoop系列对JVM的重度依赖, 可能是我不熟悉java的原因吧, 总感觉JVM背着我们做了很多不可见的工作, 心里不踏实. ScyllaDB宣称比Cassandra性能提高十倍, 肯定

我关注的一周技术动态 2015.10.04

分布式系统实践 1. Distributed Systems(电子书) http://www.printfriendly.com/print/v2?url=http://book.mixu.net/distsys/ebook.html# 要点: 免费的介绍分布式系统理论的电子书, 这本书的难度非常适合初学者, 涵盖了分布式系统的方方面面, 但是又没有深入细节而无法理解, 结合具体例子, 让分布式理论学起来也不那么枯燥了. 2. 分布式系统一致性的发展历史(一) http://www.dianro

我关注的一周技术动态 2015.10.18

分布式系统实践 1. 从Storm和Spark 学习流式实时分布式计算的设计 http://www.csdn.net/article/2014-08-04/2821018/1 要点: 流式计算并不是什么新鲜的东西, 相信很多同学也都用过. 不过之前流式计算往往都用在业务相关的地方, 随着大规模分布式系统对trace和metric数据收集的迫切需求, 基于时间序列数据库和流式计算就可以实现复杂的数据分析和汇聚功能, 这篇文章帮助大家理解流式计算的原理, 大家可以想象一下, 如果希望实时统计性能消耗

2015.5.21 总结与规划

java和android任务基本完成,这次做的很棒. 2015.5.21到2015.6.10 两个任务: 一:把c primer plus剩下的部分看完. 二:python项目做完 过程中的要求:平均每天要求计时5h以上 每次计时尽量超过1.5h 尽量充分利用晚上时间,10:00到12:00 认真读书,理解透彻,学会写博客,多看看,多查查别人是怎么做的.

Murano Weekly Meeting 2015.07.21

会议时间: 2015.07.21 主持人: Kirill Zaitsev, core from Mirantis 会议摘要:  1.murano client和murano dashboard升级到yaql1.0.    slagun负责与mistral协调yaql1.0的升级问题,mistral需要一起升级. 2.OpenStack各个项目与olso的接口人. Project Liaison IRC Handle Cinder Jay Bryant jungleboyj Heat Thomas