
In this document you will find information about:
- how to build external modules
- how to make your module use the kbuild infrastructure
- how kbuild will install a kernel
- how to install modules in a non-standard location

=== Table of Contents

	=== 1 Introduction
	=== 2 How to build external modules
	   --- 2.1 Building external modules
	   --- 2.2 Available targets
	   --- 2.3 Available options
	   --- 2.4 Preparing the kernel tree for module build
	   --- 2.5 Building separate files for a module
	=== 3. Example commands
	=== 4. Creating a kbuild file for an external module
	=== 5. Include files
	   --- 5.1 How to include files from the kernel include dir
	   --- 5.2 External modules using an include/ dir
	   --- 5.3 External modules using several directories
	=== 6. Module installation
	   --- 6.1 INSTALL_MOD_PATH
	   --- 6.2 INSTALL_MOD_DIR
	=== 7. Module versioning & Module.symvers
	   --- 7.1 Symbols from the kernel (vmlinux + modules)
	   --- 7.2 Symbols and external modules
	   --- 7.3 Symbols from another external module
	=== 8. Tips & Tricks
	   --- 8.1 Testing for CONFIG_FOO_BAR



=== 1. Introduction

kbuild includes functionality for building modules both
within the kernel source tree and outside the kernel source tree.
The latter is usually referred to as external or "out-of-tree"
modules and is used both during development and for modules that
are not planned to be included in the kernel tree.

What is covered within this file is mainly information to authors
of modules. The author of an external module should supply
a makefile that hides most of the complexity, so one only has to type
'make' to build the module. A complete example will be presented in
chapter 4, "Creating a kbuild file for an external module".


=== 2. How to build external modules

kbuild offers functionality to build external modules, with the
prerequisite that there is a pre-built kernel available with full source.
A subset of the targets available when building the kernel is available
when building an external module.

--- 2.1 Building external modules

	Use the following command to build an external module:

		make -C <path-to-kernel> M=`pwd`

	For the running kernel use:

		make -C /lib/modules/`uname -r`/build M=`pwd`

	For the above command to succeed, the kernel must have been
	built with modules enabled.

	To install the modules that were just built:

		make -C <path-to-kernel> M=`pwd` modules_install

	More complex examples will be shown later, the above should
	be enough to get you started.

--- 2.2 Available targets

	$KDIR refers to the path to the kernel source top-level directory

	make -C $KDIR M=`pwd`
		Will build the module(s) located in current directory.
		All output files will be located in the same directory
		as the module source.
		No attempts are made to update the kernel source, and it is
		a precondition that a successful make has been executed
		for the kernel.

	make -C $KDIR M=`pwd` modules
		The modules target is implied when no target is given.
		Same functionality as if no target was specified.
		See description above.

	make -C $KDIR M=`pwd` modules_install
		Install the external module(s).
		Installation default is in /lib/modules/<kernel-version>/extra,
		but may be prefixed with INSTALL_MOD_PATH - see separate
		chapter.

	make -C $KDIR M=`pwd` clean
		Remove all generated files for the module - the kernel
		source directory is not modified.

	make -C $KDIR M=`pwd` help
		help will list the available target when building external
		modules.

--- 2.3 Available options:

	$KDIR refers to the path to the kernel source top-level directory

	make -C $KDIR
		Used to specify where to find the kernel source.
		'$KDIR' represent the directory where the kernel source is.
		Make will actually change directory to the specified directory
		when executed but change back when finished.

	make -C $KDIR M=`pwd`
		M= is used to tell kbuild that an external module is
		being built.
		The option given to M= is the directory where the external
		module (kbuild file) is located.
		When an external module is being built only a subset of the
		usual targets are available.

	make -C $KDIR SUBDIRS=`pwd`
		Same as M=. The SUBDIRS= syntax is kept for backwards
		compatibility.

--- 2.4 Preparing the kernel tree for module build

	To make sure the kernel contains the information required to
	build external modules the target 'modules_prepare' must be used.
	'modules_prepare' exists solely as a simple way to prepare
	a kernel source tree for building external modules.
	Note: modules_prepare will not build Module.symvers even if
	CONFIG_MODVERSIONS is set. Therefore a full kernel build
	needs to be executed to make module versioning work.

