我已经构建了两个内核模块,其中一个是net_device。我的net_device模块A依赖于模块B,模块B提供了一些额外的控制机制来导出设备信息。
我希望模块B能够调用模块A中的“ xmit”函数。因此,如果我简单地从A导出符号,则模块B将依赖于模块A。这显然会产生“死锁”依赖性情况。
有没有人有解决这个问题的经验?如何正确导出A中的“ xmit”函数并让B使用它?
您可以从模块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(); ... } }