__init 巨集告訴編譯器如果這個模組被編譯到核心則把這個函式放到(.init.text)段,這樣當函式初始化完成後這個區域可以被清除掉以節約系統記憶體。kenrel啟動時看到的訊息「freeing unused kernel memory: ***k freed」同它有關。
初始化函式是有返回值的,只有在初始化成功是才返回0,否則返回錯誤碼(errno)。
解除安裝如果驅動程式編譯成模組(動態載入)模式,那麼它需要乙個清理函式。當移除乙個核心模組時這個函式被呼叫執行清理工作。清理函式的函式原型定義為:
typedef void (*exitcall_t)(void);
驅動程式是通過module_exit巨集來宣告清理函式的:
static void __exit hello_exit(void)
module_exit(hello_exit);
同__init類似,如果驅動被編譯進核心,則__exit巨集會忽略清理函式,因為編譯進核心的模組不需要做清理工作。顯然,__init和__exit對動態載入的模組是無效的。
linux中的 init巨集
在核心裡經常可以看到 init,devinit這樣的語句,這都是在init.h中定義的巨集,gcc在編譯時會把被修飾的內容放到這些巨集所代表的section中。define init section init.text cold notrace define initdata section ini...
C C 巨集 巨集的作用 副作用
基礎 巨集是預處理指令 巨集的本質是簡單的字串替換,預處理時進行巨集替換 可在定義巨集時要求它接收引數,巨集替換時會代入引數 巨集的名字不允許過載 巨集預處理 沒有能力處理遞迴呼叫。作用 看一段math.h中的巨集定義 if defined use math defines defined math...
Python內建函式 init ()作用
init 方法是一種特殊的方法,被稱為類的建構函式或初始化方法,當建立了這個類的例項時就會呼叫該方法 類的方法與普通的函式只有乙個特別的區別 它們必須有乙個額外的第乙個引數名稱,按照慣例它的名稱是 self,在實際呼叫過程中,self可不用不用傳入相應的引數 未對類進行例項化 類的函式方法,第乙個引...