本文部分翻譯自 Lilu的README,一些部分基于樓主的理解寫(xiě)出。
什么是 Lilu ?
Lilu 是 vit9696 開(kāi)發(fā)的一個(gè)內(nèi)核擴(kuò)展 (kext),可對(duì)"任意" 內(nèi)核擴(kuò)展(kext)/進(jìn)程(process)/運(yùn)行庫(kù)(framework/library)等 進(jìn)行打補(bǔ)丁。(但其實(shí)某些比較底層的 kext 仍無(wú)法修改,如基本硬件驅(qū)動(dòng)、底層重要依賴(lài)等)
Lilu 目前實(shí)現(xiàn)的功能?
為 kext 打補(bǔ)丁
為 進(jìn)程 打補(bǔ)丁 (目前僅支持 64 位)
為 運(yùn)行庫(kù) 打補(bǔ)丁 (目前僅支持 64 位)
提供一套統(tǒng)一的 API 接口
如何理解 "提供一套統(tǒng)一的 API 接口"?
這意味著 Lilu 自身是不起任何作用的,你需要額外使用依賴(lài)它的 kext ,目前已知需要依賴(lài) Lilu 的 kext 可在 下方 找到。
下載/安裝
關(guān)于下載:
你可以直接下載作者編譯好的版本,或者從 GitHub 下載源碼自行編譯。
關(guān)于安裝:
- 建議將 Lilu 以及依賴(lài)它的 kext 放置于引導(dǎo)器用于注入 kext 的位置并使用引導(dǎo)器注入它,目前主流的引導(dǎo)器都有注入 kext 的功能。
- 如果將其放置于
/System/Library/Extensions或者/Library/Extensions下的話,你還需要LiluFriend并正確配置使其正常工作。
Lilu 支持的內(nèi)核參數(shù)(kernel flags)
-liludbg 可以開(kāi)啟排錯(cuò)日志模式,不過(guò)只有 DEBUG 版本才可用。(對(duì)于日常使用的 RELEASE 版本此參數(shù)無(wú)效)
-liluoff 會(huì)禁用 Lilu 和依賴(lài)它的 kext 。(實(shí)際上只禁用了 Lilu ,不過(guò)與之相關(guān)的 kext 也就自然會(huì)失效了)
-liluslow 會(huì)啟用舊版的 UserPatcher 。(可能與修改進(jìn)程、運(yùn)行庫(kù)有關(guān),具體的因?yàn)闃侵鲗?duì) Lilu 代碼不是很熟悉,所以也就沒(méi)法解釋清楚了,抱歉)
-lilulowmem 會(huì)禁止 Lilu 和依賴(lài)它的 kext 在 Recovery 模式下載入。(實(shí)際上只禁用了 Lilu ,不過(guò)與之相關(guān)的 kext 也就自然會(huì)失效了)
-lilubeta 會(huì)在不受支持的 Darwin 版本啟用 Lilu 。
致開(kāi)發(fā)者/有興趣的朋友:
關(guān)于 Log 輸出,目前 Lilu 提供的 API 中有兩個(gè)輸出 Log 的接口,分別為 SYSLOG("msg\n"); 與 DBGLOG("msg\n"); 這兩個(gè) macro ,具體輸出原理這里不做過(guò)多解釋?zhuān)允钦{(diào)用 Apple 在 IOLib.h 中為我們提供的 IOLog 接口。
但要特別注意的是,如上所說(shuō),DBGLOG("msg\n"); 這個(gè) macro 需要在 DEBUG 模式開(kāi)啟下才會(huì)被編譯。
相信各位看這段代碼即可了解。;) (來(lái)自 Headers/kern_util.hpp)
#define SYSLOG(str, ...) IOLog( xStringify(PRODUCT_NAME) ": " str "\n", ## __VA_ARGS__)
#ifdef DEBUG
#define DBGLOG(str, ...) \
do { \
if (ADDPR(debugEnabled)) \
IOLog( xStringify(PRODUCT_NAME) ": (DEBUG) " str "\n", ## __VA_ARGS__); \
} while(0)
#else
#define DBGLOG(str, ...) do { } while(0)
#endif
另外,原宏中已經(jīng)自帶了換行符 \n ,所以在編寫(xiě) Log 時(shí)也就無(wú)必要再換行了。
Bug 反饋
建議在作者的 GitHub Issues 中提交,需使用英文。
Lilu插件列表
此插件列表來(lái)自 Lilu 的 KnownPlugins.md 。
目前已知需依賴(lài) Lilu 的 kext & 作用簡(jiǎn)單說(shuō)明
注:某些 kext 可能還沒(méi)有列在這里,如果你有發(fā)現(xiàn)的話,可以跟帖反饋。
| Name | Short description |
|---|---|
| AirportBrcmFixup | 修補(bǔ) Broadcom Wi-Fi 綜合問(wèn)題 |
| AppleALC | 動(dòng)態(tài)對(duì)系統(tǒng)注入必要的文件/打補(bǔ)丁以驅(qū)動(dòng)聲卡 |
| AzulPatcher4600 | 一些針對(duì)某些筆記型 HD4600 的額外修復(fù) |
| CoreDisplayFixup | 動(dòng)態(tài)修改某些系統(tǒng)運(yùn)行庫(kù)/kext 以解決非 Iris 系列 Intel 核顯/部分 N 卡高分辨率輸出問(wèn)題 |
| CPUFriend | 動(dòng)態(tài)向 X86 注入 CPU 電源管理數(shù)據(jù) |
| EnableLidWake | 為某些 Intel 核顯開(kāi)啟合蓋睡眠 |
| HibernationFixup | 在某些機(jī)器上修復(fù) 3/25 模式下的休眠狀態(tài) |
| IntelGraphicsFixup | 修補(bǔ) Intel 核顯綜合問(wèn)題 (開(kāi)機(jī)花屏,Haswell/Skylake 因 PAVP 導(dǎo)致的死機(jī)等等) |
| IntelGraphicsDVMTFixup | 修正 Broadwell/Skylake 平臺(tái)核顯因 DVMT 不足而導(dǎo)致的死機(jī) |
| NightShiftUnlocker | 解決老機(jī)型無(wú)法使用自 10.12.4 開(kāi)始引入的 NightShift 功能 |
| NvidiaGraphicsFixup | 修正 N 卡 (可能也適用于 I 卡) 使用某些 SMBios 如 MacPro6,1 等引發(fā)黑屏的問(wèn)題 |
| Shiki | 動(dòng)態(tài)修改 iTunes 相關(guān)系統(tǒng)進(jìn)程,以在 Ivy Bridge 或更新的平臺(tái)上正確使用 iTunes 相關(guān)服務(wù),同時(shí)其內(nèi)置的 ResourceConverter 亦可配置一些自定義的針對(duì)其他 framework/lib/process 的補(bǔ)丁 (CoreDisplayFixup 的早期測(cè)試版本即基于 Shiki 編寫(xiě)) |
| WhateverGreen | 修補(bǔ) AMD 獨(dú)顯綜合問(wèn)題 (單卡啟動(dòng)黑屏,喚醒黑屏 等等) |
將功能合并到其他插件中的插件:
| Name | Short description |
|---|---|
| BrcmWLFixup | 現(xiàn)已被 AirportBrcmFixup 取代。 |
原文鏈接:口袋妖怪heart
QQ群:
331686786 一起黑蘋(píng)果