linux模塊(module_init)、子系統(subsys_initcall)入口函數詳解

linux內核代碼是以模塊(module)和子系統(subsys)爲單元的層次結構。在寫模塊代碼時我們知道入口函數是module_init()或subsys_initcall(),在linux啓動時會被調用,這其中更爲詳細的前因後果是什麼呢,一起來了解一下。
一,linux模塊程序示例
下面是一個linux模塊的示例程序:
#include <linux/init.h>  
#include <linux/module.h>  
  
MODULE_LICENSE("Dual BSD/GPL");  
MODULE_AUTHOR("Radia");  
  
static int hello_init()  
{  
    printk(KERN_EMERG "hello module has been mount!\n");  
    return 0;  
}  
  
static void hello_exit()  
{  
    printk(KERN_EMERG "hello module has been remove!\n");  
}  
  
module_init(hello_init);  
module_exit(hello_exit);  
二,module_init函數定義
查看其中module_init()的定義,發現在kernel\include\linux\module.h
#define module_init(x)	__initcall(x);
而__initcall(x)定義在kernel\include\linux\init.h
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章