contributed by <Dennis40816
>
Note
模組應該和核心同版本,使用以下路徑中的編譯器:
作者的版本為: 6.8.0-56-generic
6.8.0-57-generic
為避免破壞安全啟動,執行以下命令進行金鑰簽章:
輸入以下命令以確認模組簽章設定:
應可查看到類似輸出:
預設 CONFIG_MODULE_SIG_ALL
會設定為啟動,因此要求簽署模組。
產生私鑰與公鑰
參考 kxo 使用 make
進行編譯,以產生 kxo.ko
在 kxo
目錄中,簽署模組:
例如:
註冊你的公鑰到 Machine Owner Key(MOK) 中:
例如:
完成後重新啟動。
執行本步驟如果遇到 Failed to enroll new keys
,請確保你的 root 已經設定密碼,若以下命令的結果是 root L ...
表示還沒設定密碼:
可以透過以下命令設定密碼,設定時務必小心謹慎:
如果不行,請確認 BIOS 中的 UEFI boot 已經開啟。
如果依舊不行,為什麼不找找自己問題,請確認是否使用 ASUS 主機板。如果是請參考 两天血泪史:华硕主板上的Ubuntu驱动签名终极解决方案 將公鑰存入 USB 後進 BIOS 匯入金鑰。
存入路徑是 BIOS ➞ 進階設定 ➞ 安全性 ➞ 安全啟動 ➞ 金鑰管理(安全啟動控制要打開) ➞ 授權簽名 (db) ➞ 附加 ➞ 否。接著選擇你的 .der
檔案,完成後螢幕會出現一行符號,螢幕會略白,這時按下 ESC 會出現是否附加,選擇附加後,儲存並重啟。
如果你此時再次匯入公鑰,你會看到一行美妙的文字:
導入模組:
出現以下錯誤:
該錯誤通常源自與當前核心版本不同,但剛剛才檢查 kxo.ko
是 6.8.0-56 阿? 但再次使用 uname -r
居然變成 6.8.0-57 了! 於是只好重新編譯並重新簽署,後問題排除。可以透過以下檢查:
執行
如果需要干涉遊戲:
卸載模組:
至此我們對 kxo 的基本操作有了基礎認識。
對於 x86 架構,在 .vscode/c_cpp_properties.json
加入:
其中 KERNEL_BUILD_PATH
和 LINUX_HEADERS_PATH
定義在 ~/.bashrc
中。
為正確理解 kxo,首先閱讀其程式,並繪製其流程圖,以利後續修改。詳細參考 kxo Code Write-Up。
說好的進度呢?