8年前。

This question was migrated from Unix & Linux Stack Exchange because it can be answered on Stack Overflow. Migrated
我正在研究linux内核中的模块加载机制,我一直在研究structstrmap中字段load_info的含义。
结构被定义为Learn more,字段被填充为in kernel/module.c。我知道这是一个位图,但我不知道各个位的含义。

最佳答案

(我在LWN上找不到任何东西。这是对代码的部分分析。注意strmapstruct load_info引入之前作为单独变量存在。
strtab包含一组连接在一起的以空结尾的字符串。例如,它可能包含这个,其中.表示空字符:

foo.bar.quux.corge.
0123456789012345678

layout_symtab中,strmap用于确定哪些strtab块对应于core symbols。每当第j个字符是核心符号名称的一部分时,loop设置strtab的第j位。例如,如上表所示,如果barcorge是核心符号,则位4–7和13–18设置为1。
add_kallsyms中,second loop计算核心符号名称的总长度,third loop通过仅复制设置了mod->symtab中相应位的strtab字节,将核心符号复制到新表中。在上面的示例中,新表将包含strmap

10-08 11:28