Char dispositivo captura múltiples (int) argumentos de ioctl
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);
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