2005-02-04 19:19:16

by Rahul Jain

[permalink] [raw]
Subject: How to add source files in kernel

Hi All,

I am trying to add 2 new files (a .h and a .c) in the kernel. I copied my
.h file in /include/linux and .c in /net/core. I then made the
following change to the Makefile in /net/core.

obj-y := sock.o skbuff.o iovec.o datagram.o scm.o split_helper.o

where split_helper.o is for the .c file that I am adding.

The kernel recompilation went without any problems. I wrote loadable
module programs that can access the functions defined in .c. When I try to
install these modules, they came back with the following error

/sbin/insmod x.o
x.o: unresolved symbol enqueue_sfi
x.o: unresolved symbol init_skbuff_list
x.o: unresolved symbol get_head_sfi
x.o: unresolved symbol search_sfi
x.o: unresolved symbol enqueue_skbuff_list
x.o: unresolved symbol init_head_sfi
x.o:
Hint: You are trying to load a module without a GPL compatible license
and it has unresolved symbols. Contact the module supplier for
assistance, only they can help you.

make: *** [install] Error 1

These functions are defined in the .c file and declared with the extern
keyword in the .h file. In my modules I am including the .h file.

Any suggestions on what I might be missing here ?

Thanks,
Rahul.


2005-02-04 20:44:41

by linux-os (Dick Johnson)

[permalink] [raw]
Subject: Re: How to add source files in kernel

On Fri, 4 Feb 2005, Rahul Jain wrote:

> Hi All,
>
> I am trying to add 2 new files (a .h and a .c) in the kernel. I copied my
> .h file in /include/linux and .c in /net/core. I then made the
> following change to the Makefile in /net/core.
>
> obj-y := sock.o skbuff.o iovec.o datagram.o scm.o split_helper.o
>
> where split_helper.o is for the .c file that I am adding.
>
> The kernel recompilation went without any problems. I wrote loadable
> module programs that can access the functions defined in .c. When I try to
> install these modules, they came back with the following error
>
> /sbin/insmod x.o
> x.o: unresolved symbol enqueue_sfi
> x.o: unresolved symbol init_skbuff_list
> x.o: unresolved symbol get_head_sfi
> x.o: unresolved symbol search_sfi
> x.o: unresolved symbol enqueue_skbuff_list
> x.o: unresolved symbol init_head_sfi
> x.o:
> Hint: You are trying to load a module without a GPL compatible license
> and it has unresolved symbols. Contact the module supplier for
> assistance, only they can help you.
>
> make: *** [install] Error 1
>
> These functions are defined in the .c file and declared with the extern
> keyword in the .h file. In my modules I am including the .h file.
>
> Any suggestions on what I might be missing here ?
>
> Thanks,
> Rahul.

MODULE_LICENSE("GPL");

Needs to be in one of your files. This is part of the
"New World Order".

Cheers,
Dick Johnson
Penguin : Linux version 2.6.10 on an i686 machine (5537.79 BogoMips).
Notice : All mail here is now cached for review by Dictator Bush.
98.36% of all statistics are fiction.

2005-02-04 20:44:36

by Luca

[permalink] [raw]
Subject: Re: How to add source files in kernel


Rahul Jain <[email protected]> ha scritto:
> The kernel recompilation went without any problems. I wrote loadable
> module programs that can access the functions defined in .c. When I try to
> install these modules, they came back with the following error
>
> /sbin/insmod x.o
> x.o: unresolved symbol enqueue_sfi
> x.o: unresolved symbol init_skbuff_list
> x.o: unresolved symbol get_head_sfi
> x.o: unresolved symbol search_sfi
> x.o: unresolved symbol enqueue_skbuff_list
> x.o: unresolved symbol init_head_sfi
> x.o:
> Hint: You are trying to load a module without a GPL compatible license
> and it has unresolved symbols. Contact the module supplier for
> assistance, only they can help you.
>
> make: *** [install] Error 1

You forgot the EXPORT for those symbols, add:

EXPORT_SYMBOL(symbol_name);

to .c file. Or you may have exported the symbols as GPL only
(EXPORT_SYMBOL_GPL) and the module which is not licensed under GPL
cannot see them.

Luca
--
Home: http://kronoz.cjb.net
La somma dell'intelligenza sulla terra e` una costante.
La popolazione e` in aumento.

2005-02-07 17:53:48

by Rahul Jain

[permalink] [raw]
Subject: Re: How to add source files in kernel



On Fri, 4 Feb 2005, Kronos wrote:

>
>
>
> Rahul Jain <[email protected]> ha scritto:
> > The kernel recompilation went without any problems. I wrote loadable
> > module programs that can access the functions defined in .c. When I try to
> > install these modules, they came back with the following error
> >
> > /sbin/insmod x.o
> > x.o: unresolved symbol enqueue_sfi
> > x.o: unresolved symbol init_skbuff_list
> > x.o: unresolved symbol get_head_sfi
> > x.o: unresolved symbol search_sfi
> > x.o: unresolved symbol enqueue_skbuff_list
> > x.o: unresolved symbol init_head_sfi
> > x.o:
> > Hint: You are trying to load a module without a GPL compatible license
> > and it has unresolved symbols. Contact the module supplier for
> > assistance, only they can help you.
> >
> > make: *** [install] Error 1
>
> You forgot the EXPORT for those symbols, add:
>
> EXPORT_SYMBOL(symbol_name);
>
> to .c file. Or you may have exported the symbols as GPL only
> (EXPORT_SYMBOL_GPL) and the module which is not licensed under GPL
> cannot see them.
>
> Luca
> --
> Home: http://kronoz.cjb.net
> La somma dell'intelligenza sulla terra e` una costante.
> La popolazione e` in aumento.
>
I added EXPORT_SYMBOL(fn_name) for all the functions that I wanted to
access from my module. I also added MODULE_LICENSE("GPL") to the .c file.
And in the Makefile I added my_file.o to 'export_objs'. However I am still getting
the same error.

Any suggestions ? Are there any resources online which I can read.

Thanks,
Rahul.