Pagina 1 di 1

Compilazione modulo

Inviato: mar 18 dic 2007, 15:42
da zosty
Sto cercando di imparare a compilare dei moduli per la creazione di driver.
Per iniziare ho provato a compilare questo semplice file tratto da un libro di programmazione di device drivers:

Codice: Seleziona tutto

#include <linux/module.h>

#if defined(CONFIG_MODVERSIONS)
#define MODVERSIONS
#include <linux/modversions.h>
#endif

#include <linux/kernel.h>


int init_module(void)
{
  	printk(KERN_DEBUG "Init module success\n");
	return 0;
}

void cleanup_module(void)
{
  printk(KERN_DEBUG "Exit\n");
}

ma, compilandolo con il comando

Codice: Seleziona tutto

 gcc -D__KERNEL__ -DMODULE -DMODVERSION -Wall -O2 -o module.o -c module.c 
ottengo il seguente messaggio di errore:
  • In file included from /usr/include/linux/prefetch.h:14,
    from /usr/include/linux/list.h:8,
    from /usr/include/linux/module.h:9,
    from module.c:1:
    /usr/include/asm/processor.h:83: error: 'CONFIG_X86_L1_CACHE_SHIFT' undeclared here (not in a function)
    /usr/include/asm/processor.h:83: error: requested alignment is not a constant
    In file included from /usr/include/linux/module.h:20,
    from module.c:1:
    /usr/include/asm/module.h:64:2: error: #error unknown processor family
Qualcuno sa dirmi da cosa e' dovuto?
Grazie
Z

Inviato: mar 18 dic 2007, 16:18
da tgmx
Non so se va bene compilare il modulo in quel modo.
In una guida che sto leggendo (sto anche io approfondendo la creazione di moduli :) ) dicono di compilare con un makefile apposito.

Codice: Seleziona tutto

obj-m +=modulo.o

all:
        make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
Basta mettere il .c e il Makefile in una stessa directory e dare make. 8)

Inviato: mar 18 dic 2007, 16:39
da zosty
tgmx ha scritto:Non so se va bene compilare il modulo in quel modo.
In una guida che sto leggendo (sto anche io approfondendo la creazione di moduli :) ) dicono di compilare con un makefile apposito.

Codice: Seleziona tutto

obj-m +=modulo.o

all:
        make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
Basta mettere il .c e il Makefile in una stessa directory e dare make. 8)

Grazie!!! E' cambiato con la versione di kernel 2.6....

Inviato: mar 18 dic 2007, 16:51
da tgmx
de nada ;)

Metti [RISOLTO] sul titolo e buon lavoro :) .