== 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 [[http://lwn.net/images/pdf/LDD3/ch02.pdf|Linux Device Drivers, Building and Running Modules]], and [[http://lwn.net/Articles/21823/|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] }}}