Para escribir en el dispositivo mediante la función de usuario fwrite o similar se utiliza el miembro write: que aparece en la estructura file operations en la llamada a register_chrdev. En este ejemplo es la función memoria_write. Tiene como argumentos una estructura tipo file, un buffer, buf, al cual escribirá la función del espacio de usuario (fwrite), un contador del número de bytes a transferir, count, que tiene el mismo valor que el contador habitual de la función de escritura del espacio de usuario (fwrite) y finalmente la posición del fichero donde empezar a escribir, f_pos.
<<memoria write>>= ssize_t memoria_write( struct file *filp, char *buf, size_t count, loff_t *f_pos) { char *tmp; tmp=buf+count-1; copy_from_user(memoria_buffer,tmp,1); return 1; } |
Además resulta útil la función copy_from_user que transfiere datos del espacio de usuario al espacio de kernel.
En la Tabla 8 se puede ver esta nueva función.
Eventos | Funciones de usuarios | Funciones del kernel |
Carga de módulo | insmod | init_module |
Abrir dispositivo | fopen | file operations: open |
Leer dispositivo | fread | file operations: read |
Escribir dispositivo | fwrite | file operations: write |
Cerrar dispositivo | fclose | file operations: release |
Quitar módulo | rmmod | cleanup_module |
Tabla 8. Eventos de los drivers y sus funciones asociadas de intercambio entre el espacio de kernel y el espacio de usuario.