???????????????????飬??????ù???insmod???ù???????????????????init_module??????????ú????У????????load_module????????????????????????????????????????飬???????struct module???塣????б?????????????????????顣
????state????鵱?????????????????????????????????MODULE_STATE_LIVE??MODULE_STATE_COMING??MODULE_STATE_GOING?????????鵱?????????У????????????鵱?????????????鵱??????ж???load_module????????????????????????????????MODULE_STATE_COMING??sys_init_module???????????????????????????????????????????????б????????鱾???????????)????????????MODULE_STATE_LIVE???????rmmod????ж???????????????????delete_module??????????????MODULE_STATE_GOING????????????????????????
????list?????????б?????????е??????鶼??????????????????У?????????????????struct module *modules???κ?????′???????飬????????????????????????modules->next???????????
????name???????????????????????????????????????????????????????????
?????????????????o?THIS_MODULE???????????????#define THIS_MODULE (&__this_module)??__this_module?????struct module??????????????飬??current?м???????????????THIS_MODULE????????????struct module???????????????飺
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
{
unsigned int cpu = get_cpu();
struct module *mod;
printk(KERN_ALERT "this module: %p==%p "?? &__this_module?? THIS_MODULE );
printk(KERN_ALERT "module state: %d "?? THIS_MODULE->state );
printk(KERN_ALERT "module name: %s "?? THIS_MODULE->name );
list_for_each_entry(mod?? *(&THIS_MODULE->list.prev)?? list )
printk(KERN_ALERT "module name: %s "?? mod->name );
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT "module state: %d "?? THIS_MODULE->state );
}
module_init(hello_init);
module_exit(hello_exit);