[erro]Compile Module

Started by Alucard, 27 de July , 2008, 12:36:23 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Alucard

Olá estou usando slackware com o kernel 2.6.24.5 e não consigo compilar modules.
Abaixo um código exemplo.

#define MODULE
#include <linux/module.h>

int init_module(void)  { printk("<1>Hello, world\n"); return 0; }
void cleanup_module(void) { printk("<1>Goodbye cruel world\n"); }

Quando compilado com

gcc -c hello.c
retorna o seguinte erro

root@alucard:~/Desktop# gcc -c hello.c
In file included from /usr/include/linux/module.h:9,
                 from hello.c:2:
/usr/include/linux/list.h:995:2: warning: #warning "don't include kernel headers in userspace"
In file included from /usr/include/linux/module.h:18,
                 from hello.c:2:
/usr/include/linux/marker.h:103: error: expected declaration specifiers or '...' before numeric constant
/usr/include/linux/marker.h:103: error: expected declaration specifiers or '...' before numeric constant
/usr/include/linux/marker.h: In function '__printf':
/usr/include/linux/marker.h:103: error: expected declaration specifiers before '__mark_check_format'
/usr/include/linux/marker.h:107: error: storage class specified for parameter '__mark_empty_function'
/usr/include/linux/marker.h:114: error: storage class specified for parameter 'marker_probe_register'
/usr/include/linux/marker.h:119: error: storage class specified for parameter 'marker_probe_unregister'
/usr/include/linux/marker.h:123: error: storage class specified for parameter 'marker_probe_unregister_private_data'
/usr/include/linux/marker.h:125: error: storage class specified for parameter 'marker_arm'
/usr/include/linux/marker.h:126: error: storage class specified for parameter 'marker_disarm'
/usr/include/linux/marker.h:127: error: storage class specified for parameter 'marker_get_private_data'
In file included from /usr/include/linux/preempt.h:9,
                 from /usr/include/linux/percpu.h:4,
                 from /usr/include/asm/local_64.h:4,
                 from /usr/include/asm/local.h:4,
                 from /usr/include/linux/module.h:19,
                 from hello.c:2:
/usr/include/linux/thread_info.h:23: error: expected specifier-qualifier-list before 'u32'
/usr/include/linux/thread_info.h:31: error: storage class specified for parameter 'do_no_restart_syscall'
In file included from /usr/include/asm/alternative.h:4,
                 from /usr/include/asm/bitops_64.h:12,
                 from /usr/include/asm/bitops.h:4,
                 from /usr/include/linux/bitops.h:17,
                 from /usr/include/linux/thread_info.h:33,
                 from /usr/include/linux/preempt.h:9,
                 from /usr/include/linux/percpu.h:4,
                 from /usr/include/asm/local_64.h:4,
                 from /usr/include/asm/local.h:4,
                 from /usr/include/linux/module.h:19,
                 from hello.c:2:
/usr/include/asm/alternative_64.h:152: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
/usr/include/asm/alternative_64.h:157: error: storage class specified for parameter 'text_poke'
In file included from /usr/include/asm/bitops.h:4,
                 from /usr/include/linux/bitops.h:17,
                 from /usr/include/linux/thread_info.h:33,
                 from /usr/include/linux/preempt.h:9,
                 from /usr/include/linux/percpu.h:4,
                 from /usr/include/asm/local_64.h:4,
                 from /usr/include/asm/local.h:4,
                 from /usr/include/linux/module.h:19,
                 from hello.c:2:
