准备
需要查看自己的内核版本以备不时之需,命令是uname -r
内核头文件的位置
/usr/src/<内核版本>/include/
创建一个目录用于写hello world内核模块
开始写内核模块
step 1:创建名为testkernel.c的文件
>> vim testkernel.c
step 2:testkernel.c文件内容如下:
#include<linux/module.h>
#include<linux/kernel.h>
#include<linux/init.h>
static int __init lkp_init(void) {
printk("<1>Hello, World! from the kernel space...\n");
return 0;
}
static void __exit lkp_cleanup(void)
{
printk("<1>Good Bye, World! leaving kernel space...\n");
}
module_init(lkp_init); // 注册模块
module_exit(lkp_cleanup); // 注销模块
MODULE_LICENSE("GPL"); //告诉内核该模块具有GNU公共许可证
step 3:编写Makefile
# Makefile 4.0
obj-m := testkernel.o
CURRENT_PATH := $(shell pwd)
LINUX_KERNEL := $(shell uname -r)
LINUX_KERNEL_PATH := /usr/src/linux-headers-$(LINUX_KERNEL)
all:
make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) modules
clean:
make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) clean
step 4:编译
make
make之后生成如下文件:
step 5:安装内核模块
sudo insmod testkernel.ko
step 6:dmesg查看
dmesg
查看结果如下:
step 7:卸载内核模块
sudo rmmod testkernel.ko
step 8:写在内核模块之后查看结果
dmesg
over