【发布时间】:2013-04-03 20:37:52
【问题描述】:
有时我观察到,当应用程序运行或调用任何内核模块函数时,会自动加载相应的内核模块。
我想构建一个类似的内核模块,它会在我的应用程序执行并调用其 ioctls 时自动加载。
实际上我想知道,我需要在我的内核模块中写什么,以便我的应用程序在运行时自动加载它。
找了好久都没找到满意的。
【问题讨论】:
标签: linux-kernel kernel kernel-module
有时我观察到,当应用程序运行或调用任何内核模块函数时,会自动加载相应的内核模块。
我想构建一个类似的内核模块,它会在我的应用程序执行并调用其 ioctls 时自动加载。
实际上我想知道,我需要在我的内核模块中写什么,以便我的应用程序在运行时自动加载它。
找了好久都没找到满意的。
【问题讨论】:
标签: linux-kernel kernel kernel-module
要搜索的关键字是 kmod,它是 Linux 内核的一部分,它处理动态加载内核模块的请求。
这里的答案中有太多细节无法列出,但请查看Linux Device Drivers, 2nd Edition' book, chapter 11,其中详细介绍了内核模块自动加载。
请注意,模块加载请求必须来自内核。因此,如果您在自定义模块中有设备驱动程序但未加载,则内核无法知道如何将 ioctl 请求与您的驱动程序匹配。但是假设你有一个驱动程序和一些ioctl函数拆分成不同的模块A和B,可以插入主模块A来提供设备接口,然后当驱动程序A请求ioctl时,它可以自动加载包含使用 kmod 机制的 ioctl 函数的附加模块 B
【讨论】:
kmod 是相当新的,在许多当前部署的 (2013) 平台上可能不是标准的。