Linux简单的内核模块插入

Linux简单的内核模块插入

试了《操作系统课程设计》里面的代码。
VMware 15
linux-4.16.10
1.简单的内核插入helloworld
helloworld.c

#define MODULE
#include

int init_module(void)
{
	printk("<1>Hello World!\n");
	return 0;
}

void cleanup_module(void)
{
	printk("<1>GoodBye!\n");
}

MODULE_LICENSE("GPL");

Makefile

TARGET = helloworld
PWD :=$(shell pwd)
KVER ?=$(shell uname -r)
KDIR := /lib/modules/$(KVER)/build
obj-m += $(TARGET).o
default:
	make -C $(KDIR) M=$(PWD) modules

insmod helloworld.ko 插入
rmmod helloworld 移除
书上的是printf(“<1>Hello World!\n”)和printf(“<1>GoodBye!\n”),在插入模块之后就能显示输出Hello World和GoodBye。但可能是内核版本的原因,在插入和删除模块后没有这个效果,所以用了dmesg | tail命令查看是否成功。
在这里插入图片描述
在这里插入图片描述
2.多个源文件合并到一个内核模块中
编写start,c

#include
#include

int init_module()
{
	printk("Hello World!\n");
	return 0;
}
MODULE_LICENSE("GPL");

stop.c

#define _NO_VERSION_
#include
#include

void cleanup_module()
{
	printk("Bye!\n");
}
MODULE_LICENSE("GPL");

Makefile

TARGET = helloworld
PWD :=$(shell pwd)
KVER ?=$(shell uname -r)
KDIR := /lib/modules/$(KVER)/build
obj-m += $(TARGET).o
$(TARGET)-y := start.o stop.o
default:
	make -C $(KDIR) M=$(PWD) modules

insmod helloworld.ko 插入
rmmod helloworld 移除
dmesg | tail 查看
在这里插入图片描述
在这里插入图片描述

你可能感兴趣的:(linux)