Ubuntu 18.04上创建内核模块

一、说明

笔者在这里将介绍怎样在Ubuntu 18.04 64位机上创建简单的内核模块。参考书籍为《Operating.System》英文版

二、实验步骤

  • 编写内核模块代码simple.c,内容如下
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>

//模块加载时运行此函数
int simple_init(void)                           //模块入口点没有传入参数(void)
{
    printk(KERN_INFO "Loading Module\n");
    return 0;                                   //模块入口点必须返回int,0:成功  !0:失败
}

//模块删除时运行此函数
void simple_exit(void)                          模块离开点没有传入参数(void)
{
    printk(KERN_INFO "Removing Module\n");
}

//用于注册模块入口点和出口点的宏
module_init(simple_init);                       //模块入口点
module_exit(simple_exit);                       //模块离开点
MODULE_LICENSE("GPL");                          //模块证书
MODULE_DESCRIPTION("Simple Module");            //模块描述
MODULE_AUTHOR("SGG");                           //模块作者

  • 编写Makefile,请严格注意tab,确保您的编辑器不会将tab替换为空格
obj-m := simple.o

all:
	make -C /usr/src/linux-4.18.14/ M=$(shell pwd) modules
clean:
	make -C /usr/src/linux-4.18.14/ M=$(shell pwd) clean
  • 开始编译,命令为
sudo make

注:这个过程很快,大概1s左右

三、内核模块基本操作

备注:由于内核日志缓冲区填充快速,所以定期清除缓冲区通常是必要的。可以使用下面命令,笔者这里首先清空了内核日志缓冲区

sudo dmesg -C
  • 加载模块
sudo insmod simple.ko

当模块正常载入,根据模块代码,应该会执行simple_init函数。使用dmesg查看内核日志缓冲区,如下图

  • 判断模块是否载入
sudo lsmod

  • 删除模块
sudo rmmod simple

当模块正常卸载,根据模块代码,应该会执行simple_exit函数。使用dmesg查看内核日志缓冲区,如下图

猜你喜欢

转载自blog.csdn.net/qq_36290650/article/details/85648835