在内核模式和用户模式之间使用ioctl通信

Posted

技术标签:

【中文标题】在内核模式和用户模式之间使用ioctl通信【英文标题】:Using ioctl communication between Kernel mode and user mode 【发布时间】:2011-08-17 15:43:59 【问题描述】:

我想使用 ioctl 与我的内核模块进行通信。我已经编写了两个 c 程序,一个用于内核模块,另一个用于用户模式。编译内核模块时出现此错误:

错误:在初始化程序中指定了未知字段“ioctl”

在这一行:

struct file_operations Fops = 
 .read = device_read,
 .write = device_write,
 .ioctl = device_ioctl,  ------> at this point error is occuring.
 .open = device_open,
 .release = device_release,
;

知道为什么会这样。

谢谢

【问题讨论】:

【参考方案1】:

在较新的内核中,首选方法是使用.unlocked_ioctl.compat_ioctl 字段。普通的.ioctl 已从struct file_operations 中删除。 This discussion 可能会澄清发生了什么以及如何处理。

【讨论】:

【参考方案2】:

在较新的内核中,使用.unlocked_ioctl 代替.ioctl。它工作正常。

【讨论】:

以上是关于在内核模式和用户模式之间使用ioctl通信的主要内容,如果未能解决你的问题,请参考以下文章

使用 IOCTL 将音频数据从用户模式发送到 Sysvad(虚拟音频驱动程序)

命令和程序如何与 Window OS 通信

gpio IOCTL控制

应用层与内核的几种通信方式

以内核模式运行和以root身份运行的进程之间的区别?

用户模式和内核模式:同时使用不同的程序