module_init module_exit

像你寫C程序須要包含C庫的頭文件那樣,Linux內核編程也須要包含Kernel頭文件,大多的Linux驅動程序須要包含下面三個頭文件:
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
    其中,init.h 定義了驅動的初始化和退出相關的函數,kernel.h 定義了常常用到的函數原型及宏定義,module.h 定義了內核模塊相關的函數、變量及宏。linux

幾乎每一個linux驅動都有個module_init(與module_exit的定義在Init.h (\include\linux) 中)。驅動的加載就靠它。編程

module_init除了初始化加載以外,還有後期釋放內存的做用。linux kernel中有很大一部分代碼是設備驅動代碼,這些驅動代碼都有初始化和反初始化函數,這些代碼     linux就是這樣作的,對只須要初始化運行一次的函數都加上__init屬性,__init 宏告訴編譯器若是這個模塊被編譯到內核則把這個函數放到(.init.text)段,module_exit的參數卸載時同__init相似,若是驅動被編譯進內核,則__exit宏會忽略清理函數,由於編譯進內核的模塊不須要作清理工做,顯然__init和__exit對動態加載的模塊是無效的,只支持徹底編譯進內核。函數

本站公眾號
   歡迎關注本站公眾號,獲取更多信息