--- 2.5 Building separate files for a module
	It is possible to build single files which are part of a module.
	This works equally well for the kernel, a module and even for
	external modules.
	Examples (module foo.ko, consist of bar.o, baz.o):
		make -C $KDIR M=`pwd` bar.lst
		make -C $KDIR M=`pwd` bar.o
		make -C $KDIR M=`pwd` foo.ko
		make -C $KDIR M=`pwd` /


=== 3. Example commands

This example shows the actual commands to be executed when building
an external module for the currently running kernel.
In the example below, the distribution is supposed to use the
facility to locate output files for a kernel compile in a different
directory than the kernel source - but the examples will also work
when the source and the output files are mixed in the same directory.

# Kernel source
/lib/modules/<kernel-version>/source -> /usr/src/linux-<version>

# Output from kernel compile
/lib/modules/<kernel-version>/build -> /usr/src/linux-<version>-up

Change to the directory where the kbuild file is located and execute
the following commands to build the module:

	cd /home/user/src/module
	make -C /usr/src/`uname -r`/source            \
	        O=/lib/modules/`uname-r`/build        \
	        M=`pwd`

Then, to install the module use the following command:

	make -C /usr/src/`uname -r`/source            \
	        O=/lib/modules/`uname-r`/build        \
	        M=`pwd`                               \
		modules_install

If you look closely you will see that this is the same command as
listed before - with the directories spelled out.

The above are rather long commands, and the following chapter
lists a few tricks to make it all easier.


=== 4. Creating a kbuild file for an external module

kbuild is the build system for the kernel, and external modules
must use kbuild to stay compatible with changes in the build system
and to pick up the right flags to gcc etc.

The kbuild file used as input shall follow the syntax described
in Documentation/kbuild/makefiles.txt. This chapter will introduce a few
more tricks to be used when dealing with external modules.

In the following a Makefile will be created for a module with the
following files:
	8123_if.c
	8123_if.h
	8123_pci.c
	8123_bin.o_shipped	<= Binary blob

--- 4.1 Shared Makefile for module and kernel

	An external module always includes a wrapper Makefile supporting
	building the module using 'make' with no arguments.
	The Makefile provided will most likely include additional
	functionality such as test targets etc. and this part shall
	be filtered away from kbuild since it may impact kbuild if
	name clashes occurs.

	Example 1:
		--> filename: Makefile
		ifneq ($(KERNELRELEASE),)
		# kbuild part of makefile
		obj-m  := 8123.o
		8123-y := 8123_if.o 8123_pci.o 8123_bin.o

		else
		# Normal Makefile

		KERNELDIR := /lib/modules/`uname -r`/build
		all::
			$(MAKE) -C $(KERNELDIR) M=`pwd` $@

		# Module specific targets
		genbin:
			echo "X" > 8123_bin.o_shipped

		endif

	In example 1, the check for KERNELRELEASE is used to separate
	the two parts of the Makefile. kbuild will only see the two
	assignments whereas make will see everything except the two
	kbuild assignments.

	In recent versions of the kernel, kbuild will look for a file named
	Kbuild and as second option look for a file named Makefile.
	Utilising the Kbuild file makes us split up the Makefile in example 1
	into two files as shown in example 2:

	Example 2:
		--> filename: Kbuild
		obj-m  := 8123.o
		8123-y := 8123_if.o 8123_pci.o 8123_bin.o

		--> filename: Makefile
		KERNELDIR := /lib/modules/`uname -r`/build
		all::
			$(MAKE) -C $(KERNELDIR) M=`pwd` $@

		# Module specific targets
		genbin:
			echo "X" > 8123_bin_shipped


	In example 2, we are down to two fairly simple files and for simple
	files as used in this example the split is questionable. But some
	external modules use Makefiles of several hundred lines and here it
	really pays off to separate the kbuild part from the rest.
	Example 3 shows a backward compatible version.

	Example 3:
		--> filename: Kbuild
		obj-m  := 8123.o
		8123-y := 8123_if.o 8123_pci.o 8123_bin.o

		--> filename: Makefile
		ifneq ($(KERNELRELEASE),)
		include Kbuild
		else
		# Normal Makefile

		KERNELDIR := /lib/modules/`uname -r`/build
		all::
			$(MAKE) -C $KERNELDIR M=`pwd` $@

		# Module specific targets
		genbin:
			echo "X" > 8123_bin_shipped

		endif

	The trick here is to include the Kbuild file from Makefile, so
	if an older version of kbuild picks up the Makefile, the Kbuild
	file will be included.

