当前位置: 首页 > 面试题库 >

/ proc / kallsyms中标记为“ T”的内核符​​号不会导出

段干博明
2023-03-14
问题内容

符号machine_power_off在中用“ T”标记/proc/kallsyms

$ grep -w machine_power_off /proc/kallsyms 
ffffffff8102391b T machine_power_off

但是它没有出口。kallsyms中的“
T”是否足以导出符号?导出是否足以在其他模块中使用?

我使用它的模块编译时显示警告:

WARNING: "machine_power_off" [/path/to/module.ko] undefined!

在主机(3.2.0-4-amd64)上,我可以加载此模块,但是在VirtualBox(3.16.0-4-amd64)上,它将生成以下消息

insmod: ERROR: could not insert module module.ko: Unknown symbol in module

为什么在我的主机系统中加载此模块,而不在VirtualBox中加载该模块?


问题答案:

标记为“ T” /proc/kallsyms表示该符号是全局可见的,并且可以在其他 内核代码中使用 (例如,通过驱动程序, 内置
编译器)。

但是为了在 内核模块的代码 中可用,需要使用EXPORT_SYMBOL或类似符号导出符号。导出符号列表与内核中所有符号列表分开维护。

可以在file中找到导出的符号/lib/modules/<kernel-version>/build/Module.symvers

(该文件应该存在,以便可以针对给定的内核构建内核模块)。



 类似资料:
  • Vim的标记系统对于我们是非常有用的。使用强大ctags工具,我们能够在vim中分析 代码生成tags标记。 exVim通过采用 ex-tags 和 ex-symbol 插件进行改善。exVim通过:Update命令生成tags。 选择标记 在vim中可以使用<ctrl-]和:ts tag-name跳转到对应tags。ex-tags 提供同样的办法但是却不同的命令---<leader>] 和:TS

  • 我需要在双引号内加粗。 当我把

  • 我只是尝试使用协议缓冲区为Go语言生成代码。但是无法使用原型命令生成服务。 上面是一个虚拟的原型文件,我试图将其转换为Go语言。但是无法生成正确的文件,因为在我的系统中,它无法将行识别为服务。 我正在windows系统上使用以下版本的protoc: 使用以下命令生成代码: \greet\greetpb\greet.proto--go_out=。 下面是由上述命令生成的go代码: 在以后的go代码中

  • 我在页面上使用动态包含: 这是标题中的重要部分。jsp: 我的主页源上的结果是: 我用这个: 如果我从另一个页面导入JSTL,有人知道如何使用它吗? 谢谢,佐尔坦

  • 我是学习android Java的初学者。我从Youtube上学习java android教程,我完全遵循视频中的编码,但在android Studio上我的编码显示“无法解析符号‘标签’”。我可以知道是什么问题吗?并希望得到在座各位大师的讲解。

  • 问题内容: 当我加载该模块时: (来自http://www.freesoftwaremagazine.com/articles/drivers_linux?page=0,2) 该模块在2.6.39-02063904-generic(来自Ubuntu PPA)上被标记为in 且无法卸载。但是它在默认的2.6.38内核上可以正常工作。(均在Ubuntu 11.04 x86上)。 2.6.39中发生了什