Next: La tabla de símbolos
Up: Mi primer módulo
Previous: Compilación de este ejemplo
  Índice General
  Índice de Materias
Antes de añadirle complejidad a nuestro módulo, vamos a tomar una serie de
precauciones para que de ahora en adelante nuestro código sea más seguro.
- Crearemos un Makefile para estandarizar la compilación de nuestro código.
- Vamos a incluir las definiciones de __KERNEL__ y MODULE en el comando
de compilación, así, si se nos olvidan en las fuentes, nos las incluirá el
compilador.
- Como ya hemos visto, un error de programación en un módulo puede ser fatal
para el sistema, por eso vamos a decirle al compilador que sea lo más estricto
posible (-Wall), es decir que nos muestre un mensaje de ``WARNING'' para todo
aquello que no le guste demasiado. Esto nos ayudará a construir un código
libre de errores. Hemos de depurar nuestro código hasta que el compilador
no muestre ninguna advertencia, en caso contrario seguro que estamos
metiendo la pata en algún sitio4.8.
- Es muy habitual en el kernel declarar funciones del tipo
inline
. Por
defecto gcc no expande las funciones así definidas si no le pides
que haga optimización de tu código, por eso conviene utilizar
la opción -O para el gcc.
Para aquellos que acostumbren a confiar en el compilador para optimizar su
código al máximo usando -O2, han de saber que usar esta opción con módulos es
bastante arriesgado (las razones para esto sobrepasan el contenido del curso,
para más información: [9] pág. 19).
Siguiendo estos sencillos preceptos podemos generar un Makefile con el siguiente
código:
# en mi máquina, las cabeceras del kernel están aqui
INCLUDEDIR = /usr/src/kernel-headers-2.2.17/include
CFLAGS = -D__KERNEL__ -DMODULE -O -Wall -I$(INCLUDEDIR)
OBJS = hola.o
all: $(OBJS)
clean:
- rm -f *.o *~ core
Si usamos este código para el Makefile es recomendable eliminar la definición
de __KERNEL__ y MODULE en nuestro fichero fuente, no pasa nada por que
estén ahí, pero el compilador lanza dos advertencias por redefinición de
símbolos, con lo que puede contribuir a crear confusión sobre el resultado de
nuestra compilación.
Next: La tabla de símbolos
Up: Mi primer módulo
Previous: Compilación de este ejemplo
  Índice General
  Índice de Materias
Alberto Cortés
2001-03-26