不正经的保姆级西电软工操作系统实验课教程 ==== 专题三 内核模块

1.本文仅仅是西电软件工程OS实验课的教程,原则上只接受关于本实验相关的问题

2.代码原则上仅仅作为参考,如果被查出因为抄袭而导致不良的后果,本人不负任何责任。

3.文章中的代码是经过整合而得到的,如有侵权,请及时联系

4.关于实验系统 本人使用的是Ubuntu 20.04 linux内核最低5.4.x vmware 15.x

5.接上条,如果你按照了这个配置还是出现了问题,那么可以at我

===============================================================

$ 0.99

本文参考自 https://blog.youkuaiyun.com/qq_36290650/article/details/85648835 侵权必删

在前面的章节中,花费最多时间是在编译上,或许你一遍就编译通过,或许你今天也还没得到正确的结果,不过这都不重要,因为专题三理论上来讲和前面没啥关系…

专题三是模块部分,你可以理解为操作系统在编译完成后留了一些钩子函数,这些钩子可以动态加载你写的程序(而不需要重新编译(好吧其实我是乱说的))

于是我又给你们当工具人了

$1.0 题目一:内核模块加载/卸载

$1.1写内核

随便一个目录下(我这里是放到桌面了)

mkdir simplemodule # 创建目录
cd simplemodule/ # 进入目录
sudo gedit simple.c # 开始写内核

在这里插入图片描述

#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>
 
//模块加载时运行此函数
int simple_init(void)                           //模块入口点没有传入参数(void)
{
    printk(KERN_INFO "xxxxxxx Now Loading Module\n");
    return 0;                                   //模块入口点必须返回int,0:成功  !0:失败
}
 
//模块删除时运行此函数
void simple_exit(void)                         
{
    printk(KERN_INFO "xxxxxxx Removing Module\n");
}
 

module_init(simple_init);                       //模块入口点
module_exit(simple_exit);                       //模块离开点
MODULE_LICENSE("GPL");                          //模块证书
MODULE_DESCRIPTION("Simple Module");            //模块描述
MODULE_AUTHOR("tiantian");                           //模块作者

module_init(simple_init) 和 module_exit(simple_exit) 代表着装载和卸载这个模块要执行的函数

之后

sudo gedit Makefile
obj-m:=simple.o
PWD:= $(shell pwd)
KERNELDIR:= /lib/modules/$(shell uname -r)/build
EXTRA_CFLAGS= -O0

all:
	make -C $(KERNELDIR)  M=$(PWD) modules
clean:
	make -C $(KERNELDIR) M=$(PWD) clean

Makefile里面写这些 ↑

然后进行模块编译

sudo make

在这里插入图片描述
没报错基本上就成功了

1.2 装载&卸载模块

sudo insmod simple.ko
dmesg

你的屏幕上会打印装载的信息
在这里插入图片描述
你也可以看看是否装载成功了没有

sudo lsmod

在这里插入图片描述
这就是我们装入的模块
然后卸载

sudo rmmod simple.ko
dmesg

在这里插入图片描述
理论上只会出现一条Removing 但是因为我们没有清 所以会打印之前的
你只要执行 sudo dmesg -C 就可以了

啥时候截图我就8用说了吧…

$1.1 题目二:内核模块调用函数

等会写 先吃饭…
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值