在Linux中,加载内核模块(Kernel Module)是一种动态扩展内核功能的方式。内核模块是在运行时加载到内核中的代码段,它们可以提供新的功能或硬件支持,而无需重新编译整个内核。
insmod
或modprobe
命令将模块加载到内核中。rmmod
或modprobe -r
命令将模块从内核中卸载。modinfo
命令查看模块的依赖项,并确保它们已加载。dmesg
)以获取错误信息。以下是一个简单的示例,展示如何编写、编译和加载一个内核模块:
hello.c
#include <linux/module.h>
#include <linux/kernel.h>
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Your Name");
MODULE_DESCRIPTION("A simple Hello World Module");
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);
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
sudo insmod hello.ko
dmesg | tail
sudo rmmod hello
dmesg | tail
这将输出“Hello, World!”和“Goodbye, World!”到内核日志中。
领取专属 10元无门槛券
手把手带您无忧上云