
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 present 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.
	'module_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_MODULEVERSIONING 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 fron 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.

