How do I compile a Linux kernel module?
You have to write a Makefile. The Makefile is a standard one and depends on the kernel version. Do not try to make your own Makefile, use the Linux kernel infrastructure, as explained below.
Standard Makefile for 4.0 and later kernels
obj-m := name_of_module.o clean-files := *.o *.ko *.mod.c
and then use:
cd path/to/external_module make -C /path/to/kernel/source M=$PWD
Standard Makefile for 2.6 kernels
obj-m := name_of_module.o all: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules clean: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
For more informations, see Linux Device Drivers, Building and Running Modules, and Driver porting: compiling external modules.
Standard Makefile for 2.4 (and <=) kernels
TARGET := module_name INCLUDE := -I/lib/modules/`uname -r`/build/include CFLAGS := -O2 -Wall -DMODULE -D__KERNEL__ -DLINUX CC := gcc ${TARGET}.o: ${TARGET}.c $(CC) $(CFLAGS) ${INCLUDE} -c ${TARGET}.c
Once the module is compiled, you can load it with the following command :
insmod module.[ko|o]