устройство char перехватывает несколько (int) ioctl-аргументов - PullRequest
3 голосов
/ 13 января 2012

Мне нужно написать устройство char linux, которое обрабатывает функции ioctl (без BKL) для unlock_ioctl.В настоящее время я могу получить один аргумент от команды ipace для userpace для

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

Как я могу получить несколько int-аргументов (например, этот вызов)?:

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

1 Ответ

5 голосов
/ 18 января 2012

Да, вы должны использовать структуры. Для конкретной команды 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));
...