我正在研究Linux内核中模块加载的机制,并且我坚持在结构load_info
内的字段strmap
的含义。struct load_info中字段strmap的含义是什么?
该结构体定义为in kernel/module.c
,该字段填充为in kernel/module.c
。我知道这是一个位图,但我无法弄清楚各个位的含义。
我正在研究Linux内核中模块加载的机制,并且我坚持在结构load_info
内的字段strmap
的含义。struct load_info中字段strmap的含义是什么?
该结构体定义为in kernel/module.c
,该字段填充为in kernel/module.c
。我知道这是一个位图,但我无法弄清楚各个位的含义。
(我无法找到任何LWN这是代码的部分分析。需要注意的是strmap
存在作为一个单独的变量引入struct load_info
之前。)
strtab
包含了一堆空值的终止的字符串连接在一起。例如。它可能包含这一点,在那里.
代表一个空字符:
foo.bar.quux.corge.
在layout_symtab
,strmap
用于确定哪些strtab
块对应core symbols。只要第j个字符是核心符号名称的一部分,loop就会将第j位设置为strtab
。例如,给定上表中,如果bar
和corge
是核心的符号,那么,位4-7和13-18被设置为1
在add_kallsyms
,所述second loop计算核心符号的名字的总长度,并且third loop通过仅复制设置了strmap
中的相应位的strtab
的字节将核心符号复制到新表mod->symtab
中。在上面的例子中,新表格将包含bar.corge.
。