什麼是 Lilu ?
Lilu 是 vit9696 開發的一個內核擴展 (kext),可對”任意” 內核擴展(kext)/進程(process)/運行庫(framework/library)等 進行打補丁。 (但其實某些比較底層的 kext 仍無法修改,如基本硬件驅動、底層重要依賴等)
Lilu 目前實現的功能?
為 kext 打補丁
為 進程 打補丁 (目前僅支持 64 位)
為 運行庫 打補丁 (目前僅支持 64 位)
提供一套統一的 API 接口
如何理解 “提供一套統一的 API 接口”?
這意味著 Lilu 自身是不起任何作用的,你需要額外使用依賴它的 kext ,目前已知需要依賴 Lilu 的 kext 可在 下方 找到。
下載/安裝
關於下載:
你可以直接下載作者編譯好的版本,或者從 GitHub 下載源碼自行編譯。
關於安裝:
建議將 Lilu 以及依賴它的 kext 放置於引導器用於注入 kext 的位置並使用引導器注入它,目前主流的引導器都有註入 kext 的功能。
如果將其放置於 /System/Library/Extensions 或者 /Library/Extensions 下的話,你還需要 LiluFriend 並正確配置使其正常工作。
Lilu 支持的內核參數(kernel flags)
-liludbg 可以開啟排錯日誌模式,不過只有 DEBUG 版本才可用。 (對於日常使用的 RELEASE 版本此參數無效)
-liluoff 會禁用 Lilu 和依賴它的 kext 。 (實際上只禁用了 Lilu ,不過與之相關的 kext 也就自然會失效了)
-liluslow 會啟用舊版的 UserPatcher 。 (可能與修改進程、運行庫有關,具體的因為樓主對 Lilu 代碼不是很熟悉,所以也就沒法解釋清楚了,抱歉)
-lilulowmem 會禁止 Lilu 和依賴它的 kext 在 Recovery 模式下載入。 (實際上只禁用了 Lilu ,不過與之相關的 kext 也就自然會失效了)
-lilubeta 會在不受支持的 Darwin 版本啟用 Lilu 。
-lilubetaall 啟用Lilu和所有加載的插件不受支持的os版本(非常仔細地使用)
-liluforce 強制啟用Lilu而不管os,該參數適用於安裝或恢復。
致開發者/有興趣的朋友:
關於Log 輸出,目前Lilu 提供的API 中有兩個輸出Log 的接口,分別為SYSLOG(“msg\n”); 與DBGLOG(“msg\n”); 這兩個macro ,具體輸出原理這裡不做過多解釋,仍是調用Apple 在IOLib.h 中為我們提供的IOLog 接口。
但要特別注意的是,如上所說,DBGLOG(“msg\n”); 這個 macro 需要在 DEBUG 模式開啟下才會被編譯。
相信各位看這段代碼即可了解。 ;) (來自 Headers/kern_util.hpp)
1 #define SYSLOG(str, ...) IOLog( xStringify(PRODUCT_NAME) ": " str "\n", ## __VA_ARGS__)
2
3 #ifdef DEBUG
4 #define DBGLOG(str, ...) \
5 do { \
6 If (ADDPR(debugEnabled)) \
7 IOLog( xStringify(PRODUCT_NAME) ": (DEBUG) " str "\n", ## __VA_ARGS__); \
8 } while(0)
9 #else
10 #define DBGLOG(str, ...) do { } while(0)
11 #endif
另外,原宏中已經自帶了換行符 \n ,所以在編寫 Log 時也就無必要再換行了。
Bug 反饋
建議在作者的 GitHub Issues 中提交,需使用英文。
Lilu插件列表
此插件列表來自 Lilu 的 KnownPlugins.md 。
目前已知需依賴 Lilu 的 kext & 作用簡單說明
注:某些 kext 可能還沒有列在這裡,如果你有發現的話,可以跟帖反饋。
Name Short description
AirportBrcmFixup :修補 Broadcom Wi-Fi 綜合問題
AppleALC :動態對系統注入必要的文件/打補丁以驅動聲卡
AzulPatcher4600 :一些針對某些筆記型 HD4600 的額外修復
CoreDisplayFixup :動態修改某些系統運行庫/kext 以解決非 Iris 系列 Intel 核顯/部分 N 卡高分辨率輸出問題
CPUFriend :動態向 X86 注入 CPU 電源管理數據
EnableLidWake :為某些 Intel 核顯開啟合蓋睡眠
HibernationFixup :在某些機器上修復 3/25 模式下的休眠狀態
IntelGraphicsFixup :修補 Intel 核顯綜合問題 (開機花屏,Haswell/Skylake 因 PAVP 導致的死機等等)
IntelGraphicsDVMTFixup :修正 Broadwell/Skylake 平台核顯因 DVMT 不足而導致的死機
NightShiftUnlocker :解決老機型無法使用自 10.12.4 開始引入的 NightShift 功能
NvidiaGraphicsFixup :修正 N 卡 (可能也適用於A 卡) 使用某些 SMBios 如 MacPro6,1 等引發黑屏的問題
Shiki :動態修改iTunes 相關係統進程,以在Ivy Bridge 或更新的平台上正確使用iTunes 相關服務,同時其內置的ResourceConverter 亦可配置一些自定義的針對其他framework/lib/process 的補丁(CoreDisplayFixup 的早期測試版本即基於Shiki 編寫)
WhateverGreen :修補 AMD 獨顯綜合問題 (單卡啟動黑屏,喚醒黑屏 等等),將功能合併到其他插件中的插件:
Name Short description
BrcmWLFixup 現已被 AirportBrcmFixup 取代。
Lilu 是 vit9696 開發的一個內核擴展 (kext),可對”任意” 內核擴展(kext)/進程(process)/運行庫(framework/library)等 進行打補丁。 (但其實某些比較底層的 kext 仍無法修改,如基本硬件驅動、底層重要依賴等)
Lilu 目前實現的功能?
為 kext 打補丁
為 進程 打補丁 (目前僅支持 64 位)
為 運行庫 打補丁 (目前僅支持 64 位)
提供一套統一的 API 接口
如何理解 “提供一套統一的 API 接口”?
這意味著 Lilu 自身是不起任何作用的,你需要額外使用依賴它的 kext ,目前已知需要依賴 Lilu 的 kext 可在 下方 找到。
下載/安裝
關於下載:
你可以直接下載作者編譯好的版本,或者從 GitHub 下載源碼自行編譯。
關於安裝:
建議將 Lilu 以及依賴它的 kext 放置於引導器用於注入 kext 的位置並使用引導器注入它,目前主流的引導器都有註入 kext 的功能。
如果將其放置於 /System/Library/Extensions 或者 /Library/Extensions 下的話,你還需要 LiluFriend 並正確配置使其正常工作。
Lilu 支持的內核參數(kernel flags)
-liludbg 可以開啟排錯日誌模式,不過只有 DEBUG 版本才可用。 (對於日常使用的 RELEASE 版本此參數無效)
-liluoff 會禁用 Lilu 和依賴它的 kext 。 (實際上只禁用了 Lilu ,不過與之相關的 kext 也就自然會失效了)
-liluslow 會啟用舊版的 UserPatcher 。 (可能與修改進程、運行庫有關,具體的因為樓主對 Lilu 代碼不是很熟悉,所以也就沒法解釋清楚了,抱歉)
-lilulowmem 會禁止 Lilu 和依賴它的 kext 在 Recovery 模式下載入。 (實際上只禁用了 Lilu ,不過與之相關的 kext 也就自然會失效了)
-lilubeta 會在不受支持的 Darwin 版本啟用 Lilu 。
-lilubetaall 啟用Lilu和所有加載的插件不受支持的os版本(非常仔細地使用)
-liluforce 強制啟用Lilu而不管os,該參數適用於安裝或恢復。
致開發者/有興趣的朋友:
關於Log 輸出,目前Lilu 提供的API 中有兩個輸出Log 的接口,分別為SYSLOG(“msg\n”); 與DBGLOG(“msg\n”); 這兩個macro ,具體輸出原理這裡不做過多解釋,仍是調用Apple 在IOLib.h 中為我們提供的IOLog 接口。
但要特別注意的是,如上所說,DBGLOG(“msg\n”); 這個 macro 需要在 DEBUG 模式開啟下才會被編譯。
相信各位看這段代碼即可了解。 ;) (來自 Headers/kern_util.hpp)
1 #define SYSLOG(str, ...) IOLog( xStringify(PRODUCT_NAME) ": " str "\n", ## __VA_ARGS__)
2
3 #ifdef DEBUG
4 #define DBGLOG(str, ...) \
5 do { \
6 If (ADDPR(debugEnabled)) \
7 IOLog( xStringify(PRODUCT_NAME) ": (DEBUG) " str "\n", ## __VA_ARGS__); \
8 } while(0)
9 #else
10 #define DBGLOG(str, ...) do { } while(0)
11 #endif
另外,原宏中已經自帶了換行符 \n ,所以在編寫 Log 時也就無必要再換行了。
Bug 反饋
建議在作者的 GitHub Issues 中提交,需使用英文。
Lilu插件列表
此插件列表來自 Lilu 的 KnownPlugins.md 。
目前已知需依賴 Lilu 的 kext & 作用簡單說明
注:某些 kext 可能還沒有列在這裡,如果你有發現的話,可以跟帖反饋。
Name Short description
AirportBrcmFixup :修補 Broadcom Wi-Fi 綜合問題
AppleALC :動態對系統注入必要的文件/打補丁以驅動聲卡
AzulPatcher4600 :一些針對某些筆記型 HD4600 的額外修復
CoreDisplayFixup :動態修改某些系統運行庫/kext 以解決非 Iris 系列 Intel 核顯/部分 N 卡高分辨率輸出問題
CPUFriend :動態向 X86 注入 CPU 電源管理數據
EnableLidWake :為某些 Intel 核顯開啟合蓋睡眠
HibernationFixup :在某些機器上修復 3/25 模式下的休眠狀態
IntelGraphicsFixup :修補 Intel 核顯綜合問題 (開機花屏,Haswell/Skylake 因 PAVP 導致的死機等等)
IntelGraphicsDVMTFixup :修正 Broadwell/Skylake 平台核顯因 DVMT 不足而導致的死機
NightShiftUnlocker :解決老機型無法使用自 10.12.4 開始引入的 NightShift 功能
NvidiaGraphicsFixup :修正 N 卡 (可能也適用於A 卡) 使用某些 SMBios 如 MacPro6,1 等引發黑屏的問題
Shiki :動態修改iTunes 相關係統進程,以在Ivy Bridge 或更新的平台上正確使用iTunes 相關服務,同時其內置的ResourceConverter 亦可配置一些自定義的針對其他framework/lib/process 的補丁(CoreDisplayFixup 的早期測試版本即基於Shiki 編寫)
WhateverGreen :修補 AMD 獨顯綜合問題 (單卡啟動黑屏,喚醒黑屏 等等),將功能合併到其他插件中的插件:
Name Short description
BrcmWLFixup 現已被 AirportBrcmFixup 取代。
留言
張貼留言