linux内核复杂结构体,linux内核中结构体struct module

本文详细探讨了Linux内核头文件`linux/module.h`中的struct module结构体,该结构体包含了模块的状态、符号表、初始化函数等多个关键组件,是理解Linux内核模块工作原理的重要部分。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

linux/module.h 中在230行出定义了struct module。(找的偶好苦啊。。。)

struct module

{

enum module_state state;

/* Member of list of modules */

struct list_head list;

/* Unique handle for this module */

char name[MODULE_NAME_LEN];

/* Sysfs stuff. */

struct module_kobject mkobj;

struct module_attribute *modinfo_attrs;

const char *version;

const char *srcversion;

struct kobject *holders_dir;

/* Exported symbols */

const struct kernel_symbol *syms;

const unsigned long *crcs;

unsigned int num_syms;

/* Kernel parameters. */

struct kernel_param *kp;

unsigned int num_kp;

/* GPL-only exported symbols. */

unsigned int num_gpl_syms;

const struct kernel_symbol *gpl_syms;

const unsigned long *gpl_crcs;

#ifdef CONFIG_UNUSED_SYMBOLS

/* unused exported symbols. */

const struct kernel_symbol *unused_syms;

const unsigned long *unused_crcs;

unsigned int num_unused_syms;

/* GPL-only, unused exported symbols. */

unsigned int num_unused_gpl_syms;

const struct kernel_symbol *unused_gpl_syms;

const unsigned long *unused_gpl_crcs;

#endif

#ifdef CONFIG_MODULE_SIG

/* Signature was verified. */

bool sig_ok;

#endif

/* symbols that will be GPL-only in the near future. */

const struct kernel_symbol *gpl_future_syms;

const unsigned long *gpl_future_crcs;

unsigned int num_gpl_future_syms;

/* Exception table */

unsigned int num_exentries;

struct exception_table_entry *extable;

/* Startup function. */

int (*init)(void);

/* If this is non-NULL, vfree after init() returns */

void *module_init;

/* Here is the actual code + data, vfree'd on unload. */

void *module_core;

/* Here are the sizes of the init and core sections */

unsigned int init_size, core_size;

/* The size of the executable code in each section. */

unsigned int init_text_size, core_text_size;

/* Size of RO sections of the module (text+rodata) */

unsigned int init_ro_size, core_ro_size;

/* Arch-specific module values */

struct mod_arch_specific arch;

unsigned int taints;/* same bits as kernel:tainted */

#ifdef CONFIG_GENERIC_BUG

/* Support for BUG */

unsigned num_bugs;

struct list_head bug_list;

struct bug_entry *bug_table;

#endif

#ifdef CONFIG_KALLSYMS

/*

* We keep the symbol and string tables for kallsyms.

* The core_* fields below are temporary, loader-only (they

* could really be discarded after module init).

*/

Elf_Sym *symtab, *core_symtab;

unsigned int num_symtab, core_num_syms;

char *strtab, *core_strtab;

/* Section attributes */

struct module_sect_attrs *sect_attrs;

/* Notes attributes */

struct module_notes_attrs *notes_attrs;

#endif

/* The command line arguments (may be mangled). People like

keeping pointers to this stuff */

char *args;

#ifdef CONFIG_SMP

/* Per-cpu data. */

void __percpu *percpu;

unsigned int percpu_size;

#endif

#ifdef CONFIG_TRACEPOINTS

unsigned int num_tracepoints;

struct tracepoint * const *tracepoints_ptrs;

#endif

#ifdef HAVE_JUMP_LABEL

struct jump_entry *jump_entries;

unsigned int num_jump_entries;

#endif

#ifdef CONFIG_TRACING

unsigned int num_trace_bprintk_fmt;

const char **trace_bprintk_fmt_start;

#endif

#ifdef CONFIG_EVENT_TRACING

struct ftrace_event_call **trace_events;

unsigned int num_trace_events;

#endif

#ifdef CONFIG_FTRACE_MCOUNT_RECORD

unsigned int num_ftrace_callsites;

unsigned long *ftrace_callsites;

#endif

#ifdef CONFIG_MODULE_UNLOAD

/* What modules depend on me? */

struct list_head source_list;

/* What modules do I depend on? */

struct list_head target_list;

/* Who is waiting for us to be unloaded */

struct task_struct *waiter;

/* Destruction function. */

void (*exit)(void);

struct module_ref __percpu *refptr;

#endif

#ifdef CONFIG_CONSTRUCTORS

/* Constructor functions. */

ctor_fn_t *ctors;

unsigned int num_ctors;

#endif

};

先贴在这儿,以后再用,再update

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值