2011-03-22 140 views
19
CONFIG_UNIX=m 

我知道yn代表什麼,但m呢?m在內核配置文件中的含義是什麼?

+2

與編程無關 - 屬於http://superuser.com – 2011-03-22 14:57:27

+0

Stack Overflow是編程和開發問題的網站。這個問題似乎與題目無關,因爲它不涉及編程或開發。請參閱幫助中心的[我可以詢問哪些主題](http://stackoverflow.com/help/on-topic)。也許[超級用戶](http://superuser.com/)或[Unix&Linux堆棧交換](http://unix.stackexchange.com/)會是一個更好的地方。另請參閱[我在哪裏發佈有關Dev Ops的問題?](http://meta.stackexchange.com/q/134306)。 – jww 2016-04-03 19:57:55

回答

21

我假設,在運行make config時,它與(y,n,m)提示符相同;在那種情況下,它將是「模塊」。

請注意,編譯Unix域套接字(CONFIG_UNIX)作爲模塊可能是而不是的一個好主意。許多系統組件和程序都依賴於它們,並且如果此時尚未加載模塊,某些服務可能無法啓動。

Linux內核中的大部分功能可以編譯爲(「y」)或省略(「n」),其中大部分功能也可以編譯爲可加載模塊。當你不確定你將來是否需要某些功能時,這很有意義。

如果你將它編譯爲模塊,並且事實證明它是必需的,那麼它將起作用,但在此之前它不會膨脹內核。

但是,將Unix域套接字配置爲模塊並沒有什麼意義,因爲幾乎在任何地方都需要它們(例如udev在啓動時無法啓動)。

如果你知道你需要什麼,無論如何,這應該是 「Y」,而不是 「M」

+0

'yes','no'和'module'?這對我來說沒有意義...... – 2011-03-22 14:45:10

+2

Linux內核中的大多數功能可以編譯爲(「y」)或省略(「n」),而且大部分還可以編譯爲可加載模塊。如果您不確切知道未來是否需要某些功能,則這很有意義。如果你將它編譯爲模塊並且事實證明它是需要的,它就可以工作,但在此之前它不會膨脹內核。對於unix域套接字,配置爲模塊並不合理,因爲它幾乎在任何地方都是需要的(例如udev在啓動時將無法啓動)。如果你知道你需要什麼東西,那應該是「y」,而不是「m」。 – Damon 2011-03-22 15:00:37

2

閱讀從 「理解Linux內核」 下面的摘錄:

一些Linux代碼必須靜態鏈接,這意味着相應的組件都包含在內核中,或者根本不編譯。這通常發生在組件需要修改內核中靜態鏈接的某些數據結構或函數時。

例如,假設組件必須將新字段引入進程描述符。鏈接模塊不能更改已定義的數據結構,如task_struct,因爲即使模塊使用其數據結構的修改版本,所有靜態鏈接的代碼仍會繼續看到舊版本。數據損壞容易發生。問題的一個部分解決方案包括「靜態」將新字段添加到進程描述符,從而使內核組件可以使用它們,而不管它是如何鏈接的。但是,如果從未使用內核組件,則在每個進程描述符中複製的這些額外字段會浪費內存。如果新內核組件大量增加進程描述符的大小,那麼只有在組件靜態鏈接到內核時,才能通過在數據結構中添加必需的字段來獲得更好的系統性能。

作爲第二個示例,考慮必須替換靜態鏈接代碼的內核組件。很明顯,沒有這樣的組件可以編譯爲模塊,因爲在鏈接模塊時,內核不能更改RAM中已存在的機器代碼。例如,不可能鏈接改變頁面框架分配方式的模塊,因爲Buddy系統函數總是靜態鏈接到內核。

相關問題