6

是否可以ioctl从 Linux 内核模块调用?谁能提供一个如何使用它的例子?

4

1 回答 1

6

你可以试着打电话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 */
于 2012-06-21T06:46:43.303 回答