Programacion de modulos

Imagen de Harkonnen
0 puntos

Hola!

Estoy intentando programar un modulo para el kernel, un simple hello world, pero no hay manera de dar con la combinacion que funcione correctamente.

En un principio estaba copiando un modulo que habia leido, lo guardaba en un archivo .ko y hacia insmod archivo.ko. Daba un error invalid file format. Luego leyendo he visto que quizas haria que compilarlo. Bueno no habia manera asi que opte por primero compilar el clasico hello world. Pero parece quetampoco hay forma. Despues de solventar algunos problemas, como la llamada a KERNALERT o algo asi despues de hacer printk y algunas librerias de mas que me daban problemas, consegui que me compilara este codigo

<code>

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

static int __init hello_2_init(void)
{
printk( "Hello world. \n");
return 0;
}

static void __exit hello_2_exit(void)
{
printk("Goobye world. \n");
}

module_init(hello_2_init);
module_exit(hello_2_exit);
</code>

 

si intento instalar el archivo .o , estoy como al principio ... invalid file format

pero no encuentro el make que me lo compile este es el ultimo que he utilizado

<code>

obj-m += hello-1.o

all:
#make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
make -C /lib/modules/`uname -r`/build/ SUBDIRS=$PWD modules

clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean</code>

que me devuelve

#make -C /lib/modules/2.6.15-28-386/build M=/home/abraham/kernelmodules modules
make -C /lib/modules/2.6.15-28-386/build/ SUBDIRS=WD modules
make: *** /lib/modules/2.6.15-28-386/build/: No such file or directory. Stop.
make: *** [all] Error 2

pero no se cual es la ruta a utilizar. He leido tambien que la cosa cambia dependiendo de la version del kernel, asi que si alguien me puede pasar un hello world junto con el make para mi kernel version 2.6.15-28-386 me haria un favor muy grande.

Imagen de Harkonnen
+1
0
-1

Antes pongo el post, antes me funciona ..... y es que cuando algo esta en tantos sitios de la misma manera es porque suele funcionar .... bueno no se por donde he leido algo acerca de un paquetito llamado linux-headers-2.6.15-28-386

???? que yo juraria que lo habia instalado antes ...... pero apt-get install linux-headers-2.6.15-28-386 y .... ohhhhhhhh

The following extra packages will be installed:
linux-headers-2.6.15-28
The following NEW packages will be installed:
linux-headers-2.6.15-28 linux-headers-2.6.15-28-386
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 7763kB of archives.
After unpacking 79.6MB of additional disk space will be used
.

 

cagon tooooooo .... luego hago de nuevo make install y me da error pero un error diferente .... solo es cambiar el la primera letra del archivo makefile que la tengo en misnuscula a mayuscurla y voila!!!

abraham@abraham-desktop:~/kernelmodules$ mv makefile Makefile
abraham@abraham-desktop:~/kernelmodules$ make all
make -C /lib/modules/2.6.15-28-386/build M=/home/abraham/kernelmodules modules
make[1]: Entering directory `/usr/src/linux-headers-2.6.15-28-386'
CC [M] /home/abraham/kernelmodules/hello-1.o
Building modules, stage 2.
MODPOST
CC /home/abraham/kernelmodules/hello-1.mod.o
LD [M] /home/abraham/kernelmodules/hello-1.ko
make[1]: Leaving directory `/usr/src/linux-headers-2.6.15-28-386'
abraham@abraham-desktop:~/kernelmodules$ ls
hello-1.c hello-1.ko hello-1.mod.c hello-1.mod.o hello-1.o makefile~ Makefile processlist.c traceinit.c

y ahi esta el bendito .ko !!!!! arhg!!!!

Bueno espero que le sirva a alguien!!!

+1
0
-1
Imagen de mige
+1
0
-1

Saludos

    pues he estado intentando hacer un modulo y me tope con esto y lo probe el unico poblema es que cuando ejecuto el Makefile me dice:

$make install
make: *** No hay ninguna regla para construir el objetivo `install'.  Alto.

$ make
make: No se hace nada para `all'.

alguien me puede ayudar 

 

P.D. utilice el Makefile posteado anteriormente 

+1
0
-1
Imagen de mige
+1
0
-1

la verdad no se cual fue el error pero utilice otro Makefile y listo

<code>

KVERSION = $(shell uname -r)

obj-m = hello-1.o

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

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

</code>

+1
0
-1