Re: problems compiling kernel module

From: Fernando Barsoba
Date: Wed Apr 19 2006 - 11:00:10 EST


Thanks a lot for your makefile. It worked nicely. I wasn't sure if the question was too basic for this mailing list.

Thanks also for Arjan's reference to http://fxr.watson.org/fxr/source/Documentation/kbuild/makefiles.txt?v=linux-2.6.9

I am new in kernel programming...

tnx,
Fernando

From: Erik Mouw <erik@xxxxxxxxxxxxxxxxxxxxx>
To: Fernando Barsoba <fbarsoba@xxxxxxxxxxx>
CC: linux-kernel@xxxxxxxxxxxxxxx
Subject: Re: problems compiling kernel module
Date: Wed, 19 Apr 2006 16:24:42 +0200

On Wed, Apr 19, 2006 at 09:44:08AM -0400, Fernando Barsoba wrote:
> I am really stuck with this thing.. For couple of days i have been
> trying to compile a kernel module. I have been following the info in
> http://www.faqs.org/docs/kernel/x204.html. But no success... i
> recompiled the latest kernel version, and i think i trying to compile
> the module against the source code for that kernel.. however, strange
> errors appear.

That way just doesn't work. Use kbuild instead of brewing your own
Makefiles. See http://lwn.net/Articles/21823/ .

> And here are the files:
>
> Code:
>
> /* hello-1.c - The simplest kernel module.
> */ #include <linux/module.h> /* Needed by all modules

Not necessary, IIRC.

> */ #include <linux/kernel.h> /* Needed for KERN_ALERT */

OK...

> int init_module(void) {
> printk("<1>Hello world 1.\n"); // A non 0 return means init_module

... so why don't you use KERN_ALERT instead of <1>?

Make that printk(KERN_ALERT "Hello, world!\n");

> failed; module can't be loaded.
> return 0;
> }
>
> void cleanup_module(void) {
> printk(KERN_ALERT "Goodbye world 1.\n");
> }
>
>
> Code:
>
> TARGET := hello-1
> WARN := -W -Wall -Wstrict-prototypes -Wmissing-prototypes
> INCLUDE := -isystem /lib/modules/`uname -r`/build/include
> CFLAGS := -O2 -DMODULE -D__KERNEL__ ${WARN} ${INCLUDE} CC := gcc
> ${TARGET}.o: ${TARGET}.c
> .PHONY: clean
> clean: rm -rf {TARGET}.o

You want something like:

ifneq ($(KERNELRELEASE),)
obj-m := hello.o
else
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)

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


Erik

--
+-- Erik Mouw -- www.harddisk-recovery.com -- +31 70 370 12 90 --
| Lab address: Delftechpark 26, 2628 XH, Delft, The Netherlands
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/