 
 
 
 
 
 
 
 
 
 
 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.
- asm/uaccess.h Si necesitas put_user o get_user 
        tienes que incluir (#include) sus ficheros de cabeceras.
 
- 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.
 
- file_operations Esta estructura ahora tiene una función de borrado
        entre las funciones open y close.
 
- close en file_operations En la versión 2.2, la función 
        close devuelve un entero, por lo tanto se permite que falle.
 
- 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.
 
- 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.
 
- 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.
 
- 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.
 
- 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.
 
- 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: ¿Desde aquí hasta dónde?
 Up: Guía de Programación de
 Previous: Problemas comunes
     Contents 
     Index 
2003-08-27