一尘不染

在这种情况下如何从Linux内核模块导出符号?

linux

我已经构建了两个内核模块,其中一个是net_device。我的net_device模块A依赖于模块B,模块B提供了一些额外的控制机制来导出设备信息。

我希望模块B能够调用模块A中的“ xmit”函数。因此,如果我简单地从A导出符号,则模块B将依赖于模块A。这显然会产生“死锁”依赖性情况。

有没有人有解决这个问题的经验?如何正确导出A中的“ xmit”函数并让B使用它?


阅读 273

收藏
2020-06-07

共1个答案

一尘不染

您可以从模块A提供回调函数。在这种情况下,您无需将所需的每个函数导出到内核名称空间。我想您可以为B提供一些结构。

内部标头:

struct possible_ops {
    int (*xmit)(...);
};

A:

struct private {
    struct possible_ops *ops;
};
...  
ops = kzalloc(sizeof(*ops));
ops->xmit = xmit;

B:

whatever(struct possible_ops *ops) {
    if (ops && ops->xmit) {
        ret = ops->xmit();
        ...
    }
}
2020-06-07