实验三-添加内核模块.doc

实验三-添加内核模块.doc

ID:56777172

大小:598.50 KB

页数:9页

时间:2020-07-09

实验三-添加内核模块.doc_第1页
实验三-添加内核模块.doc_第2页
实验三-添加内核模块.doc_第3页
实验三-添加内核模块.doc_第4页
实验三-添加内核模块.doc_第5页
资源描述:

《实验三-添加内核模块.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、实验三添加内核模块一、实验目的:学习Linux模块的基本概念和原理,学习内核模块编程的基本技术,利用内核模块编程访问进程描述符,操作内核的基本数据结构,加深对进程的理解;理解proc文件系统的作用,学习proc文件的创建方法,掌握这种用户态和核心态通信的方法。二、实验平台:虚拟机:VMWare9操作系统:Ubuntu12.04编辑器:Gedit

2、Vi三、实验内容:(1)阅读内核模块实例hello.c,掌握内核模块的主要构成;阅读Makefile文件,理解内核模块的编译方法及执行过程;掌握模块安装、卸载,以及查看模块信息的方法。查看模块信息:卸载模块:(2)设计一个模块

3、,功能是列出系统中所有内核进程的程序名、PID号和进程状态。主要步骤:阅读内核源代码,了解进程描述符task_struct中与本实验有关的成员项,以及访问进程队列的宏for_each_process;编写readprocess模块,获取进程信息;修改Makefile文件,编译、安装模块,查看输出信息;查看模块信息,卸载模块。readprocess.c:#include#include#include#include#include

4、it_task.h>//初始化函数staticinthello_init(void){structtask_struct*p;p=NULL;p=&init_task;printk(KERN_ALERT"名称t进程号t状态t优先级t父进程号t");for_each_process(p){if(p->mm==NULL){//内核线程的mm成员为空printk(KERN_ALERT"%st%dt%ldt%d",p->comm,p->pid,p->state,p->normal_prio,p->parent->pid);}}return0;}//清理函数s

5、taticvoidhello_exit(void){printk(KERN_ALERT"goodbye!");}//函数注册module_init(hello_init);module_exit(hello_exit);//模块许可申明MODULE_LICENSE("GPL");Makefile代码:ifneq($(KERNELRELEASE),)obj-m:=readprocess.oelseKDIR:=/lib/modules/$(shelluname-r)/buildPWD:=$(shellpwd)default:$(MAKE)-C$(KDIR)M=$(PW

6、D)modulesclean:$(MAKE)-C$(KDIR)M=$(PWD)cleanendif将process.c和Makefile文件放在同一个文件夹下使用make函数生成后缀为.ko文件:使用命令载入模块,如图:使用lsmod命令显示载入系统的模块,如图:(3)利用内核模块编程,在/proc目录下用自己的学号创建一个目录,如/proc/201300834101然后在学号目录下创建一个processinfo文件,如/proc/201300834101/processinfo,此文件为只读文件,用于显示所有内核进程的程序名、PID号和进程状态。主要步骤:修改(2)

7、中readprocess模块,在模块初始化函数中创建目录及proc文件,并定义产生proc文件内容的函数(获取进程信息);在卸载模块函数中删除相应的proc文件及目录;修改Makefile文件,编译、安装模块;Processinfo.c:#include//初始化模块#include//创建进程信息入口#include//初始进程#include//序列文件#include//内存分配释放#inclu

8、de//下一个进程charmodname[]="201608030317";structtask_struct*task;inttaskcounts=0;//全局进程变量staticvoid*my_seq_start(structseq_file*m,loff_t*pos){///printk(KERN_INFO"Invokestart");//可以输出调试信息if(*pos==0)//表示遍历开始{task=&init_task;//遍历开始的记录地址return&task;//返回一个非零值表示开始

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。