我正在编写一个内核模块,需要在另一台设备(" target"设备)上执行等效的ioctl。目标设备是一个安装在dev / something的输入设备。
我知道一种方法是从我的模块打开目标设备,然后按照this SO question中的描述调用ioctl。但是我知道这是一个黑客,并且可能有更好的方法。
在给定目标模块名称或目标设备的安装点的情况下,是否可以从我的内核模块中检索struct *input_dev
?
答案 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:强>
另一个选择是导出该结构的指针,而不是导出目标模块的任何功能,并从该任务中执行所需的操作。