我已经构建了两个内核模块,其中一个是net_device。我的net_device模块A依赖于模块B,它提供了一些额外的控制机制来导出设备信息。
现在,我希望能够从模块B调用模块A中的xmit函数。结果,如果我从A中简单地导出符号,模块B将依赖于模块A.这显然会造成'死锁' '喜欢依赖情况。
有没有人有解决这个问题的经验?如何在A中正确导出xmit函数并让B使用它?
非常感谢。
答案 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();
...
}
}