Linux内核模块中GPL * find_symbol *方法的替代方法

时间:2018-10-09 13:00:43

标签: c linux linux-kernel kernel-module

我有一个专有的 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替代方案?

谢谢。

2 个答案:

答案 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