next up previous contents index
Next: Módulos del núcleo de Up: Hola, mundo Previous: Hola, mundo   Contents   Index


Makefiles para los módulos del núcleo

Un módulo del núcleo no es un ejecutable independiente, sino un fichero objeto que será enlazado dentro del núcleo en tiempo de ejecución. En consecuencia, deberían ser compilados con la bandera -c. También, todos los módulos del núcleo deberían ser compilados con ciertos símbolos definidos.

Hay otros símbolos que tienen que ser incluidos, o no, dependiendo de las banderas con las que se haya compilado el núcleo. Si no estás seguro de cómo fue compilado el núcleo, mira en /usr/include/linux/config.h

Makefile

# Makefile para un módulo básico del núcleo

CC=gcc
MODCFLAGS := -Wall -DMODULE -D__KERNEL__ -DLINUX

hello.o:	hello.c /usr/include/linux/version.h
		$(CC) $(MODCFLAGS) -c hello.c
		echo insmod hello.o para conectarlo
		echo rmmod hello para desconectarlo
		echo
		echo X y la programación del núcleo no se mezclan.
		echo Haz insmod y rmmod desde fuera de X.

Así que ahora sólo falta hacer su a root (no compilaste como root, ¿a que no? Viviendo en el límite1.1...), y entonces haz insmod hello y rmmod hello para la satisfacción de tu alma. Mientras lo haces, observa la presencia de tu nuevo módulo del núcleo en /proc/modules.

Por cierto: el motivo por el que Makefile recomienda no hacer insmod desde X es porque cuando el núcleo tiene que imprimir un mensaje con printk, lo envía a la consola. Cuando no utilizas X, va al terminal virtual que estás usando (el que escogiste con Alt-F$<$n$>$) y lo ves. Si utilizas X, en cambio, hay dos posibilidades: que tengas una consola abierta con xterm -C, en cuyo caso la salida será enviada allí, o que no, en cuyo caso la salida irá al terminal virtual 7 (el que está `cubierto' por X).

Si tu núcleo se vuelve inestable será más probable que cojas los mensajes de depuración sin las X. Fuera de X, printk va directamente desde el núcleo a la consola. En X, en cambio, los printks van a un proceso de modo usuario (xterm -C). Cuando este proceso recibe tiempo de CPU, se supone que lo envía al proceso servidor de X. Entonces, cuando el servidor X recibe la CPU, se supone que lo muestra; pero un núcleo inestable normalmente significa que el sistema se va a estrellar o a reiniciar, por lo tanto no quieres que se retrasen los mensajes de error, los que podrían explicarte qué es lo que fue mal, durante mucho más tiempo del que necesitas.


next up previous contents index
Next: Módulos del núcleo de Up: Hola, mundo Previous: Hola, mundo   Contents   Index
2003-08-27