从内核模块获取对输入设备的引用

时间:2014-07-22 09:59:01

标签: c linux linux-kernel linux-device-driver kernel-module

我正在编写一个内核模块,需要在另一台设备(" target"设备)上执行等效的ioctl。目标设备是一个安装在dev / something的输入设备。

我知道一种方法是从我的模块打开目标设备,然后按照this SO question中的描述调用ioctl。但是我知道这是一个黑客,并且可能有更好的方法。

在给定目标模块名称或目标设备的安装点的情况下,是否可以从我的内核模块中检索struct *input_dev

1 个答案:

答案 0 :(得分:1)

选项1: 打开目标设备节点的第一个选项是更好的选择。 我过去做过2-3次。 但是这里只有在文件系统安装完毕后才能运行,然后你的测试模块才能打开那个模块。

struct file* test;
test = filp_open("/dev/targetDevice",O_RDWR,0);

现在正在调用ioctl

test->f_op->unlocked_ioctl(test,IOCTL_MACRO,params);

<强>选项2:

我想的另一个解决方案是,如果目标模块在您的控制之下,那么从该目标模块将该指针设为EXPORT_SYMBOL()并访问测试模块中的那个。

<强>选项3:

另一个选择是导出该结构的指针,而不是导出目标模块的任何功能,并从该任务中执行所需的操作。