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