一劳永逸!更新不再替换Kext(Kexts to patch)教程 | 您所在的位置:网站首页 › 清除kext缓存 › 一劳永逸!更新不再替换Kext(Kexts to patch)教程 |
本帖最后由 syscl 于 2015-2-28 14:03 编辑
本文没有什么技术含量,只是在PCBeta(远景),没有一篇介绍给内核扩展(Kext)打补丁、修改的教程,结合自己的心得,分享给远景的朋友们。谢绝转载到远景之外的任何地方。 给内核扩展打补丁,能开启系统中被限制的功能,更接近白苹果。例如修改IOAHCIBlockStorage.kext后,可以开启第三方固态硬盘(SSD)的Trim功能、修改AppleRTC.kext解决重置BIOS的问题、修改AppleHDA.kext驱动音频...... 优点:
一劳永逸:系统更新会伴随着内核扩展(Kexts)的更新,导致我们以往所做的修改失效。现在,我们不用担心系统更新导致的修改失效(除非Kext进行了重大改动)。
使用的是系统最新的驱动程序,而不用回滚到旧版本。
不需要重建缓存池。
没有破坏系统中内核扩展的完整性。(可以在『系统信息』―『功能扩展』当中看到,被修改的软件『签署方』) 需要: 含有Kextstopatch功能的Clover (如果采用其他引导工具,则忽略此项)编辑Clover配置文件(Config.plist)的程序(例如Xcode、PlistEdit Pro、Clover Configurator...)采用其他引导工具的朋友(Chameleon、XPC、Ozmosis...)若需要修改Info.plist文件,则需要FakeSMC.kext在进行操作前,有必要粗略的了解ASCII码。以修改IOAHCIBlockStorage.kext为例: 打开『终端机』,输入 hexdump -C /System/Library/Extensions/IOAHCIFamily.kext/Contents/PlugIns/IOAHCIBlockStorage.kext/Contents/MacOS/IOAHCIBlockStorage复制代码
显示结果分为三列,文件偏移量,字节的十六进制,ASCII字符。例如说,我要替换掉APPLE SSD这个字符串以实现Trim功能,只需要用『空字符NUL(Null)』替代『APPLE SSD』。 『APPLE SSD』每个字所对应的十六进制是『41』『50』『50』『4c』『45』『20』『53』『53』『44』,摘录成『4150504c4520535344』。用空字符(NUL)去替换每个对应的字,就是『00』『00』『00』『00』『00』『00』『00』『00』『00』,摘录成『000000000000000000』。我们依次把需要替换字符的十六进制、更改后字符的十六进制分别贴入到Clover Configuration当中即可。 为了加强理解,再看一例。让AppleHDA.kext加载修改的Platform.zml.zlib文件。系统在启动的过程中会读取『AppleHDA.kext/Contents/Resources/』下面的xml.zl文件,而我们却希望AppleHDA读取 我们修改的zml.zl以驱动音频。 技巧: 1. 关于查看文件十六进制,在『终端机』中输入hexdump -C之后展开『AppleHDA.kext/Contents/MacOS/』将AppleHDA文件拖入到终端机中即可。 hexdump -C /System/Library/Extensions/AppleHDA.kext/Contents/MacOS/AppleHDA复制代码2.『搜索特定字符串,『终端机』中利用组合键『Command+F』』
2. 『xml.zl』6个字符对应的十六进制是『78』『6d』『6c』『2e』『7a』『6c』,摘录成『786d6c2e7a6c』而『zml.zl』6个字符对应的十六进制是『7a』『6d』『6c』『2e』『7a』『6c』,摘录成『7a6d6c2e7a6c』。依次把需要替换字符的十六进制、更改后字符的十六进制分别贴入到Clover Configuration当中即可。 或用『PlistEdit Pro』来配置Clover的Config.plist:
展开『KernelAndKextPatches』,选中『KextsToPatch』并右键,选中『New Child』以创建子项
在创建好的子项『Child』下面填入: Find,类型:Data,值:786d6c2e7a6cName,类型:String,值:AppleHDAReplace,类型:Data,值:7a6d6c2e7a6c 当然,如果你熟悉Base64,plist的构成 ,也可以抛弃Clover Configurator,Xcode,PlistEdit Pro,直接用『文本编辑器』编辑Config.plist。把『786d6c2e7a6c』转换成『eG1sLnps』,『7a6d6c2e7a6c』转换成『em1sLnps』,然后贴入即可。 当遇到修改Info.plist时:
以修改『AppleGraphicsPowerManagement.kext』实现显卡降频为例。 在终端中输入: hexdump -C /System/Library/Extensions/AppleGraphicsPowerManagement.kext/Contents/Info.plist复制代码找到要替换的显卡ID,例如把『Device0fea』替换成『Device0402』。『Device0fea』字对应的十六进制值分别是『44』『65』『76』『69』『63』『65』『30』『66』『65』『61』,摘录成『44657669636530666561』。『Device0402』字的十六进制值分别是『44』『65』『76』『69』『63』『65』『30』『34』『30』『32』,摘录成『44657669636530343032』。依次把需要替换字符的十六进制、更改后字符的十六进制分别贴入到Clover Configuration当中,并勾选『InfoPlist Patch』。 重建缓存后,重启两次即可。
当然,我们还有更好的方法去加载AGPM,那就是通过FakeSMC.kext。利用FakeSMC.kext可以抛弃Clover,转而采用其他的引导工具(例如Chameleon、XPC、Ozmosis...)也不需要重新建立缓存。以iMac 14,2(Mac-27ADBB7B4CEE8E61)加载Geforce 8600 GT(VenderID 0402)为例。只需要: 从『AppleGraphicsPowerManagement.kext/Contents/Info.plist』中复制出『IOKitPersonalities』下面的『AGPM』,粘贴到『FakeSMC.kext/Contents/Info.plist』下的『IOKitPersonalities』。
在刚才粘贴的项目下面,找到『Machines/Mac-27ADBB7B4CEE8E61/』,把『Vendor10deDevice0fea』改成『Vendor10deDevice0402』 成功加载后,我们可以看到签署方是漂亮的『Software Signing, Apple Code Signing Certification Authority, Apple Root CA』,而非『未知』。这也表明,这种加载方式不破坏系统内核扩展的完整性。 //// 一些修改的模板和参考 |
CopyRight 2018-2019 实验室设备网 版权所有 |