字符设备捕获多个(int)ioctl参数

我必须编写一个linux char设备,它可以为每个unlock_ioctl处理ioctl(无BKL)函数。 目前,我可以从用户空间ioctl命令收到一个参数

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

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

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

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

  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));