我正在linux中编写驱动程序。我如何使用ioctl进行用户程序和驱动程序之间的通信? 在我的驱动程序中,结构如下:
struct file_operations fops = {.read = device_read,.write = device_write,.unlocked_ioctl = device_ioctl,.open = device_open,.release=device_release };
在我的理解中,这里device_ioctl是一个处理来自用户程序的ioctl调用的函数。并且可以使用可变数量的参数进行调用。
但我不确定使用ioctl的方式。也完全困惑,并渴望知道我怎么能写device_ioctl?
任何人都可以帮助我吗?
提前致谢。
答案 0 :(得分:2)
我相信LDD3第6.1章可以用很好的例子回答你的问题。
答案 1 :(得分:1)
register_chrdev
获取内核文件的主编号。将fops
作为参数。/proc/devices
中找到)使用此号码和mknod
命令创建/dev/yourdevice
。/dev/yourdevice
并将ioctl
函数与文件描述符一起使用。答案 2 :(得分:0)
您可以使用任何proc
文件代替设备:
static long my_proc_ioctl(struct file * file, unsigned int cmd, unsigned long arg)
{
printk("%s() cmd=%.08x arg=%pK\n", __func__, cmd, (void *)arg);
return 0;
}
static const struct file_operations my_ioctl_fops = {
.owner = THIS_MODULE,
.unlocked_ioctl = my_proc_ioctl,
};
[...]
proc_create("my_ioctl_file", 0600, NULL, &my_ioctl_fops);
[...]