Creating a Linux kernel module is a great way to learn how the Linux kernel works. This guide will show you how to create, compile, and load a simple "Hello World" kernel module step by step.
Before we start, make sure you have the following:
Let's start by writing a simple kernel module that prints "Hello, World!" when loaded and "Goodbye, World!" when unloaded.
Create a file named hello.c and add the following code:
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
static int __init hello_init(void) {
printk(KERN_INFO "Hello, World!\n");
return 0;
}
static void __exit hello_exit(void) {
printk(KERN_INFO "Goodbye, World!\n");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Your Name");
MODULE_DESCRIPTION("A simple Hello World module");
MODULE_VERSION("1.0");
Next, we need a Makefile to compile our module. Create a file named Makefile in the same
directory as hello.c and add the following lines:
obj-m += hello.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
Now, we can compile the module using the make command. Open a terminal, navigate to the
directory containing hello.c and Makefile, and run:
make
This will compile hello.c and generate a file named hello.ko, which is the kernel
object file for our module.
To load the module into the kernel, use the insmod command. You need superuser privileges for
this, so prepend sudo:
sudo insmod hello.ko
To check that the module has been loaded, use the lsmod command:
lsmod | grep hello
You should see an entry for hello in the list of loaded modules. You can also check the kernel
log messages to see the output of our module:
dmesg | tail
To unload the module, use the rmmod command:
sudo rmmod hello
Again, check the kernel log messages to see the "Goodbye, World!" message:
dmesg | tail
You have created, compiled, and loaded a simple Linux kernel module.