El driver “memoria”: abriendo el dispositivo como fichero

La función en el espacio de kernel correspondiente a la apertura de un fichero en el espacio de usuario (fopen) es el miembro open: de la estructura file operations en la llamada a register_chrdev. En este caso se trata de memoria_open. Tiene como argumentos una estructura inode que pasa información del kernel al driver tal como el número mayor y el número menor y una estructura file con información relativa a las distintas operaciones que se pueden realizar con el fichero. Ninguna de estas dos funciones las veremos en profundidad aquí.

El kernel lleva un contador de cuantas veces está siendo utilizado un driver. El valor para cada driver se puede ver en la última columna numérica del comando lsmod. Cuando se abre un dispositivo para leer o escribir en él, la cuenta de uso se debe incrementar, tal y como aparece en la función memoria_open.

Además de esta operación, en la apertura de un fichero, se suelen iniciar las variables pertinentes al driver y el propio dispositivo en si. En este ejemplo, y debido a su extrema sencillez, no realizaremos operaciones de este tipo en dicha función.

Podemos ver la función memoria_open a continuación:

  <<memoria open>>=
int memoria_open(struct inode *inode, struct file *filp) { 
  /* Aumentamos la cuenta de uso */ 
  MOD_INC_USE_COUNT; 

  /* Exito */
  return 0; 

}

En la Tabla 5 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   
Escribir dispositivo   
Cerrar dispositivo   
Quitar módulo rmmod cleanup_module

Tabla 5. Eventos de los drivers y sus funciones asociadas de intercambio entre el espacio de kernel y el espacio de usuario.