2010-10-31 24 views
5

intento compilar el módulo del kernel de Linux simple:módulo del kernel Linux compilar

#include <linux/module.h>  
#include <linux/kernel.h>  

int init_module(void) 
{ 
     printk("Hello world 1.\n"); 
     return 0; 
} 

void cleanup_module(void) 
{ 
     printk(KERN_ALERT "Goodbye world 1.\n"); 
} 

Mi makefile:

obj-m = testmodule.o 
KVERSION = $(shell uname -r) 
all: 
     make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules 
clean: 
     make -C /lib/modules/$(KVERSION)/build M=$(PWD) clean 

Ahora no tengo errores en mi archivo .c.

Pero cuando intento hacer en el terminal: marca: No hay nada que hacer para 'todo'.

¿Qué pasa?

Gracias.

Respuesta

5

El comando predeterminado en su makefile es

make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules 

que instruye a hacer a cd a/lib/modules/$ (KVERSION)/construir y ejecutar

make module m=YOUR_CURRENT_DIR 

A su vez, que makefile es no encontrando nada que hacer Presumiblemente, ese archivo MAKE espera encontrar alguna estructura particular en su directorio actual.

Debe leer con más atención las instrucciones que le hayan llevado a configurar este archivo MAKE.

+1

que tenían el mismo problema. Funcionó bien al poner el comando en la línea de comando, sin usar 'make'. Resultó que mi editor puso espacios en lugar de pestañas al copiar el 'Makefile'. –

0

Realmente no das suficiente información para determinar la respuesta correcta, pero te daré algunas cosas para investigar.

¿Cómo la compila? ¿Tiene la ruta de inclusión correcta en su compilación? Las rutas de compilación se especifican con la opción -I en gcc. Asegúrese de estar apuntando a su árbol fuente de kernel.

¿Has construido el kernel? Cuando haces un make, se configuran ciertas cosas que te permiten compilar. Hacer un make no construye todo (como módulos) pero obtendrá la configuración inicial para usted.

0

Asegúrate de tener tus distribuciones de los paquetes de encabezado/desarrollo kernel instalados que proporcionan estos archivos de inclusión.

Si están instalados, busque dónde se encuentran estos archivos de inclusión en su computadora y agregue estos directorios a los compiladores que incluyen la ruta de búsqueda (la opción -I).

0

Esto es porque su Makefile contiene ninguna ficha antes de dar el comando make

make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules 

Así que normalmente su archivo debe ser como a continuación:

obj-m = test.o                 

KVERSION = $(shell uname -r)              

all:                    
     make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules     
clean:                   
     make -C /lib/modules/$(KVERSION)/build M=$(PWD) clean 
Cuestiones relacionadas