欢迎来到天天文库
浏览记录
ID:21905418
大小:876.00 KB
页数:15页
时间:2018-10-25
《linux内核模块课程设计》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Linux课程设计项目名称:内核模块编程姓名:*****班级:计算机*班学号:2008****指导教师:**日期:2011.6.19—2011.6.2415目录一.课程设计目的2二.任务描述2三.选题原因2四、准备阶段3五.整体思路8六.程序代码8七.遇到的问题12八.测试结果13九.总结1515一.课程设计目的通过课程设计对操作系统基本原理进行更深入的认识,以Linux为具体研究对象,分析理解操作系统底层实现,综合利用已学知识与技术,就Linux操作系统各功能方面进行模拟或实现二.任务描述编写proc文件系统相关的内核模块:设计一个模块,该模块功能是列出系统中所
2、有内核线程的程序名、PID号和进程状态。再设计一个带参数的模块,参数为进程的PID号,功能是列出进程的家族信息,包括父进程、兄弟进程和子进程的程序名、PID号。三.选题原因学习操作系统时,没有把内核这一块学好,所以想借此机会加强对操作系统底层的理解。四、准备阶段看到此题时不知道proc文件的作用,对内核的概念也很模糊,并且错误的以为内核利用一些命令来调用进程呢。很多东西都不理解,所以首先是看书上网逐一进行学习。下面是查找的一些资料。1.关于linux内核编程书本上有详细介绍并且也比较好理解。首先把书上例题演示了一遍,对模块编程就掌握的差不多了。模块是具有独立功能的
3、程序,它可以被单独编译,但不能独立运行。它在运行时被链接到内核作为内核的一部分在内核空间运行,这与运行在用户空间的进程是不同的。模块通常由一组函数和数据结构组成,用来实现一种文件系统、一个驱动程序或其他内核上层的功能。应用程序与内核模块程序的比较$sN[_H;`1o7f0C语言应用程序LUPA开源社区#t)VsE+s7T 内核模块程序LUPA开源社区1~
4、-CX*C*U%s"q4L1p15使用函数LUPA开源社区g(`Dc'hD Libc库LUPA开源社区)l-KY5V:e4[5b 内核函数7sizK)O*n0运行空间aWx7
5、`h0 用户空间LUPA开源社区#IwYfTV+H 内核空间$~?k(eu7HQY4I0运行权限!e{O;ba`8X#H0 普通用户LUPA开源社区:X}AJ%A4u 超级用户LUPA开源社区W7P!MUbMLP入口函数&xBJ(H:B[H0 main()LUPA开源社区;fC.Uo6F%erH@8H module_init()4fRQVjKZ~M6F0出口函数LUPA开源社区2r)}v0Q%wWI exit()LUPA开源社区cSr,o/Vzi module_exit()LUP
6、A开源社区v%K$IgD$j5[?(a编译LUPA开源社区h%NymUZ2qt!A Gcc–cLUPA开源社区@3_;M[[+@ Makefile连接+H(iBf.w$v7J0 GccLUPA开源社区&wZKg!o&L insmodLUPA开源社区Egc0EyC6OW运行LUPA开源社区*o_$&`G 直接运行LUPA开源社区'o!LK-Qo#dmD insmodsS#HOn`v0调试LUPA开源社区uT-Q;kd7x Gdb~X.hw~dP]0kdbug,kdb,kgdb等LUP
7、A开源社区T?o#F.H;m(Bg2.编译工具make:Make工具通过一个称为Makefile的文件来完成并自动维护编译工作。课本上有提供一个超级通用的Makefile,此文件要与模块在同一个文件夹下。ifneq($(KERNELRELEASE),)obj-m+=nullparam.oelsePWD:=$(shellpwd)KVER:=$(shelluname-r)KDIR:=/lib/modules/$(KVER)/buildall:$(MAKE)-C$(KDIR)M=$(PWD)clean:rm-rf*.o*.mod.c*.ko*.symvers*.o
8、rder*.markersendifKERNELRELEASE是在内核源码的顶层Makefile中定义的一个变量,在第一次读取执行此Makefile时,KERNELRELEASE没有被定义,15所以make将读取执行else之后的内容。如果make的目标是clean,直接执行clean操作,然后结束。当make的目标为all时,-C$(KDIR)指明跳转到内核源码目录下读取那里的Makefile;M=$(PWD)表明然后返回到当前目录继续读入、执行当前的Makefile。当从内核源码目录返回时,KERNELRELEASE已被被定义,kbuild也被启动去解析kbu
9、ild语法
此文档下载收益归作者所有