lsmod實際上讀取並分析/proc/modules檔案
cat /proc/modules
核心中已載入的模組的資訊存在於/sys/modules. /sys/module 是一個 sysfs 目錄層次, 包含當前載入模組的資訊. /proc/moudles 是舊式的, 那種資訊的單個檔案版本. 其中的條目包含了模組名, 每個模組佔用的記憶體數量, 以及使用計數. 另外的字串追加到每行的末尾來指定標誌, 對這個模組當前是活動的.
linux核心模組程式結構
1) 載入函數(一般需要)
當通過insmod或modprobe載入核心模組時, 模組的載入函數會自動被核心執行.
static int __init initialization_function(void){/*初始化代碼*/}module_init(initialization_function);
2) 卸載函數(一般需要)
當通過rmmod或者modprobe -r卸載模組時.
static int __init cleanup_function(void){/*釋放代碼*/}module_exit(cleanup_function);
3) 模組許可聲明(必須)
如果不聲明LICENSE, 模組被載入時, 會收到核心被汙染(kernel tained)警告.
MODULE_LICENSE("GPL");
可選的LICENSE有: “GPL”, “GPL v2″, “GPL and additional rights”, “Dual BSD/GPL”,
“Dual MPL/GPL”, “Proprietary”.
4) 模組參數(可選)
module_param(parm, parm_type, module_flags);
如果許可權允許, 可以在/sys/modules/module_name/parameters/下面看到模組的參數.
5) 模組匯出符號(可選)
EXPORT_SYMBOL(符號名);EXPORT_SYMBOL_GPL(符號名);
6) 模組作者等資訊(可選)
MODULE_AUTHOR(author);MODULE_DESCRIPTION(description);MODULE_VERSION(version_string);MODULE_DEVICE_TABLE(table_info);MODULE_ALIAS(alternate_name);