Pregunta

Tengo que escribir un dispositivo Linux Char, que maneja las funciones IOCTL (sin BKL) por desbloqueo_ioctl. Por el momento puedo recibir un argumento del comando IOCTL del espacio de usuario por por

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

¿Cómo puedo recibir múltiples argumentos int-argumentos (por ejemplo, esta llamada)?:

ioctl(fp, SZ_NEW_DEV_FORMAT, 0, 1, 30);
¿Fue útil?

Solución

Sí, tienes que usar estructuras. Para un comando IOCTL particular habrá algunos argumentos predefinidos. Debe envolver todos estos argumentos en un objeto de estructura y pasar en la dirección del objeto. En el lado del núcleo, debe escribir el arg dado para estructurar el puntero y acceder a los argumentos. Por ejemplo.

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

Dentro del núcleo accedes así:

      struct mesg *msg;
      copy_from_user((char *)msg, (char *)arg, sizeof(*msg));
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top