Portál AbcLinuxu, 22. července 2025 09:03


Dotaz: Chyba při kompilci modulu

16.7.2006 00:16 diverman | skóre: 32 | blog: život s tučňáčkem
Chyba při kompilci modulu
Přečteno: 99×
Odpovědět | Admin
Ahoj, pokouším se naučit zase něco nového, ale zasekl jsem se na problému. Kompiluji modul podle tohoto článku.

hello.c:
#ifdef MODULE

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

EXPORT_NO_SYMBOLS;

/* Protos */
static int hello_init(void) __init;
static void hello_exit(void) __exit;

/* Module Lifecycle */
module_init(hello_init);
module_exit(hello_exit);

static int __init hello_init(void)
{
        printk(KERN_INFO "Hello world !!!\n");
        return 0;
}

static void __exit hello_exit(void)
{
	printk(KERN_INFO "Bye Bye !!!\n");
        return;
}

#endif /* MODULE */
Makefile:

all: hello.o
hello.o: hello.c
	gcc -Wall -O2 -I /usr/src/linux/include -D__KERNEL__ -DMODULE -o hello.o -c  hello.c
chyba:
gcc -Wall -O2 -I /usr/src/linux/include -D __KERNEL__ -D MODULE -o hello.o -c  hello.c
In file included from /usr/src/linux/include/asm/processor.h:18,
                 from /usr/src/linux/include/asm/thread_info.h:17,
                 from /usr/src/linux/include/linux/thread_info.h:21,
                 from /usr/src/linux/include/linux/preempt.h:10,
                 from /usr/src/linux/include/linux/spinlock.h:50,
                 from /usr/src/linux/include/linux/capability.h:45,
                 from /usr/src/linux/include/linux/sched.h:7,
                 from /usr/src/linux/include/linux/module.h:10,
                 from hello.c:4:
/usr/src/linux/include/asm/system.h: In function '__set_64bit_var':
/usr/src/linux/include/asm/system.h:210: warning: dereferencing type-punned pointer will break strict-aliasing rules
/usr/src/linux/include/asm/system.h:210: warning: dereferencing type-punned pointer will break strict-aliasing rules
In file included from /usr/src/linux/include/linux/rwsem.h:27,
                 from /usr/src/linux/include/asm/semaphore.h:42,
                 from /usr/src/linux/include/linux/sched.h:20,
                 from /usr/src/linux/include/linux/module.h:10,
                 from hello.c:4:
/usr/src/linux/include/asm/rwsem.h: In function '__down_read':
/usr/src/linux/include/asm/rwsem.h:105: error: syntax error before 'KBUILD_BASENAME'
/usr/src/linux/include/asm/rwsem.h: In function '__down_write':
/usr/src/linux/include/asm/rwsem.h:157: error: syntax error before 'KBUILD_BASENAME'
/usr/src/linux/include/asm/rwsem.h: In function '__up_read':
/usr/src/linux/include/asm/rwsem.h:194: error: syntax error before 'KBUILD_BASENAME'
/usr/src/linux/include/asm/rwsem.h:188: warning: unused variable 'tmp'
/usr/src/linux/include/asm/rwsem.h: In function '__up_write':
/usr/src/linux/include/asm/rwsem.h:220: error: syntax error before 'KBUILD_BASENAME'
/usr/src/linux/include/asm/rwsem.h: In function '__downgrade_write':
/usr/src/linux/include/asm/rwsem.h:245: error: syntax error before 'KBUILD_BASENAME'
In file included from /usr/src/linux/include/linux/sched.h:20,
                 from /usr/src/linux/include/linux/module.h:10,
                 from hello.c:4:
/usr/src/linux/include/asm/semaphore.h: In function 'down':
/usr/src/linux/include/asm/semaphore.h:105: error: syntax error before 'KBUILD_BASENAME'
/usr/src/linux/include/asm/semaphore.h: In function 'down_interruptible':
/usr/src/linux/include/asm/semaphore.h:130: error: syntax error before 'KBUILD_BASENAME'
/usr/src/linux/include/asm/semaphore.h: In function 'down_trylock':
/usr/src/linux/include/asm/semaphore.h:155: error: syntax error before 'KBUILD_BASENAME'
/usr/src/linux/include/asm/semaphore.h: In function 'up':
/usr/src/linux/include/asm/semaphore.h:179: error: syntax error before 'KBUILD_BASENAME'
In file included from /usr/src/linux/include/asm/smp.h:18,
                 from /usr/src/linux/include/linux/smp.h:19,
                 from /usr/src/linux/include/linux/sched.h:26,
                 from /usr/src/linux/include/linux/module.h:10,
                 from hello.c:4:
/usr/src/linux/include/asm/mpspec.h:6:25: error: mach_mpspec.h: není souborem ani adresářem
In file included from /usr/src/linux/include/asm/smp.h:18,
                 from /usr/src/linux/include/linux/smp.h:19,
                 from /usr/src/linux/include/linux/sched.h:26,
                 from /usr/src/linux/include/linux/module.h:10,
                 from hello.c:4:
/usr/src/linux/include/asm/mpspec.h: At top level:
/usr/src/linux/include/asm/mpspec.h:8: error: 'MAX_MP_BUSSES' undeclared here (not in a function)
/usr/src/linux/include/asm/mpspec.h:23: error: 'MAX_IRQ_SOURCES' undeclared here (not in a function)
In file included from /usr/src/linux/include/linux/smp.h:19,
                 from /usr/src/linux/include/linux/sched.h:26,
                 from /usr/src/linux/include/linux/module.h:10,
                 from hello.c:4:
/usr/src/linux/include/asm/smp.h:77:26: error: mach_apicdef.h: není souborem ani adresářem
In file included from /usr/src/linux/include/linux/smp.h:19,
                 from /usr/src/linux/include/linux/sched.h:26,
                 from /usr/src/linux/include/linux/module.h:10,
                 from hello.c:4:
/usr/src/linux/include/asm/smp.h: In function 'hard_smp_processor_id':
/usr/src/linux/include/asm/smp.h:81: warning: implicit declaration of function 'GET_APIC_ID'
hello.c: At top level:
hello.c:7: warning: type defaults to 'int' in declaration of 'EXPORT_NO_SYMBOLS'
hello.c:7: warning: data definition has no type or storage class
make: *** [hello.o] Error 1
uname -r: 2.6.16.20, /usr/src/linux->/usr/src/linux-2.6.16.20
deb http://ftp.cz.debian.org/debian jessie main contrib non-free
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

16.7.2006 01:02 Marble | skóre: 27 | blog: marble
Rozbalit Rozbalit vše Re: Chyba při kompilci modulu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Moduly do jádra 2.6 by se měly kompilovat přímo pomocí makefile jádra. Více info je v linux/Documentation/kbuild/modules.txt. (Nejsem si úplně jistý, že je to příčina uvedených chyb, ale rozhodně je lepší kompilovat uvedeným způsobem.)

EXPORT_NO_SYMBOLS je v 2.6 standardní chování, takže netřeba psát (ale asi nevadí), #include <linux/kernel.h> mám pocit do modulu nepatří (ale opět nevím, jestli to vadí).

Jinak asi nejlepší dokumentace (hlavně jedna z mála aktuálních) je knížka Linux Device Drivers (třetí vydání, pro 2.6 jádro) od O'Reilly. Dá se stáhnout jako PDFko (odkaz nevím, ale předpokládám, že půjde jednoduše najít; pokud ne, můžu někam hodit).
16.7.2006 02:23 diverman | skóre: 32 | blog: život s tučňáčkem
Rozbalit Rozbalit vše Re: Chyba při kompilci modulu
deb http://ftp.cz.debian.org/debian jessie main contrib non-free
Luk avatar 23.7.2006 17:27 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
Rozbalit Rozbalit vše Re: Chyba při kompilci modulu
Česky je to popsáno v mém článku v LinuxExpresu. Makefile je vcelku primitivní, ale má poněkud jinou podobu než u běžných programů.
Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.