在这种情况下如何从Linux内核模块中导出符号? [英] How to export symbol from Linux kernel module in this case?
问题描述
我已经构建了两个内核模块,其中一个是net_device.我的net_device模块A依赖于模块B,模块B提供了一些额外的控制机制来导出设备信息.
I've got two kernel modules built, one of which is a net_device. My net_device module A depends on module B which provide some extra control mechanism to export device info.
我希望模块B能够调用模块A中的"xmit"函数.因此,如果我简单地从A导出符号,则模块B将依赖于模块A.这显然会创建一个死锁"的依赖情况.
I want module B to be able to call the "xmit" function which is in module A. As a result, module B will become dependent on module A if I simple export symbol from A. This, obviously, creates a "deadlock" dependency situation.
有人有解决这个问题的经验吗?如何正确导出A中的"xmit"函数并让B使用它?
Does anyone have experience resolving this? How can I properly export the "xmit" function in A and let B use it?
推荐答案
您可以从模块A提供回调函数.在这种情况下,您不需要将所需的每个函数导出到内核名称空间.我想您可以为B提供一些结构.
You may provide the callback function from module A. In that case you don't need to export each function you need to the kernel namespace. I presume you just could supply some structure to the B. Something like:
内部标头:
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();
...
}
}
这篇关于在这种情况下如何从Linux内核模块中导出符号?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!