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

时间:2015-01-04 19:19:31

标签: linux linux-kernel linux-device-driver

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

现在,我希望能够从模块B调用模块A中的xmit函数。结果,如果我从A中简单地导出符号,模块B将依赖于模块A.这显然会造成'死锁' '喜欢依赖情况。

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

非常感谢。

1 个答案:

答案 0 :(得分:3)

您可以从模块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();
        ...
    }
}