[bglug] Modulo per il kernel 2.6

mlpita@bergamo3.it mlpita@bergamo3.it
Mar 12 Apr 2005 23:47:48 CEST


> Devi andare a utilizzare direttamente i Makefile dei sorgenti del kernel
> (che a loro volta chiamano gcc con particolari parametri). Il Makefile che
> ti ho dato serve appunto a quello. Ricordati di cambiare la dir. dei
> sorgenti del kernel.
>
> Ciao

Mi sento un imbecille, provate a dare un occhiata alla lunga mail che avevo 
iniziato a scrivere quando ho scoperto che.....
- Tutto ha iniziato di colpo a funzionare e non so spiegarmi perché -
Ma tanto sono sicuro che domani sul PC dell' ufficio smetterà di nuovo di 
funzionare...
Grazie a tutti x il supporto morale

'Notte
Diego Settimi

----------------------- Lunga mail disperata ------------------------------

Purtroppo oggi è stata una brutta giornata, sono ancora al punto di partenza, 
come stamattina... non sono riuscito ancora a compilare e veder funzionare il 
modulo hello.c con la più banale delle funzioni di esempio, ma una volta che 
mi sblocco ho già scritto tutto il codice che andrà a finire nel modulo.

Allora, ecco cosa faccio nello specifico e che non funziona:

1) Creo un file /root/hello.c contenente un banale modulo come da copione 
(vedere in fondo)

Quindi, ecco i due tentativi principali di compilazione che faccio e i loro 
miseri risultati:

2.a) Creo un file /root/Makefile contenente:
------------------------------------------------------------
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
obj-m:=hello.o

default:
  $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
------------------------------------------------------------

3.a)
[root@ARKYE ~]# make
make: Nothing to be done for `default'.

N.B. Mi sono assicurato che il comando uname -r restituisce la versione 
corretta del Kernel (2.6.8.1) e che il link /lib/modules/2.6.8.1/build è 
diretto a /usr/src/linux-2.6.8.1 dove ci sono i sorgenti del mio kernel.
Ovviamente pwd restituisce /root

Altro tipo di tentativo:

2.b) Creo un file /root/Makefile contenente:
------------------------------------------------------------
obj-m:=hello.o
------------------------------------------------------------

3.b)
[root@ARKYE ~]# make -C /usr/src/linux-2.6.8.1 SUBDIRS=$PWD modules
ottengo una lunghissima lista di errori di compilazione di vario tipo

[A questo punto mi sono messo a fare un altro tentativo ed ho scoperto che 
funzionava, ma io non ho cambiato nulla...]

-------------------------- hello.c ----------------------------------
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>

static int mymodule_init(void)
{
  printk(KERN_ALERT "Mymodule loaded, say HELLO !\n");
  return 0;
}

static void mymodule_exit(void)
{
  printk(KERN_ALERT "Mymodule unloaded!\n");
}

module_init(mymodule_init);
module_exit(mymodule_exit);

MODULE_LICENSE("GPL"); 
-----------------------------------------------------------------------


Maggiori informazioni sulla lista bglug