Linux操作系统7-字符驱动.pptVIP

  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文档。上传文档
查看更多
Linux操作系统7 -- linux字符设备驱动程序 北方工业大学检测技术与自动化系 2007年研究生春季课程 上节回顾 内核简介 内核模块 本节目标 掌握简单的字符设备驱动程序 了解字符驱动程序的各个方面 本节内容 字符设备驱动程序 并发控制 阻塞与非阻塞 异步通知 中断处理 定时器 内存与I-O操作 结构化设备驱动程序 设备驱动程序的设计思想 Linux下的设备驱动程序被组织为一组完成不同任务的函数的集合,通过这些函数使得设备操作犹如文件一般。 在应用程序看来,硬件设备只是一个设备文件。 应用程序可以象操作普通文件一样对硬件设备进行操作,如open ()、close ()、read ()、write () 等。 设备驱动程序是内核的一部分 设备由一个主设备号和一个次设备号标识。 主设备号唯一标识了设备类型,即设备驱动程序类型,它是块设备表或字符设备表中设备表项的索引。 次设备号仅由设备驱动程序解释,一般用于识别在若干可能的硬件设备中,I/O请求所涉及到的那个设备。 设备驱动程序的功能 对设备初始化和释放. 把数据从内核传送到硬件和从硬件读取数据. 读取应用程序传送给设备文件的数据和回送应用程序请求的数据. 检测和处理设备出现的错误. 设备驱动程序组成部分1 自动配置和初始化子程序,负责检测所要驱动的硬件设备是否存在和是否能正常工作。 如果该设备正常,则对这个设备及其相关的、设备驱动程序需要的软件状态进行初始化。 这部分驱动程序仅在初始化的时候被调用一次。 设备驱动程序组成部分2 服务于I/O请求的子程序,又称为驱动程序的上半部分。调用这部分是由于系统调用的结果。 这部分程序在执行的时候,系统仍认为是和进行调用的进程属于同一个进程,只是由用户态变成了核心态,具有进行此系统调用的用户程序的运行环境,因此可以在其中调用sleep()等与进程运行环境有关的函数。 设备驱动程序组成部分3 中断服务子程序,又称为驱动程序的下半部分。在UNIX系统中,并不是直接从中断向量表中调用设备驱动程序的中断服务子程序,而是由UNIX系统来接收硬件中断,再由系统调用中断服务子程序。 中断可以产生在任何一个进程运行的时候,因此在中断服务程序被调用的时候,不能依赖于任何进程的状态,也就不能调用任何与进程运行环境有关的函数。 因为设备驱动程序一般支持同一类型的若干设备,所以一般在系统调用中断服务子程序的时候,都带有一个或多个参数,以唯一标识请求服务的设备。 字符型设备驱动程序入口点1: open入口点。打开设备准备I/O操作。对字符特别设备文件进行打开操作,都会调用设备的open入口点。open子程序必须对将要进行的I/O操作做好必要的准备工作,如清除缓冲区等。如果设备是独占的,即同一 时刻只能有一个程序访问此设备,则open子程序必须设置一些标志以表示设备处于忙状态。 release入口点。关闭一个设备。当最后一次使用设备终结后,调用close子程序。独占设备必须标记设备可再次使用。 read入口点。从设备上读数据。对于有缓冲区的I/O操作,一般是从缓冲区里读数据。对字符特别设备文件进行读操作将调用read子程序。 字符型设备驱动程序入口点2 write入口点。往设备上写数据。对于有缓冲区的I/O操作,一般是把数据写入缓冲区里。对字符特别设备文件进行写操作将调用write子程序。 ioctl入口点。执行读、写之外的操作。 select入口点。检查设备,看数据是否可读或设备是否可用于写数据。select系统调用在检查与设备特别文件相关的文件描述符时使用select入口点。如果设备驱动程序没有提供上述入口点中的某一个,系统会用缺省的子程序来代替。对于不同的系统,也还有一些其它的入口点。 下面我们来假设一个非常简单的虚拟字符设备: 这个设备中只有一个4个字节的全局变量int global_var, 而这个设备的名字叫做“gobalvar”。 对“gobalvar”设备的读写等操作即是对其中全局变量global_var的操作。 需要指出的是:本次讲座涉及到的源代码,本人没有经过测试,且是2.4内核的代码,故仅作为参考,实际的代码请参考linux device driver 3rd 一书的代码 驱动程序是内核的一部分,因此我们需要给其添加模块初始化函数,该函数用来完成对所控设备的初始化工作,并调用register_chrdev() 函数注册字符设备: static int __init gobalvar_init(void) {  if (register_chrdev(MAJOR_NUM, gobalvar , gobalvar_fops))  {   //…注册失败  }  else  {   //…注册成功  } }    

文档评论(0)

好文精选 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档