2006-01-04 18:24:00

by anil dahiya

[permalink] [raw]
Subject: makefile for 2.6 kernel

hello
I want to make kernel module dummy.ko using multiple
.c and .h files. In short i am telling .c and .h files
with directory structure

1> dummy.ko should made be using module1.ko and
module2.o (i.e
module2.o uses module1.ko to make dummy.ko)

2> module1.ko made using a1/a1.c & a2/a2.c and both
.c file
use /home/include/a.h
3> module2.o should made using b/b1.c which use
use /home/module2/include/b.h

Suggest me tht should make i make module2.o or
module2.ko and then combine it with module1.o to make
dummy.ko


/home/------
|_ include _
| |
| a.h
|
|___module1_
| |__ a1 ____
| | |
| | a1.c
| |
|__ a2 ____
| | |
| | a2.c
|
|___ moudule2_
| |
| |__include _
| | |
| | b.h
| |___b1__
| |
| b1.c


Looking forward for ur reply
thanks in advance
---- Anil



__________________________________________
Yahoo! DSL ? Something to write home about.
Just $16.99/mo. or less.
dsl.yahoo.com


2006-01-04 18:55:35

by Sam Ravnborg

[permalink] [raw]
Subject: Re: makefile for 2.6 kernel

On Wed, Jan 04, 2006 at 10:23:56AM -0800, anil dahiya wrote:
> hello
> I want to make kernel module dummy.ko using multiple
> .c and .h files. In short i am telling .c and .h files
> with directory structure
>
> 1> dummy.ko should made be using module1.ko and
> module2.o (i.e
> module2.o uses module1.ko to make dummy.ko)

You cannot make a module with a module as input.
It does not make sense.
Either you create a module or you don't.

So you will create following modules:
module1.ko + module2.ko

Alternatively you create one module but using the individual .o files as
input which is more likely what you want - correct?

Then your Kbuild file would look like this:

Kbuild:
obj-m := dummy.o
dummy-y := module1/a1/a1.o
dummy-y += module1/a2/a2.o
dummy-y += module2/b1/b1.o

# Tell where to find .h files
EXTRA_CFLAGS := -I$(src)/include

And to compile your module:
make -C $PATH_TO_KERNEL_SRC M=`pwd`


I assume you already read Documentation/kbuild/modules.txt - otherwise
please do so too.

Please include the source or provide an URL to the src if you need more
help.

Sam



>
> 2> module1.ko made using a1/a1.c & a2/a2.c and both
> .c file
> use /home/include/a.h
> 3> module2.o should made using b/b1.c which use
> use /home/module2/include/b.h
>
> Suggest me tht should make i make module2.o or
> module2.ko and then combine it with module1.o to make
> dummy.ko
>
>
> /home/------
> |_ include _
> | |
> | a.h
> |
> |___module1_
> | |__ a1 ____
> | | |
> | | a1.c
> | |
> |__ a2 ____
> | | |
> | | a2.c
> |
> |___ moudule2_
> | |
> | |__include _
> | | |
> | | b.h
> | |___b1__
> | |
> | b1.c
>
>
> Looking forward for ur reply
> thanks in advance
> ---- Anil
>
>
>
> __________________________________________
> Yahoo! DSL ? Something to write home about.
> Just $16.99/mo. or less.
> dsl.yahoo.com
>
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/

2006-01-06 07:20:30

by Nauman Tahir

[permalink] [raw]
Subject: Re: makefile for 2.6 kernel

On 1/4/06, Sam Ravnborg <[email protected]> wrote:
> On Wed, Jan 04, 2006 at 10:23:56AM -0800, anil dahiya wrote:
> > hello
> > I want to make kernel module dummy.ko using multiple
> > .c and .h files. In short i am telling .c and .h files
> > with directory structure
> >
> > 1> dummy.ko should made be using module1.ko and
> > module2.o (i.e
> > module2.o uses module1.ko to make dummy.ko)
>
> You cannot make a module with a module as input.
> It does not make sense.
> Either you create a module or you don't.
>
> So you will create following modules:
> module1.ko + module2.ko
>
> Alternatively you create one module but using the individual .o files as
> input which is more likely what you want - correct?
>
> Then your Kbuild file would look like this:
>
> Kbuild:
> obj-m := dummy.o
> dummy-y := module1/a1/a1.o
> dummy-y += module1/a2/a2.o
> dummy-y += module2/b1/b1.o
>
> # Tell where to find .h files
> EXTRA_CFLAGS := -I$(src)/include
>
> And to compile your module:
> make -C $PATH_TO_KERNEL_SRC M=`pwd`
>
>
> I assume you already read Documentation/kbuild/modules.txt - otherwise
> please do so too.
>
> Please include the source or provide an URL to the src if you need more
> help.
>
> Sam
>
>
>
> >
> > 2> module1.ko made using a1/a1.c & a2/a2.c and both
> > .c file
> > use /home/include/a.h
> > 3> module2.o should made using b/b1.c which use
> > use /home/module2/include/b.h
> >
> > Suggest me tht should make i make module2.o or
> > module2.ko and then combine it with module1.o to make
> > dummy.ko
> >
> >
> > /home/------
> > |_ include _
> > | |
> > | a.h
> > |
> > |___module1_
> > | |__ a1 ____
> > | | |
> > | | a1.c
> > | |
> > |__ a2 ____
> > | | |
> > | | a2.c
> > |
> > |___ moudule2_
> > | |
> > | |__include _
> > | | |
> > | | b.h
> > | |___b1__
> > | |
> > | b1.c
> >
> >
> > Looking forward for ur reply
> > thanks in advance
> > ---- Anil
> >

