【发布时间】:2012-10-06 16:44:12
【问题描述】:
也就是说,一个驱动程序是否可以尝试为另一个驱动程序导入一个符号,如果该符号不存在,驱动程序是否可以继续加载而不解析导入?即使可能,是否允许上游驱动程序?即 lnux 内核中已经存在驱动程序?
【问题讨论】:
-
"如果符号不存在可以继续加载驱动程序" - 你应该假设驱动程序模块不会被加载。未解析的符号在访问时会导致内核崩溃。内核根本不会允许明显会导致恐慌的操作。
也就是说,一个驱动程序是否可以尝试为另一个驱动程序导入一个符号,如果该符号不存在,驱动程序是否可以继续加载而不解析导入?即使可能,是否允许上游驱动程序?即 lnux 内核中已经存在驱动程序?
【问题讨论】:
任何内核模块中由 EXPORT_SYMBOL 或 EXPORT_SYMBOL_GPL(如果导入模块确实具有 GPL 兼容许可证)导出的符号可以被其他模块使用。
如果符号不存在,驱动程序能否继续加载而不解析导入?
我不确定。但是您可以验证是否从cat /proc/kallsyms 的输出中导出了符号。导出的符号将有两个条目。一个带有符号名称,另一个带有 _ksymtab 前缀。
例如,对于 printk。
ffffffff814fd1e2 T printk ffffffff81812550 r __ksymtab_printk
【讨论】: