====== Linux - Kernel - Kernel Drivers - Hello World ====== A basic Linux Kernel Driver. ---- ===== Create a C program ===== vi hello.c and populate as #include #include MODULE_LICENSE("Dual BSD/GPL"); static int hello_init(void) { printk(KERN_ALERT "Hello, world\n"); return 0; } static void hello_exit(void) { printk(KERN_ALERT "Goodbye, cruel world\n"); } module_init(hello_init); module_exit(hello_exit); Save the file. ---- ===== Create a Makefile ===== vi Makefile and populate as: # To build modules outside of the kernel tree, we run "make" # in the kernel source tree; the Makefile these then includes this # Makefile once again. # This conditional selects whether we are being included from the # kernel Makefile or not. ifeq ($(KERNELRELEASE),) # Assume the source tree is where the running kernel was built # You should set KERNELDIR in the environment if it's elsewhere KERNELDIR ?= /lib/modules/$(shell uname -r)/build # The current directory is passed to sub-makes as argument PWD := $(shell pwd) modules: $(MAKE) -C $(KERNELDIR) M=$(PWD) modules modules_install: $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install clean: rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions .PHONY: modules modules_install clean else # called from kernel build system: just declare what our modules are obj-m := hello.o hellop.o endif ---- ===== Compile the module ===== make displays: make -C /lib/modules/4.15.0-72-generic/build M=/home/peter/prog/kernel/helloworld modules make[1]: Entering directory '/usr/src/linux-headers-4.15.0-72-generic' Building modules, stage 2. MODPOST 1 modules make[1]: Leaving directory '/usr/src/linux-headers-4.15.0-72-generic' ---- ===== Check the module ===== ls hello,ko displays: hello.ko ---- ===== Load the module ===== sudo insmod hello.ko **NOTE:** This will not display anything. ---- ===== Check if the module is loaded ===== lsmod returns: Module Size Used by hello 16384 0 .... ---- ===== Check message from module ===== As mentioned above when the module was loaded it did not display that "Hello World" message. This message is actually written to the system log. tail /var/log/syslog returns: Dec 14 17:05:19 peter-bigmamba kernel: [74429.517770] Hello, world ---- ===== Remove the module ===== sudo rmmod hello.ko ----