编写Linux内核模块的基本步骤如下:
gcc、make等编译工具。sudo apt-get install linux-headers-$(uname -r)。hello.c。#include <linux/module.h> // Needed by all modules
#include <linux/kernel.h> // Needed for KERN_INFO
#include <linux/init.h> // Needed for the macros
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Your Name");
MODULE_DESCRIPTION("A simple example Linux module.");
MODULE_VERSION("0.1");
static int __init hello_start(void) {
printk(KERN_INFO "Hello, World!\n");
return 0; // Non-zero return means that the module couldn't be loaded.
}
static void __exit hello_end(void) {
printk(KERN_INFO "Goodbye, World!\n");
}
module_init(hello_start);
module_exit(hello_end);
Makefile来编译模块。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
make命令来编译模块。make
insmod命令加载编译好的模块。sudo insmod hello.ko
lsmod命令查看已加载的模块。lsmod | grep hello
dmesg命令查看内核日志,确认模块的输出信息。dmesg | tail
rmmod命令卸载模块。sudo rmmod hello
.o和.ko文件。rm -f *.o *.ko
printk函数在内核日志中输出调试信息。通过以上步骤,你可以编写、编译、加载和卸载一个简单的Linux内核模块。随着经验的积累,你可以编写更复杂的内核模块,并处理更多的内核接口和功能。