如何编写Linux驱动模块调用/使用另一个驱动模块?
我正在开发一个 Linux 驱动程序可加载模块,我必须在我的驱动程序中使用另一个设备。(某种驱动程序堆叠在另一个驱动程序上)
我如何在我的驱动程序中调用/使用另一个驱动程序? 我认为它们都在内核中,所以可能有一种方法可以直接使用另一个驱动程序。
I'm developing a Linux driver loadable module and I have to use another device in my driver.(kind of driver stacked on another driver)
How do I call/use another driver in my driver? I think they are both in the kernel so there might be a way that can use another driver directly.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您将需要
EXPORT_SYMBOL
(或EXPORT_SYMBOL_GPL
)宏。 例如:这应该是一帆风顺的,但是您当然必须小心命名空间 - 踩踏别人的内核模块符号将是不幸的。
You will need the
EXPORT_SYMBOL
(orEXPORT_SYMBOL_GPL
) macro. For example:This should be plain sailing, but you must of course be careful with the namespace - stomping on somebody else's kernel module symbols would be unfortunate.
您忘记提到,您还应该研究 try_module_get/module_put/symbol_get/symbol_put/symbol_request,以确保加载其他模块,并且在使用过程中不会卸载它。 但我不记得具体细节了; 我认为 modprobe 将确保加载其他模块,但我不确定是否会添加卸载的运行时依赖项。 我猜想其他一些情况可能需要这些 API,但需要了解它们才能检查这一点。
顺便说一句,免费的《Linux 设备驱动程序》一书可以在这里找到,它将回答这个问题以及更多其他问题:
http://lwn.net/Kernel/LDD3/
You forgot to mention that you should also study try_module_get/module_put/symbol_get/symbol_put/symbol_request, for ensuring loading of the other module, and the fact that it is not unloaded during usage. I don't recall the exact details though; I think that modprobe will ensure the other module is loaded, but I'm not sure if the runtime dependency for unloading will be added. I guess that those APIs might be needed for some other cases, but needs to know about them to check this.
Btw, the free book Linux Device Drivers is available here, and it will answer this question and much more:
http://lwn.net/Kernel/LDD3/