我正在閱讀有關Linux內核開發的內容,我只是閱讀了一些我不明白的文字。下面是段落,它講述了模塊的__init和__exit宏:內置和可加載模塊的__init和__exit宏使用
這演示了內核2.2及更高版本的功能。注意init和cleanup函數定義中的變化 。 __init宏 會導致初始化函數在內置驅動程序完成而不是可加載模塊完成後被丟棄並釋放其內存。 如果您考慮init函數何時被調用,這會使 完美。
還有一個__initdata ,其工作方式與__init相似,但是對於init變量而不是 函數。
__exit宏導致在模塊內置到內核中的 以及類似 __exit的函數被忽略,對可加載模塊沒有影響。同樣,如果您考慮清理功能運行的時間,請參閱:
我明白了;宏__init
會導致init函數被拋棄,並且一旦初始化函數完成內置驅動程序,就會釋放其內存。但是爲什麼?不適用於可加載模塊?我無法理解它。
我知道這是一件愚蠢的事情,但我想了一段時間,無法完全理解它。爲什麼選擇內置驅動程序,但不適用於可加載模塊?在__init
中分配的變量,地址等都是必需的,對嗎?
http://tldp.org/LDP/lkmpg/2.4/html/x281.htm(來自Linux內核模塊編程指南)包含有關任何人的相關內容。我認爲在這種情況下,作者對他所說的話沒有足夠的重視 - 一旦你瞭解了內核內存組織的細節,它就會變得非常有意義! – Jander 2012-07-26 14:58:56