¿Es posible llamar al ioctl
desde un módulo kernel de Linux? ¿Alguien puede dar un ejemplo de cómo se usa?Cómo usar ioctl() desde el espacio del kernel en Linux?
Respuesta
Puede intentar llamar al sys_ioctl
.
Se exporta si el kernel está compilado con CONFIG_COMPAT
.
O, si tiene el controlador del dispositivo struct file_operations
, puede llamar directamente al controlador ioctl
.
Sin embargo, el identificador ioctl esperaría que los parámetros del puntero estuvieran en el espacio de direcciones del proceso que se está ejecutando actualmente, no en el espacio de direcciones del kernel. copy_from_user
se usaría para leerlos. Si da punteros al espacio de direcciones del kernel, copy_from_user
fallará. No veo cómo te las arreglarías con esto.
Editar:
Si va a llamar manejador ioctl entre el código de abajo copy_from_user
será nunca fallará.
mm_segment_t fs;
fs = get_fs(); /* save previous value */
set_fs (get_ds()); /* use kernel limit */
/* system calls can be invoked */
set_fs(fs); /* restore before returning to user space */
ioctl handler en file_operations ha quedado en desuso. ¿Puedes encontrar una forma más nueva de usar ioctl? – iammurtaza
¿Puede explicar cómo get_fs() y set_fs() permiten mágicamente que el espacio del kernel ejecute llamadas al sistema, y cómo después de este "copy_from_user()" ya no crea un problema? –
'set_fs' afecta el mecanismo que valida que las direcciones pasadas a' copy_to_user' están realmente en el espacio de direcciones del usuario actual. Hace que el núcleo piense que el espacio de direcciones actual es el espacio de direcciones del kernel. – ugoren
- 1. Usando Linux ioctl con Mono
- 2. ¿Cómo acceder al espacio del kernel desde el espacio del usuario?
- 3. ¿Cómo uso ioctl() para manipular mi módulo kernel?
- 4. ¿Cómo acceder a la memoria de espacio de usuario desde el kernel de Linux?
- 5. ¿Cómo agregar datos en un paquete desde el espacio del kernel?
- 6. Cómo mapear un buffer del kernel de Linux al espacio del usuario?
- 7. ¿Cómo se lee el búfer de anillo dentro del espacio del kernel de Linux?
- 8. Del kernel al espacio de usuario (DMA)
- 9. Programación del kernel de Linux
- 10. ¿Cómo se pueden cargar los módulos del kernel de Linux desde el código C?
- 11. módulo del kernel Linux compilar
- 12. desarrollo del kernel de Linux
- 13. Cómo comenzar con el desarrollo del kernel de Linux
- 14. Linux Kernel Modules: Cuándo usar try_module_get/module_put
- 15. ¿Cómo funciona copy_from_user del kernel de Linux internamente?
- 16. ¿Cómo se llama una compatibilidad ioctl desde el espacio de usuario? ¿Alguien puede dar algunos ejemplos?
- 17. unlocked_ioctl vs ioctl normales
- 18. ¿Cómo sabe Linux Kernel dónde buscar el firmware del controlador?
- 19. ¿Cómo controlar el espacio disponible del búfer UDP de Linux?
- 20. cómo usar CryptoAPI en el núcleo de Linux 2.6
- 21. Nuevo en el desarrollo del kernel/controlador de Linux
- 22. ¿Cómo detener los hilos del kernel de Linux en rmmod?
- 23. Cómo reiniciar el teléfono Android desde el código del kernel
- 24. stdlib.h alternativa en kernel Linux?
- 25. Símbolo exportado del kernel de Linux
- 26. ¿Impresiones de depuración del kernel de Linux?
- 27. Netlink espacio de usuario y comunicación kernel-espacio
- 28. ¿Cómo comunicarse con un módulo de kernel de Linux desde el espacio de usuario sin tirar basura/dev con nuevos nodos?
- 29. Programación del controlador del dispositivo del kernel de Linux
- 30. Ubicación del Módulo Kernel de Linux
Realmente no se supone que hagas cosas como esas. Si realiza una búsqueda, encontrará un código dependiente de la implementación de cómo hacer una llamada de sistema arbitraria desde el espacio del kernel, pero piense si hay una manera de lograr su objetivo real sin romper el modelo de esta manera. –