--- 4.2 Binary blobs included in a module

	Some external modules needs to include a .o as a blob. kbuild
	has support for this, but requires the blob file to be named
	<filename>_shipped. In our example the blob is named
	8123_bin.o_shipped and when the kbuild rules kick in the file
	8123_bin.o is created as a simple copy off the 8213_bin.o_shipped file
	with the _shipped part stripped of the filename.
	This allows the 8123_bin.o filename to be used in the assignment to
	the module.

	Example 4:
		obj-m  := 8123.o
		8123-y := 8123_if.o 8123_pci.o 8123_bin.o

	In example 4, there is no distinction between the ordinary .c/.h files
	and the binary file. But kbuild will pick up different rules to create
	the .o file.


=== 5. Include files

Include files are a necessity when a .c file uses something from other .c
files (not strictly in the sense of C, but if good programming practice is
used). Any module that consists of more than one .c file will have a .h file
for one of the .c files.

- If the .h file only describes a module internal interface, then the .h file
  shall be placed in the same directory as the .c files.
- If the .h files describe an interface used by other parts of the kernel
  located in different directories, the .h files shall be located in
  include/linux/ or other include/ directories as appropriate.

One exception for this rule is larger subsystems that have their own directory
under include/ such as include/scsi. Another exception is arch-specific
.h files which are located under include/asm-$(ARCH)/*.

External modules have a tendency to locate include files in a separate include/
directory and therefore need to deal with this in their kbuild file.

--- 5.1 How to include files from the kernel include dir

	When a module needs to include a file from include/linux/, then one
	just uses:

		#include <linux/modules.h>

	kbuild will make sure to add options to gcc so the relevant
	directories are searched.
	Likewise for .h files placed in the same directory as the .c file.

		#include "8123_if.h"

	will do the job.

--- 5.2 External modules using an include/ dir

	External modules often locate their .h files in a separate include/
	directory although this is not usual kernel style. When an external
	module uses an include/ dir then kbuild needs to be told so.
	The trick here is to use either EXTRA_CFLAGS (take effect for all .c
	files) or CFLAGS_$F.o (take effect only for a single file).

	In our example, if we move 8123_if.h to a subdirectory named include/
	the resulting Kbuild file would look like:

		--> filename: Kbuild
		obj-m  := 8123.o

		EXTRA_CFLAGS := -Iinclude
		8123-y := 8123_if.o 8123_pci.o 8123_bin.o

	Note that in the assignment there is no space between -I and the path.
	This is a kbuild limitation:  there must be no space present.

--- 5.3 External modules using several directories

	If an external module does not follow the usual kernel style, but
	decides to spread files over several directories, then kbuild can
	handle this too.

	Consider the following example:

	|
	+- src/complex_main.c
	|   +- hal/hardwareif.c
	|   +- hal/include/hardwareif.h
	+- include/complex.h

	To build a single module named complex.ko, we then need the following
	kbuild file:

	Kbuild:
		obj-m := complex.o
		complex-y := src/complex_main.o
		complex-y += src/hal/hardwareif.o

		EXTRA_CFLAGS := -I$(src)/include
		EXTRA_CFLAGS += -I$(src)src/hal/include


	kbuild knows how to handle .o files located in another directory -
	although this is NOT recommended practice. The syntax is to specify
	the directory relative to the directory where the Kbuild file is
	located.

	To find the .h files, we have to explicitly tell kbuild where to look
	for the .h files. When kbuild executes, the current directory is always
	the root of the kernel tree (argument to -C) and therefore we have to
	tell kbuild how to find the .h files using absolute paths.
	$(src) will specify the absolute path to the directory where the
	Kbuild file are located when being build as an external module.
	Therefore -I$(src)/ is used to point out the directory of the Kbuild
	file and any additional path are just appended.

=== 6. Module installation

Modules which are included in the kernel are installed in the directory:

	/lib/modules/$(KERNELRELEASE)/kernel

External modules are installed in the directory:

	/lib/modules/$(KERNELRELEASE)/extra

--- 6.1 INSTALL_MOD_PATH

	Above are the default directories, but as always, some level of
	customization is possible. One can prefix the path using the variable
	INSTALL_MOD_PATH:

		$ make INSTALL_MOD_PATH=/frodo modules_install
		=> Install dir: /frodo/lib/modules/$(KERNELRELEASE)/kernel

	INSTALL_MOD_PATH may be set as an ordinary shell variable or as in the
	example above, can be specified on the command line when calling make.
	INSTALL_MOD_PATH has effect both when installing modules included in
	the kernel as well as when installing external modules.

--- 6.2 INSTALL_MOD_DIR

	When installing external modules they are by default installed to a
	directory under /lib/modules/$(KERNELRELEASE)/extra, but one may wish
	to locate modules for a specific functionality in a separate
	directory. For this purpose, one can use INSTALL_MOD_DIR to specify an
	alternative name to 'extra'.

		$ make INSTALL_MOD_DIR=gandalf -C KERNELDIR \
			M=`pwd` modules_install
		=> Install dir: /lib/modules/$(KERNELRELEASE)/gandalf


=== 7. Module versioning & Module.symvers

Module versioning is enabled by the CONFIG_MODVERSIONS tag.

Module versioning is used as a simple ABI consistency check. The Module
versioning creates a CRC value of the full prototype for an exported symbol and
when a module is loaded/used then the CRC values contained in the kernel are
compared with similar values in the module. If they are not equal, then the
kernel refuses to load the module.

Module.symvers contains a list of all exported symbols from a kernel build.

--- 7.1 Symbols from the kernel (vmlinux + modules)

	During a kernel build, a file named Module.symvers will be generated.
	Module.symvers contains all exported symbols from the kernel and
	compiled modules. For each symbols, the corresponding CRC value
	is stored too.

	The syntax of the Module.symvers file is:
		<CRC>       <Symbol>           <module>
	Sample:
		0x2d036834  scsi_remove_host   drivers/scsi/scsi_mod

	For a kernel build without CONFIG_MODVERSIONS enabled, the crc
	would read: 0x00000000

	Module.symvers serves two purposes:
	1) It lists all exported symbols both from vmlinux and all modules
	2) It lists the CRC if CONFIG_MODVERSIONS is enabled

--- 7.2 Symbols and external modules

	When building an external module, the build system needs access to
	the symbols from the kernel to check if all external symbols are
	defined. This is done in the MODPOST step and to obtain all
	symbols, modpost reads Module.symvers from the kernel.
	If a Module.symvers file is present in the directory where
	the external module is being built, this file will be read too.
	During the MODPOST step, a new Module.symvers file will be written
	containing all exported symbols that were not defined in the kernel.

--- 7.3 Symbols from another external module

	Sometimes, an external module uses exported symbols from another
	external module. Kbuild needs to have full knowledge on all symbols
	to avoid spitting out warnings about undefined symbols.
	Two solutions exist to let kbuild know all symbols of more than
	one external module.
	The method with a top-level kbuild file is recommended but may be
	impractical in certain situations.

	Use a top-level Kbuild file
		If you have two modules: 'foo' and 'bar', and 'foo' needs
		symbols from 'bar', then one can use a common top-level kbuild
		file so both modules are compiled in same build.

		Consider following directory layout:
		./foo/ <= contains the foo module
		./bar/ <= contains the bar module
		The top-level Kbuild file would then look like:

		#./Kbuild: (this file may also be named Makefile)
			obj-y := foo/ bar/

		Executing:
			make -C $KDIR M=`pwd`

		will then do the expected and compile both modules with full
		knowledge on symbols from both modules.

	Use an extra Module.symvers file
		When an external module is built, a Module.symvers file is
		generated containing all exported symbols which are not
		defined in the kernel.
		To get access to symbols from module 'bar', one can copy the
		Module.symvers file from the compilation of the 'bar' module
		to the directory where the 'foo' module is built.
		During the module build, kbuild will read the Module.symvers
		file in the directory of the external module and when the
		build is finished, a new Module.symvers file is created
		containing the sum of all symbols defined and not part of the
		kernel.

=== 8. Tips & Tricks

--- 8.1 Testing for CONFIG_FOO_BAR

	Modules often need to check for certain CONFIG_ options to decide if
	a specific feature shall be included in the module. When kbuild is used
	this is done by referencing the CONFIG_ variable directly.

		#fs/ext2/Makefile
		obj-$(CONFIG_EXT2_FS) += ext2.o

		ext2-y := balloc.o bitmap.o dir.o
		ext2-$(CONFIG_EXT2_FS_XATTR) += xattr.o

	External modules have traditionally used grep to check for specific
	CONFIG_ settings directly in .config. This usage is broken.
	As introduced before, external modules shall use kbuild when building
	and therefore can use the same methods as in-kernel modules when
	testing for CONFIG_ definitions.

