我有一个专有的 Linux 模块,该模块可能在包含功能 foo 的第二个专有模块之前或之后加载。
我希望在对第一个模块进行动态配置后,查找第二个模块的符号 foo ,并在找到该模块时调用它。
(宽松的语法)总体思路是这样的:
/* check if the module/symbol can be found */
module, foo_cb = lookup_for_a_symbol("foo");
if (foo_cb && module) {
/* increment the refcnt to make sure the module will not be unloaded */
module_try_get(module);
foo_cb(my_params);
/* release the module */
module_put(module);
}
我在module.c中找到了一个函数,该函数的功能类似于 find_symbol ,但它是GPL。
是否有用于动态符号查找的非GPL替代方案?
谢谢。
答案 0 :(得分:0)
但是您的模块不会导出GPL符号,因此这应该不是问题。唯一的问题是,您是否希望能够在不加载foo的情况下加载专有模块bar。
模块foo应该使用EXPORT_SYMBOL()
导出bar将要使用的任何内容。
如果需要条件动态链接,则添加第三个模块来执行此操作,该模块使用foo中的符号调用bar并在foo和bar中使用EXPORT_SYMBOL()
以使必要的符号可用于foobar模块。 / p>
答案 1 :(得分:0)
对不起,我知道这是一个相对较老的问题,但是我最近有同样的需求,并且我使用了一个非常明显的解决方案,而没有创建这里没有人提及的GPL帮助器模块,所以我认为值得一提。
scnprintf不是GPL,它支持%pf
或%pF
格式,可完成所需的符号解析。参见printk formats