Linux内核模块固定写法之init_module和cleanup_module

一、编写源代码文件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

猜你喜欢

转载自blog.csdn.net/xiezhi123456/article/details/80028892