A veces tiene sentido dividir el módulo del núcleo en varios ficheros de código. En este caso, tienes que hacer lo siguiente:
He aquí un ejemplo de módulo de este tipo.
/* start.c * Copyright (C) 1999 by Ori Pomerantz * * "Hola, mundo" - la versi�n m�dulo del n�cleo. * Este fichero incluye justamente la rutina de comienzo */ /* Los ficheros de cabeceras necesarios */ /* Est�ndar en los m�dulos del n�cleo */ #include <linux/kernel.h> /* Estamos haciendo trabajo del n�cleo */ #include <linux/module.h> /* Espec�ficamente, un m�dulo */ /* Distribuido con CONFIG_MODVERSIONS */ #if CONFIG_MODVERSIONS==1 #define MODVERSIONS #include <linux/modversions.h> #endif /* Inicializa el m�dulo */ int init_module() { printk("Hola, mundo - este es el n�cleo hablando\n"); /* Si retornamos un valor distinto de cero, significa * que init_module fall� y el m�dulo del n�cleo * no puede ser cargado */ return 0; }
/* stop.c * Copyright (C) 1999 by Ori Pomerantz * * "Hola, mundo" - la versi�n m�dulo del n�cleo. Este * fichero incluye justamente la rutina de parada. */ /* Los ficheros de cabeceras necesarios */ /* Est�ndar en los m�dulos del n�cleo */ #include <linux/kernel.h> /* Estamos haciendo trabajo del n�cleo */ #define __NO_VERSION__ /* Este no es "el" fichero * del m�dulo del n�cleo */ #include <linux/module.h> /* Espec�ficamente, un m�dulo */ #include <linux/version.h> /* No incluido por * module.h debido * a __NO_VERSION__ */ /* Distribuido con CONFIG_MODVERSIONS */ #if CONFIG_MODVERSIONS==1 #define MODVERSIONS #include <linux/modversions.h> #endif /* Limpieza - deshacemos todo aquello que hizo init_module */ void cleanup_module() { printk("La vida de un m�dulo del n�cleo es corta\n"); }
# Makefile para un m�dulo multiarchivo del n�cleo CC=gcc MODCFLAGS := -Wall -DMODULE -D__KERNEL__ -DLINUX hello.o: start.o stop.o ld -m elf_i386 -r -o hello.o start.o stop.o start.o: start.c /usr/include/linux/version.h $(CC) $(MODCFLAGS) -c start.c stop.o: stop.c /usr/include/linux/version.h $(CC) $(MODCFLAGS) -c stop.c