hi,
Anil just put the names of your .c files where I have mentioned. Hope
this will work


#START OF MAKEFILE===========================================


TARGET = [Your Driver Name]
OBJS = [Your Driver Name (same as above)].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

$(TARGET)-objs := [Names of your .c files with .o extension] [for
example file1.o file2.o ETC]

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


# END OF MAKEFILE========================================





> >
> >
> > __________________________________________
> > Yahoo! DSL ? Something to write home about.
> > Just $16.99/mo. or less.
> > dsl.yahoo.com
> >
> > -
> > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> > the body of a message to [email protected]
> > 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 [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
>

2006-01-06 15:56:09

by Sam Ravnborg

[permalink] [raw]
Subject: Re: makefile for 2.6 kernel

On Thu, Jan 05, 2006 at 11:20:29PM -0800, Nauman Tahir wrote:

> hi,
> Anil just put the names of your .c files where I have mentioned. Hope
> this will work

Your Makefile try to stay compatible with 2.4 + 2.6.
And this includes a lot of extra stuff that can be removed for 2.6.

So only if the users wants to be compatible with both 2.4 AND 2.6 this
template is usefull.

Sam

2006-01-10 17:44:23

by anil dahiya

[permalink] [raw]
Subject: makefile for 2.6 kernel

Hi Sam
Thanks fop your help ..but my problem is not solved it
...i putting my real problem here below.

1>my fist need is to make module1.ko made using
a1/a1.c , a1/a11.c & a2/a2.c a2/a22.c and all .c file
use /home/include/a.h


2>Now my 2nd need is to make module2.ko using
module1.ko and b/b1.c & b/b11.c (these both .c files
use /home/include/a.h and /home/module2/include/b.h)

In short my directory structure is as:

/home/------
|_ include _
| |
| a.h
|
|___module1_
| |__ a1 ____________
| | | |
| | a1.c a11.c
| |
|__ a2 ___________
| | | |
| | a2.c a22.c
|
|___ moudule2_
| |
| |__include _
| | |
| | b.h
| |___b1________
| | |
| b1.c b11.c


Looking forward for ur reply
thanks in advance
---- Anil


--- anil dahiya <[email protected]> wrote:

> hello
> I want to make kernel module dummy.ko using multiple
> .c and .h files. In short i am telling .c and .h
> files
> with directory structure
>
> 1> dummy.ko should made be using module1.ko and
> module2.o (i.e
> module2.o uses module1.ko to make dummy.ko)
>
> 2> module1.ko made using a1/a1.c & a2/a2.c and both
> .c file
> use /home/include/a.h
> 3> module2.o should made using b/b1.c which use
> use /home/module2/include/b.h
>
> Suggest me tht should make i make module2.o or
> module2.ko and then combine it with module1.o to
> make
> dummy.ko
>
>
> /home/------
> |_ include _
> | |
> | a.h
> |
> |___module1_
> | |__ a1 ____
> | | |
> | | a1.c
> | |
> |__ a2 ____
> | | |
> | | a2.c
> |
> |___ moudule2_
> | |
> | |__include _
> | | |
> | | b.h
> | |___b1__
> | |
> | b1.c
>
>
> Looking forward for ur reply
> thanks in advance
> ---- Anil
>
>
>
> __________________________________________
> Yahoo! DSL ? Something to write home about.
> Just $16.99/mo. or less.
> dsl.yahoo.com
>
>
> --
> Kernelnewbies: Help each other learn about the Linux
> kernel.
> Archive:
> http://mail.nl.linux.org/kernelnewbies/
> FAQ: http://kernelnewbies.org/faq/
>
>




__________________________________________
Yahoo! DSL ? Something to write home about.
Just $16.99/mo. or less.
dsl.yahoo.com

2006-01-10 19:08:04

by Sam Ravnborg

[permalink] [raw]
Subject: Re: makefile for 2.6 kernel

On Tue, Jan 10, 2006 at 09:44:19AM -0800, anil dahiya wrote:
> Hi Sam
> Thanks fop your help ..but my problem is not solved it
> ...i putting my real problem here below.
>
> 1>my fist need is to make module1.ko made using
> a1/a1.c , a1/a11.c & a2/a2.c a2/a22.c and all .c file
> use /home/include/a.h
This was covered in my first response.

>
> 2>Now my 2nd need is to make module2.ko using
> module1.ko and b/b1.c & b/b11.c (these both .c files
> use /home/include/a.h and /home/module2/include/b.h)
This does not make sense. You cannot link in one module
into anohter. And you would not be able to use module1
with module2 loaded due to name clash.

But you can certainly call one module from another module.
You just have to make sure module1 is loaded before module2.

Last time I requested an URL to the source IIRC?

Sam