一、编写源代码文件helloworld.c
#include <linux/init.h> //所有模块都必须包含的头文件
#include <linux/module.h> //一些宏定义,例如这里的KERN_INFO
#define DRIVER_AUTHOR "[email protected]"
#define DRIVER_DESC "A sample driver"
int __init init_module(void)
{
printk(KERN_INFO "------------Hello world----------\n");//前面的宏表示打印的级别
return 0; //返回非0表示模块初始化失败,无法载入
}
void __exit cleanup_module(void)
{
printk(KERN_INFO "------------hello exit-----------\n");
}
//模块的许可证
MODULE_LICENSE("GPL");
//模块的作者
MODULE_AUTHOR(DRIVER_AUTHOR);
//模块的描述
MODULE_DESCRIPTION(DRIVER_DESC);
二、编写Makefile
ifeq ($(KERNELRELEASE),)
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
all:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
$(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
else
obj-m := helloworld.o
endif
三、编译内核模块
执行make all或make命令,生成helloworld.ko模块。
四、安装内核模块
insmod helloworld.ko
五、查看已安装的内核模块
lsmod
xz@ubuntu2018:~/kernel/helloworld_2$ lsmod
Module Size Used by
helloworld 16384 0
六、查看输出信息
dmesg
[150013.700804] ------------Hello world----------
七、卸载已安装的内核模块
rmmod helloworld