操作系统课程设计 内核模块编程和设备驱动程序概要1.docVIP

操作系统课程设计 内核模块编程和设备驱动程序概要1.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
操作系统课程设计 内核模块编程和设备驱动程序概要1

课程设计 题目 内核模块编程和设备驱动程序 学生姓名 朱小波 学号 2009112127 专 业 计算机科学与技术 班级 指导教师 张莉莉 完成日期 2012年 1月 5日 Linux内核模块编程与设备驱动程序 摘 要:本文给出了一个linux字符设备驱动程序的例子,其包括了内核模块编程.其主要功能是:在内存虚拟一个字符设备,并由编写的驱动程序加载到系统,完成字符的输入与输出功能.此设备驱动程序可以用作linux实践教学的实例. 关键词: 字符设备驱动;内核模块编程;虚拟;模拟 1 前 言 驱动程序是应用程序和硬件设备的一个接口,linux设备驱动程序属于内核的一部分,熟练驱动程序和内核模块开发需要硬件知识,了解操作系统的实现,需要了解内核基础知识,了解内核中的并发控制和同步以及复杂的软件结构框架.本文论述了如何在linux下实现一个简单的字符设备驱动程序,主要完成了内核树的建立、内核的编译、字符设备的模拟、字符设备的驱动、字符设备驱动程序的测试等.本文首先阐述了设备驱动程序和内核模块编程的基础知识,然后给出了实现一个设备驱动程序的总体框架,最后根据框架一步步详细完成了一个字符设备驱动程序,包括终端命令和源程序的编写.做好设备驱动程序可以更好的了解硬件和操作系统,本设备驱动程序可以作为操作系统实验课程的实例. 2 设备驱动程序和内核模块编程相关基础知识 linux内核是一个整体是结构因此向内核添加任何东西或者删除某些功能 ,都十分困难为了解决这个问题 引入了内核机制从而可以可以动态的想内核中添加或者删除模块 模块不被编译在内核中,因而控制了内核的大小然而模块一旦被插入内核,就和内核其他部分一样这样一来就会一部分系统开销同时,假如模块出现问题,也许会带来系统的崩溃 2.1模块的实现机制: 块的加入有两种方法:一是手动加入:如:insmod modulename另一种是根据需要,动态的加载模块如你执行命令: $mount -t msdos /dev/hdd /mnt/d 时系统便自动加载 FAT模块,以支持MSDOS的文件系统 2.2 模块编程 写一个模块,必须有一定的多进程编程基础因为程序不是以一个独立的程序的来运行的另外,因为,模块需要在内核模式下运行,会碰到内空间和用户空间数据交换的问题一般的数据复制函数无法完成这一个过程因此系 统已入了一些非凡的函数以用来完成内核空间和用户空间数据的交换 这些函数有:void put _usermemcpy_tofs 等等,需要说明的是模块编程内核的版本有很大的关系 假如版本不通可能造成,内核模块不能编译,或者在运行这个模块时,出现不可测结果如:系统崩溃等 对于每一个内核模块来说必定包含两个函数 int init_module :这个函数在插入内核时启动,在内核中注册一定的功能函数,或者用的代码代替内中某些函数的内容因此,内可以安全的卸载 int cleanup_module:当内核模块时调用将模块从内核中清除 2.3内核模块与应用程序对比 应用程序是一个进程,编程从主函数main()开始,主函数main返回即是进程结束,使用glibc的库. 驱动程序是一系列内核函数,函数入口和出口不一样,使用Linux内核的函数,这些函数由内核在适当的时候来调用,这些函数可以用来完成硬件访问等操作. 2.4设备分类字符设备(char device)块设备(block device)网络设备(network device) 图1:设备的分类 i字符设备特点像字节流一样来存取的设备( 如同文件 )通过/dev下的文件系统结点来访问 通常至少需要实现 open, close, read, 和 write 等系统调用只能顺序访问的数据通道,不能前后移动访问指针 特例:比如framebuffer设备就是这样的设备,应用程序可以使用mmap或lseek访问图像的各个区域 ii块设备特点 块设备通过位于 /dev 目录的文件系统结点来存取 块设备和字符设备的区别仅仅在于内核内部管理数据的方式 块设备有专门的接口,块设备的接口必须支持挂装(mount)文件系统 应用程序一般通过文件系统来访问块设备上的内容 图3:网络设备驱动 linux中的大部分驱动程序,是以模块的形式编写的这些驱动程序源码可以修改到内核中,也可以把他们编译成模块,在需要的时候动态加载 一个典型的驱动程序,大体上可以分为这么几个部分: 1,注册设备 在系统初启,或者模块加载时候,必须将设备登记到相应的设备数组,并返回设备的主驱动号,例如:对快设备来说调用 refis

文档评论(0)

yaocen + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档