Hi Somanath, On Tue, May 22, 2012 at 2:56 AM, somanath sahoo <bapi_mvit2004@xxxxxxxxx> wrote: > Hi, > > As newbie in linux kernel, I would like to understand the concept of > "incremental linking " w.r.t to linux kernel module. Incremental linking is basically just taking some objects files, linking them together to produce a larger object file. The object file still has undefined references. It will also coalesce sections of the same name. The kernel likes to use sections for storing pointers to initcall functions and other things like that. Some people might also call this partial linking. The kernel uses this technique for the main portion of the kernel as well. If you look through your build directory, you will find a whole bunch of built-in.o files. Each one of these is a partially linked object file containing all of the object files from the current directory and built-in.o files from directories below. With kernel modules, there are some special automatically generated C files which also get linked in (IIRC that have a name like foo.mod.c) A kernel module is conceptually identical to a shared library (which is also partially linked and may contain unresolved references). You can do incremental linking by doing: echo "int foo1(void) { return 1; }" > foo1.c echo "int foo2(void) { return 2; }" > foo2.c gcc -c foo1.c gcc -c foo2.c ld -r -o foo.o foo1.o foo2.o You'll now have foo.o which has both foo1.o and foo2.o partially linked together, which you can see by using: nm foo.o -- Dave Hylands Shuswap, BC, Canada http://www.davehylands.com _______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies