【问题标题】:dynamic linking for a kernel module内核模块的动态链接
【发布时间】:2012-10-06 16:44:12
【问题描述】:

也就是说,一个驱动程序是否可以尝试为另一个驱动程序导入一个符号,如果该符号不存在,驱动程序是否可以继续加载而不解析导入?即使可能,是否允许上游驱动程序?即 lnux 内核中已经存在驱动程序?

【问题讨论】:

  • "如果符号不存在可以继续加载驱动程序" - 你应该假设驱动程序模块不会被加载。未解析的符号在访问时会导致内核崩溃。内核根本不会允许明显会导致恐慌的操作。

标签: linux-device-driver


【解决方案1】:

任何内核模块中由 EXPORT_SYMBOL 或 EXPORT_SYMBOL_GPL(如果导入模块确实具有 GPL 兼容许可证)导出的符号可以被其他模块使用。

如果符号不存在,驱动程序能否继续加载而不解析导入?

我不确定。但是您可以验证是否从cat /proc/kallsyms 的输出中导出了符号。导出的符号将有两个条目。一个带有符号名称,另一个带有 _ksymtab 前缀。

例如,对于 printk。

ffffffff814fd1e2 T printk ffffffff81812550 r __ksymtab_printk

【讨论】:

  • 感谢您提供的信息。我的意思是驱动程序能否以编程方式查找符号(是否已导出)并根据该符号继续加载?
猜你喜欢
  • 2018-09-30
  • 2014-05-14
  • 2013-12-27
  • 2022-09-23
  • 2018-06-11
  • 2015-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多