El driver “memoria”: escribiendo al dispositivo

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.