如何在Linux中使用内核空间的ioctl()?
是否可以从Linux内核模块调用ioctl
? 任何人都可以举例说明它是如何使用的吗?
您可以尝试调用sys_ioctl
。
如果使用CONFIG_COMPAT
编译内核,则导出它。
或者,如果您有设备驱动程序的struct file_operations
,则可以直接调用其ioctl
处理程序。
但是,ioctl句柄会指望指针参数位于当前运行的进程的地址空间中,而不是内核地址空间中。 copy_from_user
将用于读取它们。 如果指向内核地址空间, copy_from_user
将失败。 我不知道你会怎么解决这个问题。
编辑:
如果您将在下面的代码之间调用ioctl处理程序而不是copy_from_user
将永远不会失败。
mm_segment_t fs; fs = get_fs(); /* save previous value */ set_fs (get_ds()); /* use kernel limit */ /* system calls can be invoked */ set_fs(fs); /* restore before returning to user space */