THIS_MODULE详解.doc

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
THIS_MODULE详解

THIS_MODULE详解 2011-09-19 09:09:09 ????我来说两句?0 我要投稿 ?? [字体:小 大] 结构体struct module在内核中代表一个内核模块,通过insmod(实际执行init_module系统调用)把自己编写的内核模块插入内核时,模块便与一个 struct module结构体相关联,并成为内核的一部分。下面是结构体struct module的完整定义,接下来会逐个解释: ??? struct module ??? { ??????? enum module_state state; ??????? struct list_head list; ??????? char name[MODULE_NAME_LEN]; ? ??????? struct module_kobject mkobj; ??????? struct module_param_attrs *param_attrs; ??????? const char *version; 牋牋牋?const char *srcversion; ?牋牋牋?const struct kernhar *versel_symbol *syms; 牋牋牋?unsigned int num_syms; 牋牋牋?const unar *verssigned long *crcs; ?牋牋牋?const struct kernel_symbol *gpl_sym*verss; 牋牋牋?unsigned int num_gpl_syms; 牋牋牋?const unsigned lonsym*versg *gpl_crcs; ?牋牋牋?unsigned int num_exentries; 牋牋牋?constnsym*vers struct exception_table_entry *extable; ?牋牋牋?int (*init)(vo*versid); 牋牋牋?void *module_init; 牋牋牋?void *module_core; 牋牋?t)(vo*vers牋 unsigned long init_size, core_size; 牋牋牋?unsigned long ini*verst_text_size, core_text_size; 牋牋牋?struct mod_arch_specific arversch; 牋牋牋?int unsafe; 牋牋牋?int license_gplok; ?#ifdef CONFic arversIG_MODULE_UNLOAD 牋牋牋?struct module_ref ref[NR_CPUS]; 牋牋牋? arvers struct list_head modules_which_use_me; 牋牋牋?struct task_struversct *waiter; 牋牋牋?void (*exit)(void); #endif ?#ifdef CONFIG_KuversALLSYMS 牋牋牋?Elf_Sym *symtab; 牋牋牋?unsigned long num_symtaG_Kuversb; 牋牋牋?char *strtab; 牋牋牋?struct module_sect_attrs *sect_G_Kuversattrs; #endif 牋牋牋?void *percpu; 牋牋牋?char *args; 牋?}; ?t_G_Kuvers?? 我们插入一个内核模块,一般会使用工具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是作为一个列表的成员,所有的内核模块都被维护

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档