/usr/include/asm/bitops_64.h:33: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
/usr/include/asm/bitops_64.h:50: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
/usr/include/asm/bitops_64.h:68: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
/usr/include/asm/bitops_64.h:84: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
/usr/include/asm/bitops_64.h:90: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
/usr/include/asm/bitops_64.h:110: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
/usr/include/asm/bitops_64.h:128: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
/usr/include/asm/bitops_64.h:145: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
/usr/include/asm/bitops_64.h:161: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
/usr/include/asm/bitops_64.h:179: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
/usr/include/asm/bitops_64.h:193: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
/usr/include/asm/bitops_64.h:212: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
/usr/include/asm/bitops_64.h:232: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
/usr/include/asm/bitops_64.h:244: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
/usr/include/asm/bitops_64.h:263: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
/usr/include/asm/bitops_64.h:283: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
/usr/include/asm/bitops_64.h:288: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
/usr/include/asm/bitops_64.h:305: error: storage class specified for parameter 'find_first_zero_bit'
/usr/include/asm/bitops_64.h:306: error: storage class specified for parameter 'find_next_zero_bit'
/usr/include/asm/bitops_64.h:307: error: storage class specified for parameter 'find_first_bit'
/usr/include/asm/bitops_64.h:308: error: storage class specified for parameter 'find_next_bit'
/usr/include/asm/bitops_64.h:312: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
/usr/include/asm/bitops_64.h:341: error: storage class specified for parameter 'find_next_zero_string'
/usr/include/asm/bitops_64.h:345: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
/usr/include/asm/bitops_64.h:355: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
/usr/include/asm/bitops_64.h:370: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
/usr/include/asm/bitops_64.h:384: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
/usr/include/asm/bitops_64.h:398: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
In file included from /usr/include/linux/thread_info.h:33,
                 from /usr/include/linux/preempt.h:9,
                 from /usr/include/linux/percpu.h:4,
                 from /usr/include/asm/local_64.h:4,
                 from /usr/include/asm/local.h:4,
                 from /usr/include/linux/module.h:19,
                 from hello.c:2:
/usr/include/linux/bitops.h:26: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
/usr/include/linux/bitops.h:34: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
/usr/include/linux/bitops.h:44: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
/usr/include/linux/bitops.h:54: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
/usr/include/linux/bitops.h:64: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
/usr/include/linux/bitops.h:69: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
In file included from /usr/include/linux/percpu.h:6,
                 from /usr/include/asm/local_64.h:4,
                 from /usr/include/asm/local.h:4,
                 from /usr/include/linux/module.h:19,
                 from hello.c:2:
/usr/include/linux/smp.h:11: error: storage class specified for parameter 'cpu_idle'
/usr/include/linux/smp.h:88: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
/usr/include/linux/smp.h:100: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
In file included from /usr/include/linux/string.h:7,
                 from /usr/include/linux/percpu.h:7,
                 from /usr/include/asm/local_64.h:4,
                 from /usr/include/asm/local.h:4,
                 from /usr/include/linux/module.h:19,
                 from hello.c:2:
/usr/include/string.h:40: error: storage class specified for parameter 'memcpy'
/usr/include/string.h:44: error: storage class specified for parameter 'memmove'
/usr/include/string.h:53: error: storage class specified for parameter 'memccpy'
/usr/include/string.h:59: error: storage class specified for parameter 'memset'
/usr/include/string.h:63: error: storage class specified for parameter 'memcmp'
/usr/include/string.h:67: error: storage class specified for parameter 'memchr'
/usr/include/string.h:85: error: storage class specified for parameter 'strcpy'
/usr/include/string.h:89: error: storage class specified for parameter 'strncpy'
/usr/include/string.h:93: error: storage class specified for parameter 'strcat'
/usr/include/string.h:96: error: storage class specified for parameter 'strncat'
/usr/include/string.h:100: error: storage class specified for parameter 'strcmp'
/usr/include/string.h:103: error: storage class specified for parameter 'strncmp'
/usr/include/string.h:107: error: storage class specified for parameter 'strcoll'
/usr/include/string.h:111: error: storage class specified for parameter 'strxfrm'
/usr/include/string.h:131: error: storage class specified for parameter 'strdup'
/usr/include/string.h:168: error: storage class specified for parameter 'strchr'
/usr/include/string.h:171: error: storage class specified for parameter 'strrchr'
/usr/include/string.h:185: error: storage class specified for parameter 'strcspn'
/usr/include/string.h:189: error: storage class specified for parameter 'strspn'
/usr/include/string.h:192: error: storage class specified for parameter 'strpbrk'
/usr/include/string.h:195: error: storage class specified for parameter 'strstr'
/usr/include/string.h:200: error: storage class specified for parameter 'strtok'
/usr/include/string.h:208: error: storage class specified for parameter '__strtok_r'
/usr/include/string.h:212: error: storage class specified for parameter 'strtok_r'
/usr/include/string.h:243: error: storage class specified for parameter 'strlen'
/usr/include/string.h:256: error: storage class specified for parameter 'strerror'
/usr/include/string.h:270: error: storage class specified for parameter 'strerror_r'
/usr/include/string.h:294: error: storage class specified for parameter '__bzero'
/usr/include/string.h:299: error: storage class specified for parameter 'bcopy'
/usr/include/string.h:302: error: storage class specified for parameter 'bzero'
/usr/include/string.h:306: error: storage class specified for parameter 'bcmp'
/usr/include/string.h:310: error: storage class specified for parameter 'index'
/usr/include/string.h:314: error: storage class specified for parameter 'rindex'
/usr/include/string.h:318: error: storage class specified for parameter 'ffs'
/usr/include/string.h:332: error: storage class specified for parameter 'strcasecmp'
/usr/include/string.h:336: error: storage class specified for parameter 'strncasecmp'
/usr/include/string.h:356: error: storage class specified for parameter 'strsep'
In file included from /usr/include/linux/cpumask

