next up previous contents index
Next: ¿Desde aquí hasta dónde? Up: Guía de Programación de Previous: Problemas comunes   Contents   Index


Cambios entre 2.0 y 2.2

No conozco todo el núcleo tan bien como para documentar todos los cambios. En el transcurso de la conversión de los ejemplos (o más bien adaptando los cambios de Emmanuel Papirakis) me encontré con las siguientes diferencias. Las relaciono aquí, todas juntas, para ayudar a los programadores de módulos (especialmente aquellos que aprendieron de versiones previas de este libro y que están más familiarizados con las técnicas que utilizo) a convertirse a la nueva versión.

Un recurso adicional para la gente que quiera convertirse a 2.2 está en http://www.atnf.csiro.au/~rgooch/linux/docs/porting-to-2.2.html.

  1. asm/uaccess.h Si necesitas put_user o get_user tienes que incluir (#include) sus ficheros de cabeceras.

  2. get_user En la versión 2.2, get_user recibe tanto el puntero a la memoria de usuario como la variable en la memoria del núcleo para rellenarla con la información. El motivo por el que esto es así es que get_user ahora puede leer dos o cuatro bytes al mismo tiempo si la variable que leemos es de una longitud de dos o cuatro bytes.

  3. file_operations Esta estructura ahora tiene una función de borrado entre las funciones open y close.

  4. close en file_operations En la versión 2.2, la función close devuelve un entero, por lo tanto se permite que falle.

  5. read y write en file_operations Las cabeceras de estas funciones han cambiado. Ahora devuelven ssize_t en vez de un entero, y su lista de parámetros es diferente. El inodo ya no es un parámetro, y en cambio sí lo es el desplazamiento dentro del fichero.

  6. proc_register_dynamic Esta función ya no existe. En vez de ello, llamas al proc_register normal y pones cero en el campo de inodo de la estructura.

  7. Señales Las señales en la estructura de tareas ya no son un entero de 32 bits, sino un array de enteros _NSIG_WORDS.

  8. queue_task_irq Incluso si quieres planificar una tarea para que suceda dentro de un manejador de interrupciones, usa queue_task, no queue_task_irq.

  9. Parámetros del Módulo Ya no hay que simplemente declarar los parámetros del módulo como variables globales. En 2.2 tienes que usar también MODULE_PARM para declarar su tipo. Esto es una gran mejora, porque permite que el módulo reciba parámetros de cadenas de caracteres que empiezan con un dígito, por ejemplo, sin que esto le confunda.

  10. Multiproceso simétrico El núcleo ya no está dentro de un solo `spinlock' grande, lo que significa que los módulos del núcleo tienen que tener en cuenta el SMP.


next up previous contents index
Next: ¿Desde aquí hasta dónde? Up: Guía de Programación de Previous: Problemas comunes   Contents   Index
2003-08-27