欢迎来到天天文库
浏览记录
ID:15616854
大小:28.00 KB
页数:7页
时间:2018-08-04
《linux课程设计报告 编写proc文件系统相关的内核模块new》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、Linux课程设计报告学院:信息学院专业班级:08级网络二班姓名:学号:【实验目的】1.通过课程设计对操作系统基本原理进行更深入的认识,以Linux为具体研究对象,分析理解操作系统底层实现,综合利用已学知识与技术,就Linux操作系统各功能方面进行模拟或实现2.了解内核模块结构3.熟练内核模块编程,练习使用makefile【实验要求】编写proc文件系统相关的内核模块:设计一个模块,该模块功能是列出系统中所有内核线程的程序名、PID号和进程状态。再设计一个带参数的模块,参数为进程的PID号,功能是列出进程的家族信息,包括父进程、兄弟进程和子进程的程序名、PID号。【实验步骤】1.编写
2、list.c模块2.编写Makefile3.make编译模块4.安装模块sudoinsmodlist.ko5.查看系统信息dmesg6.退出模块sudormmodlist7.编写list2.c模块8.编写Makefile9.make编译模块10.安装模块sudoinsmodlist2.ko11.查看系统信息dmesg12.退出模块sudormmodlist2【代码实现】1.list.c#include#include#include#include#inclu
3、de#defineMETHOD1staticintlist_init(void){structtask_struct*p;intcount;char*method;count=0;/*下面这些初始化完全是为了消除编译时的警告信息*/p=NULL;method=NULL;method="for_each_process";printk("Themethodis%s",method);printk(KERN_ALERT"进程号t父进程t状态t名称");#ifMETHOD==1for_each_process(p){count++;printk(
4、KERN_ALERT"%dt%dt%ldt%s",p->pid,p->parent->pid,p->state,p->comm);}#endifprintk("系统当前共%d个进程!!",count);return0;}staticvoidlist_exit(void){printk(KERN_ALERT"GOODBYE!!");}module_init(list_init);module_exit(list_exit);MODULE_AUTHOR("Along");MODULE_LICENSE("GPL");makefileifneq($(KERNELRELEASE)
5、,)obj-m:=list.oelseKERNELDIR?=/lib/modules/$(shelluname-r)/buildPWD:=$(shellpwd)default:$(MAKE)-C$(KERNELDIR)M=$(PWD)moduleselean:rm-rf*.o*.mod.c*.ko*.syvmersendif2.list2.c#include#include#include#include#include#defi
6、neMETHOD1staticintpidd=1;module_param(pidd,int,S_IRUGO
7、S_IWUSR);EXPORT_SYMBOL(pidd);staticint__initlist_init(void){structtask_struct*task,*p,*ppid;structlist_head*pos;intcount;char*method;count=0;/*下面这些初始化完全是为了消除编译时的警告信息*/p=NULL;task=NULL;pos=NULL;method=NULL;task=&init_task;method="for_each_pr
8、ocess";printk("Themethodis%s",method);printk(KERN_ALERT"进程号t状态t名称t父进程t父进程名");#ifMETHOD==1for_each_process(p){count++;if(pidd==p->pid){printk(KERN_ALERT"%dt%ldt%st%dt%s",p->pid,p->state,p->comm,p->parent->pid,p->paren
此文档下载收益归作者所有