禁用的核心選項是否等同於不載入相應的模組?
假設我設置了一個三態核心配置選項以建構為一個模組,但我沒有在執行時載入相應的核心模組(並且它不會自動載入)。生成的核心的功能是否等同於我完全禁用該選項時的功能?或者解除安裝的模組和禁用的核心選項之間有什麼區別?
有時在我的 Gentoo 系統上安裝軟體包時,我會收到表單警告
CONFIG_FLUX_CAPACITOR 不應該被設置
通常事實證明,該選項實際上設置為建構為一個模組,然後不載入。到目前為止,該軟體似乎在我遇到的每種情況下都能正常工作,但我想知道這是否是我可以預期的一般情況。
禁用編譯時間選項意味著程式碼沒有被編譯。
解除安裝模組意味著程式碼已經編譯到模組中,但沒有載入到記憶體中,因此沒有執行。請注意,有時模組可能會自動載入,因此如果您需要禁用某些功能,安全的選擇是在編譯時禁用它或將其列入黑名單
/etc/modprobe.conf
或/etc/modprobe.d/*
. 或者從文件系統中刪除模組文件——你可能想在depmod
之後執行並記下,可能有一些其他模組依賴於它(這可能會在以後引起一些麻煩)。也就是說,能力方面是一樣的。適合在有或沒有您正在(未)禁用的模組的情況下執行的程式碼可能(或可能沒有)略有不同:假設您可以編譯具有功能 A 作為模組的核心。如果功能 B 能夠使用功能 A 但不需要它,則生成的程式碼可能會有所不同。啟用 A (無論是作為模組還是編譯),B 可能包括一個可選的檢查功能 A 的存在。在編譯時禁用 A 時,B 中的這種檢查是無關緊要的,可以完全跳過。然而,這必須在程式碼本身中明確說明(例如,通過 C
#ifdef
指令),僅編譯器無法決定。因此,它取決於將特徵 A 作為可選依賴項的部分的作者。是否應該將其稱為功能不同是值得商榷的——它不會改變功能,但很可能會改變執行時間(即使只是一點點——但在某些極端情況下這可能很重要)。