Q:

build-in.o creation in many driver folders

I was building a kernel with my custom drivers . after a successful build i found many build-in.o files.Can anybody elaborate how these end up here. I can only suspect these are related to higher level makefiles.

A:

built-in.o files are the compiled product of each directory target of the kernel that is not built as a module.
See Documentation/kbuild/makefiles.txt

Each subdirectory has a kbuild Makefile which carries out the commands passed down from above. The kbuild Makefile uses information
    from the .config file to construct various file lists used by kbuild
    to build any built-in or modular targets.
--- 3.1 Goal definitions

    Goal definitions are the main part (heart) of the kbuild Makefile.
    These lines define the files to be built, any special compilation
    options, and any subdirectories to be entered recursively.

    The most simple kbuild makefile contains one line:

    Example:
            obj-y += foo.o

    This tells kbuild that there is one object in that directory, named
    foo.o. foo.o will be built from foo.c or foo.S.

    If foo.o shall be built as a module, the variable obj-m is used.
    Therefore the following pattern is often used:

    Example:
            obj-$(CONFIG_FOO) += foo.o

    $(CONFIG_FOO) evaluates to either y (for built-in) or m (for module).
    If CONFIG_FOO is neither y nor m, then the file will not be compiled
    nor linked.

--- 3.2 Built-in object goals - obj-y
    The kbuild Makefile specifies object files for vmlinux
    in the $(obj-y) lists.  These lists depend on the kernel
    configuration.

    Kbuild compiles all the $(obj-y) files.  It then calls
    "$(LD) -r" to merge these files into one built-in.o file.
    built-in.o is later linked into vmlinux by the parent Makefile.

