好文档 - 专业文书写作范文服务资料分享网站

操作系统实验 - 内核模块实现 - 图文 

天下 分享 时间: 加入收藏 我要投稿 点赞

实 验 报 告

实验题目:内核模块实现

姓名: 学号: 课程名称: 所在学院: 专业班级: 任课教师:

操作系统 信息科学与工程学院

计算机

实验项目名称 内核模块实现 一、实验目的与要求: 1、熟悉Linux内核模块实现过程。 2、掌握内核模块实现的方法,在Ubuntu系统上完成指定功能的内核模块。 二、实验设备及软件: 一台PC(Linux系统) 三、实验方法(原理、流程图) 1、模块的定义 模块是具有独立功能的程序它可以被单独编译,但不能独立运行。它在运行时被链接到内核作为内核的一部分在内核空间运行,这与运行在用户空间的进程是不同的。模块通常由一组函数和数据结构组成,用来实现一种文件系统、一个驱动程序或其他内核上层的功能。 2、内核模块的相关操作命令 a)加载内核模块:insmod b)卸载内核模块:rmmod c)查看内核模块:lsmod(可用grep筛选) 3、查看日志操作命令 dmesg 查看日志 dmesg|head -10 看前10行 dmesg|tail -10 看后10行 4、模块函数编写基本操作 static int __init 初始函数名(void)//初始化函数 { return 0; } static void __exit 退出函数名 (void)//退出函数 { } module_init(初始函数名); module_exit(退出函数名 );

MODULE_LICENSE(\模块通用公共许可证

5、makefile文件内容基本格式 ifneq ($(KERNELRELEASE),) obj-m:=xxx.o else

KDIR:=/lib/modules/$(shell uname -r)/build PWD:=$(shell pwd) all:

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

rm -rf *.o *.ko *.mod.c *.cmd *.markers *.order *.symvers .tmp_versions

endif

说明:

1) KERNELRELEASE是在内核源码的顶层Makefile中定义的一个变量。 ifneq($(KERNELRELEASE),) 判断该变量是否为空。

2) KDIR := /lib/modules/$(shell uname -r)/build 是给KDIR这个变量赋值,值为当前linux运行的内核源码。

3) 当make的目标为all时,-C $(KDIR) 指明跳转到内核源码目录下读取那里的Makefile;M=$(PWD)表明然后返回到当前目录继续读入、执行当前的Makefile。当从内核源码目录返回时,KERNELRELEASE已被被定义,kbuild也被启动去解析kbuild语法的语句,make将继续读取else之前的内容。

4) 我们可以把上述的Makefile文件作为一个模板,只需要改动obj-m := hello.o这条语句就可以了:obj-m=XXX.o。

四、实验过程、步骤及内容 实验内容: 1、输出内核时间的简单内核模块。 2、实现数据包过滤功能的简单内核模块(至少有数据包丢弃功能,事先熟悉Netfilter Hook),或简单的字符设备设备驱动模块,或其他有意义的内核功能模块。 实验步骤: (一)输出内核时间的简单内核模块 1、编写实现该模块的程序,并将该文件命名为time.c #include #include #include #include struct timespec tm; static int __init time_init(void)//模块初始函数 { printk(KERN_INFO\显示当前的时间 tm = current_kernel_time(); printk(KERN_INFO\return 0; } static void __exit time_exit(void)//模块退出函数 { printk(KERN_INFO\当卸载模块后的提示 } module_init(time_init); module_exit(time_exit); MODULE_LICENSE(\ 2、编辑Makefile文件: ifneq ($(KERNELRELEASE),) obj-m:=time.o else KDIR:=/lib/modules/$(shell uname -r)/build PWD:=$(shell pwd) all: make -C $(KDIR) M=$(PWD) modules clean: rm -rf *.o *.ko *.mod.c *.cmd *.markers *.order *.symvers .tmp_versions Endif 3、将以上两个文件(time.c和Makefile)放在同一个目录mykernel下。 4、进入管理员权限,cd到目录下。输入如下命令: 5、输入make命令以编译: 6、编译成功后,输入insmod命令安装自己的内核模块: 7、查看内核模块: 可以看到自己的time模块安装成功。 8、输入dmesg命令,找到自己的内核模块,查看日志: 也可以用dmesg |grep time快速筛选到自己的内核模块。

操作系统实验 - 内核模块实现 - 图文 

实验报告实验题目:内核模块实现姓名:学号:课程名称:所在学院:专业班级:任课教师:操作系统信息科学与工程学院计算机实验项目名称内核模块实现一、实验目的与要求:1、熟悉Lin
推荐度:
点击下载文档文档为doc格式
08azt7c0o51jxus0hkxz44s0w0d4ij00w3p
领取福利

微信扫码领取福利

微信扫码分享