Linux内核模块课程设计
Linux课程设计
项目名称: 内核模块编程 姓
班 学 日
目录
一.课程设计目的 ...................................................................................................................................................... 3
二.任务描述 ........................................................................................................................................................... 3
三.选题原因四、准备阶段五.整体思路六.程序代码七.遇到的问题八.测试结果 ......................................................................................................................................................... 13
九.总结 ................................................................................................................................................................. 15
一.课程设计目的
通过课程设计对操作系统基本原理进行更深入的认识,以Linux为具体研究对象,分析理解操作系统底层实现,综合利用已学知识与技术,就Linux操作系统各功能方面进行模拟或实现
二.任务描述
编写proc文件系统相关的内核模块: 设计一个模块,该模块功能是列出系统中所有内核线程的程序名、PID号和PID号,功能是列出进程PID号。
三.选题原因
统底层的理解。
四、准备阶段
文件的作用,对内核的概念也很模糊,并且错误上网逐一进行学习。下面是查找的一些资料。
1.关于linux内核编程书本上有详细介绍并且也比较好理解。首先把书上例题演示了一遍,对模块编程就掌握的差不多了。
模块是具有独立功能的程序,它可以被单独编译,但不能独立运行。它在运行时被链接到内核作为内核的一部分在内核空间运行,这与运行在用户空间的进程是不同的。模块通常由一组函数和数据结构组成,用来实现一种文件系统、一个驱动程序或其他内核上层的功能。
应用程序与内核模块程序的比较
C语言应用程序
内核模块程序
使用函数 运行空间 运行权限 入口函数 出口函数 编译 连接 运行 调试
Libc库 用户空间 普通用户 main() exit() Gcc –c Gcc 直接运行 Gdb
内核函数 内核空间 超级用户 module_init() module_exit() insmod 等
2. 编译工具make : Makefile 的文件来完成并自动维护编译工作。
Makefile,此文件要与模块在同一个文件
夹下。
obj-m += nullparam.o else
PWD := $(shell pwd)
KVER := $(shell uname -r)
KDIR := /lib/modules/$(KVER)/build all:
$(MAKE) -C $(KDIR) M=$(PWD) clean:
rm -rf *.o *.mod.c *.ko *.symvers *.order *.markers endif
KERNELRELEASE是在内核源码的顶层Makefile中定义的一个变量,在第一次读取执行此Makefile时,KERNELRELEASE没有被定义, 所以make将读取
执行else之后的内容。如果make的目标是clean,直接执行clean操作,然后结束。当make的目标为all时,-C $(KDIR) 指明跳转到内核源码目录下读取那里的Makefile;M=$(PWD) 表明然后返回到当前目录继续读入、执行当前的Makefile。当从内核源码目录返回时,KERNELRELEASE已被被定义,kbuild也被启动去解析kbuild语法的语句,make将继续读取else之前的内容。else之前的内容为kbuild语法的语句, 指明模块源码中各文件的依赖关系,以及要生成的目标模块名。obj-m += nullparam.o表示编译连接后将生成nullparam.o模块
2.用户级线程:指不需要内核支持而在用户程序中实现的线程,其不依赖于操作系统核心,应用进程利用线程库提供创建、同步、调度和管理线程的函数来控制用户线程。
内核线程:指需要内核的参与,由内核完成线程的调度。其依赖于操3.proc文件系统:proc即processproc文件系统只是存放进程的相关信息。但现在的/proc息和配置信息。
/proc从正在运行的内核中读取。
基于这种原因,/proc一方面,用户可以从/proc和配置。
是一种特殊的文件系统,即虚拟文件系统。这里的虚拟是强调文件系统下的所有文件都存在于内存中而不是磁盘上。也就是说/proc文件系统只占用内存空间,而不占用系统的外存空间。
/proc 虚拟文件系统可以广泛地用来报告内核的信息,也可以用来进行动态配置。它对于驱动程序和模块编程来说都是非常完整的。 4. proc_dir_entry结构:
proc文件系统的组织结构是proc_dir_entry结构,所有属于proc文件系统的文件,都对应一个proc_dir_entry结构,这个结构在proc_fs.h中定义。 struct proc_dir_entry {
//用来唯一标志proc_dir_entry结构的节点号 unsigned short low_ino; unsigned short namelen; //这个proc文件的名字。 const char *name;
//该proc文件的模式, 第一部分是文件的类型,第二部分是该文件的权限。 mode_t mode; nlink_t nlink; uid_t uid; gid_t gid;
//即我们使用“ls”命令时,所显示出的文件大小。 unsigned long size;
struct inode_operations * proc_iops; /* 是一个inode_operations结构,其中设置了针对这个proc索引节点的操作函数,这样,我们就可以针对不同类型的proc文件,提供不同的方法,以完成不同的工作。*/
struct file_operations * proc_fops; /*是一个file_operations结构,其中放置了针对这个proc文件的操作函数,我们可以把对proc文件的读写操作,放在这个结构中,用以实现对/proc*/ get_info_t *get_info; /*当用户向proc可以使用这个函数向用户返回数据。*/ struct module *owner;
使用这些链表,在内存中,proc_dir_entry */
void *data;
atomic_t count; /*proc_dir_entry结构的countint deleted; /*这是一个删除标志,当我们调用remove_proc_entry函数要删除一个proc_dir_entry时,如果发现该结构还在使用,就会设置该标志并且退出。 */
kdev_t rdev;
/* read_proc_t *read_proc 和write_proc_t *write_proc:这两个函数提供了对proc文件进行操作的简单接口。我们知道,对于proc文件,我们可以从中读取核心数据,还可以向其中写入数据,因此,对于一些功能比较简单的proc文件,我们只要实现这两个函数(或其中之一)即可,而不用设置inode_operations结构,这样,整个操作比较简单。实际上,我们会在后面的分析中看到,在注册proc文件的时候,会自动为proc_fops设置一个缺省的file_operations结构,如果我们只实现了上面提到的两个读写操作,而没有设置自己file_operations结构,那么,会由缺省的inode_operations结构中的
读写函数检查调用这两个函数。*/ };
5.函数create_proc_entry,由它创建并注册proc文件。struct proc_dir_entry *create_proc_entry(const char *name, mode_t mode, struct proc_dir_entry *parent) { }/*函数内容不必详细了解,只要会调用此函数即可。name为要创建的文件名,mode为创建文件的属性;parent指向该文件父目录的指针,如果创建的虚拟文件位于/proc下,则这个参数为NULL(表示 /proc 根目录)。*/
…… 此处隐藏:6380字,全部文档内容请下载后查看。喜欢就下载吧 ……相关推荐:
- [实用文档]李践-有效提升销售的12大黄金法则8-大
- [实用文档]党支部换届工作方案
- [实用文档]2013年下期电子商务专业部宣传工作计划
- [实用文档]方庄一矿通风、钻探绩效工资考核管理办
- [实用文档]项目一 认识企业物流认识企业物流
- [实用文档]MBI_Display_产品蓝图规画
- [实用文档]北京市建筑业劳务作业人员普法维权培训
- [实用文档]锅炉燃烧调整与运行优化
- [实用文档]4支付结算业务的核算
- [实用文档]米什金_货币金融学_第9版各章学习指导
- [实用文档]水泥混凝土路面硬化工程施工组织设计
- [实用文档]钢筋工程安全技术交底书
- [实用文档]关于公布华中师范大学本科毕业论文
- [实用文档]太原市园林绿化施工合同范本 2
- [实用文档]周日辅导 初中英语分类复习单项选择题(
- [实用文档]第四章 文化经纪人的管理形式 第二节
- [实用文档]学宪法讲宪法竞赛题库
- [实用文档]《数值计算方法》期末考试模拟试题二
- [实用文档]爱词霸学英语:每日一句( 十月)
- [实用文档]2014年国家公务员面试:无领导小组讨论
- 新课程主要理念和教学案例分析汇编(24
- 英国人的快乐源于幸福的家庭生活
- 七年级上册第一次月考模拟数学试卷
- 真丝及仿真丝的种类有哪些?
- 【最新】华师大版八年级数学下册第十六
- 高中英语3500个必背单词
- 我可以接受失败,但我不能接受放弃!
- 最近更新沪科版八年级物理上册期末试卷
- 绿化工作先进乡镇事迹材料
- 鲁教版九年级上册思想品德教学计划
- 英语音标的分类
- 地下室底板无梁楼盖与普通梁板结构形式
- 美容师黄金销售话术
- 雅思写作满分作文备考方法
- 血清甲状腺激素测定与高频彩色多普勒超
- 1度浅析装修对室内空气品质的影响
- 2017-2022年中国汞矿行业深度分析与投
- 计算机二级VB公共基础知识
- (何勇)秸秆禁烧_重在寻找出路
- 内外墙抹灰工程分包施工合同1




