Ik ben het boek "Linux Device drivers" van O'Reilly aan het doornemen om m'n eerste eigen linux driver te kunnen maken.
In het boek staat een beetje code van een Hello_world-driver.
Nou moet ik de code bouwen en een .mod.o en een .ko file krijgen, maar dat lukt me niet.
als ik gewoon gcc aanroep krijg ik dit:
rode@rode-laptop:~/Desktop/drivers/Hello world$ gcc ./Hello.c
./Hello.c:1:24: error: linux/init.h: No such file or directory
./Hello.c:2:26: error: linux/module.h: No such file or directory
./Hello.c:3: error: expected declaration specifiers or ‘...’ before string constant
./Hello.c:3: warning: data definition has no type or storage class
./Hello.c: In function ‘hello_init’:
./Hello.c:7: error: ‘KERN_ALERT’ undeclared (first use in this function)
./Hello.c:7: error: (Each undeclared identifier is reported only once
./Hello.c:7: error: for each function it appears in.)
./Hello.c:7: error: expected ‘)’ before string constant
./Hello.c: In function ‘hello_exit’:
./Hello.c:13: error: ‘KERN_ALERT’ undeclared (first use in this function)
./Hello.c:13: error: expected ‘)’ before string constant
./Hello.c: At top level:
./Hello.c:16: warning: data definition has no type or storage class
./Hello.c:16: warning: parameter names (without types) in function declaration
./Hello.c:17: warning: data definition has no type or storage class
./Hello.c:17: warning: parameter names (without types) in function declaration
ook met dit commando krijg ik zo goed als dezelfde meldingen:
rode@rode-laptop:~/Desktop/drivers/Hello world$ gcc -DMODULE -D__KERNEL__ -O6 -c Hello.c
en van een andere site had ik dit commando gevist, maar ook dat werkte net:
rode@rode-laptop:~/Desktop/drivers/Hello world$ make -C /usr/src/linux-headers-2.6.29.3-rode/ SUBDIRS=$PWD Hello.c
make: Entering directory `/usr/src/linux-headers-2.6.29.3-rode'
/usr/src/linux-headers-2.6.29.3-rode/arch/x86/Makefile:41: /usr/src/linux-headers-2.6.29.3-rode/arch/x86/Makefile_32.cpu: No such file or directory
make: *** No rule to make target `/usr/src/linux-headers-2.6.29.3-rode/arch/x86/Makefile_32.cpu'. Stop.
make: Leaving directory `/usr/src/linux-headers-2.6.29.3-rode'
wat doe ik fout??
PS: de code is:
#include <linux/init.h>
#include <linux/module.h>
MODULE_License("Dual BSD/GPL");
static int hello_init(void)
{
printk(KERN_ALERT "Hello world\n");
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT "Goodbye, cruel world\n");
}
module_init(hello_init);
module_exit(hello_exit);