char device catch multiple(int)ioctl-arguments

我必须编写一个linux char设备,它根据unlock_ioctl处理ioctl(没有BKL)函数.目前我可以从userspace ioctl命令获得一个参数

__get_user(myint, (int __user *) arg);

我怎样才能收到多个int参数(例如这个调用)?:

ioctl(fp, SZ_NEW_DEV_FORMAT, 0, 1, 30);

解决方法:

是的,你必须使用结构.对于特定的ioctl命令,将有一些预定义的参数.您需要将所有参数包装到结构对象中并传入对象的地址.在内核中,您需要将给定的arg类型转换为结构指针并访问参数.例如.

 struct mesg {
         int size;
         char buf[100];
 };

 struct mesg msg1;

 /*Fill in the structure object here and call ioctl like this*/
 ret = ioctl(fd, SZ_NEW_DEV_FORMAT, &msg1);

在内核中,您可以像这样访问它:

      struct mesg *msg;
      copy_from_user((char *)msg, (char *)arg, sizeof(*msg));
上一篇:Linux 音频设备驱动架构及应用编程


下一篇:NUC980的GPIO驱动程序