我正在研究linux内核中模块加载的机制,我坚持结构strmap
内的字段load_info
的含义。
结构定义为in kernel/module.c
,字段填充in kernel/module.c
。我知道它是一个位图,但我无法弄清楚各个位的含义。
答案 0 :(得分:1)
(我在LWN上找不到任何内容。这是对代码的部分分析。请注意strmap
在引入struct load_info
之前作为单独的变量存在。)
strtab
包含一堆连接在一起的以null结尾的字符串。例如。它可能包含这个,其中.
代表一个空字符:
foo.bar.quux.corge.
0123456789012345678
在layout_symtab
中,strmap
用于确定strtab
的哪些块与core symbols对应。只要第j个字符是核心符号名称的一部分,loop就会设置strtab
的第j位。例如,根据上表,如果bar
和corge
是核心符号,则位4-7和13-18设置为1.
在add_kallsyms
中,second loop计算核心符号名称的总长度,third loop通过复制将核心符号复制到新表mod->symtab
中仅设置strtab
中相应位的strmap
字节。在上面的示例中,新表格将包含bar.corge.
。