Alguém saberia me dizer o que poderia tá acontecendo....

Be.Cool

Alucard...
Eu creio q o erro está nos parametros q vc usou no gcc
eu já li sobre lkm's e normalmente a forma de compilar é a seguinte:

gcc -c -O3 hello.c

Agora se nao der certo eu não sei pois eu uso kurumin linux e ele tbm não cria lkms nem como root :(
tomara q no slack nao seja assim
Até +

A sabedoria está em suas mãos

Alucard

Quote from: "Be.Cool"Alucard...
Eu creio q o erro está nos parametros q vc usou no gcc
eu já li sobre lkm's e normalmente a forma de compilar é a seguinte:

gcc -c -O3 hello.c

Agora se nao der certo eu não sei pois eu uso kurumin linux e ele tbm não cria lkms nem como root :(
tomara q no slack nao seja assim
Até +

Olá Be.Cool bem tentei o comando para compilar mas deu o mesmo erro.
Muito obrigado!

Alucard

Hi,
Consegui fazer funcionar eu reistalei o linux slackware e utilizei o KDevelop para fazer o teste.
Bem o Makefile e o codigo estao abaixo, muito obrigado.
So deixar os dois no mesmo diretorio e digitar make

Makefile
TARGET = module
OBJS = module.o
MDIR = drivers/misc

EXTRA_CFLAGS = -DEXPORT_SYMTAB
CURRENT = $(shell uname -r)
KDIR = /lib/modules/$(CURRENT)/build
PWD = $(shell pwd)
DEST = /lib/modules/$(CURRENT)/kernel/$(MDIR)

obj-m      := $(TARGET).o

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

$(TARGET).o: $(OBJS)
$(LD) $(LD_RFLAG) -r -o $@ $(OBJS)

ifneq (,$(findstring 2.4.,$(CURRENT)))
install:
su -c "cp -v $(TARGET).o $(DEST) && /sbin/depmod -a"
else
install:
su -c "cp -v $(TARGET).ko $(DEST) && /sbin/depmod -a"
endif

clean:
-rm -f *.o *.ko .*.cmd .*.flags *.mod.c

-include $(KDIR)/Rules.make

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

MODULE_DESCRIPTION("My kernel module");
MODULE_AUTHOR("Danilo (root@alucard)");
MODULE_LICENSE("$LICENSE$");

static int testemodule_init_module(void)
{
printk( KERN_DEBUG "Module init\n" );
return 0;
}

static void testemodule_exit_module(void)
{
printk( KERN_DEBUG "Module exit\n" );
}

module_init(testemodule_init_module);
module_exit(testemodule_exit_module);