如何在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 */