- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
学号: 1000310125
姓名: 王绍雁
作品名称: 设备驱动程序
一、设备驱动程序设计的目的、意义和背景
随着人们生活水平的提高,人们对智能产品的需求越来越高。很多产品用8位机已经很难满足要求,我们已经迎来了32位应用上的时代。硬件水平的快速提升,给驱动程序的开发带来了很大的困难。服务上的不匹配使得驱动程序的开发越来越受到人们的关注。
驱动程序(Device Driver)全称为“设备驱动程序”,是一种可以使计算机和设备通信的特殊程序,可以说相当于硬件的接口,操作系统只通过这个接口,才能控制硬件设备的工作假如某设备的驱动程序未能正确安装,便不能正常工作。正因为这个原因,驱动程序在系统中的所占的地位十分重要,一般当操作系统安装完毕后,首要的便是安装硬件设备的驱动程序。不过,大多数情况下,我们并不需要安装所有硬件设备的驱动程序,例如硬盘、显示器、光驱、键盘、鼠标等就不需要安装驱动程序,而显卡、声卡、摄像头等就需要安装驱动程序。另外,不同版本的操作系统对硬件设备的支持也是不同的,一般情况下版本越高所支持的硬件设备也越多因为驱动程序有如此重要的作用,所以人们都称“驱动程序是硬件的灵魂”、“硬件的主宰”,同时驱动程序也被形象的称为“硬件和系统之间的桥梁”。
二、操作系统设备驱动程序算法设计、功能模块设计
Linux内核支持几乎所有的通用USB设备,包括键盘、鼠标、打印机、摄像头、游戏杆、网卡等。通用串行总线具有热插拔、即插即用、数据传输可靠、扩展方便、低成本等优点,广泛用于计算机接口和各种嵌入式系统。Linux操作系统中的USB主机驱动由三部分组成:USB主机控制器驱动(HCD)、USB驱动(USBD)和不同的USB设备类驱动。USB驱动程序框架如下图所示:
USB骨架程序是USB驱动程序的基础,通过对它源码的学习和理解,可以迅速地了解USB驱动架构,迅速地开发USB硬件的驱动。算法设计最主要思路在于设计符合USB驱动的结构体,主要包括设备的接口、数据接收缓冲、输入/出端点地址等。主要实现的函数:装载驱动程序、卸载驱动程序、打开设备程序等,在卸载完成后还得通过回调函数释放内存。大多数的设备驱动都需要这些流程,通过对USB驱动程序的概述可以知道其他设备驱动的主要思想。
建立嵌入式Linux平台,驱动程序的开发周期一般较长,驱动程序的好坏,直接关系到系统工作效能和稳定性,对项目的成败起着关键性的作用。驱动程序开发的整个流程见下图
通用的设备驱动程序一般可以分为4个模块:自动配置和初始化例程、卸载例程、驱动程序和应用程序之间的数据交换例程、中断服务例程。
自动配置和初始化例程
它主要完成对硬件的检测,之后进行初始化。主要包括以下步骤:
1、初始化对象;
2、调用类创建对象,并通过调用使设备对Linux子系统可见;
3、查找和分配驱动程序要管理的任何硬件;
4、把一个设备连接到一个中断对象。
卸载例程与驱动程序的初始化例程刚好相反。
1、把与设备连接的中断对象断开。一旦中断对象消失,设备不产生任何中断请求,这是最重要的;
2、释放驱动程序所占用的任何系统资源;
3、从Linux名字空间删除设备,并删除设备对象自身。
驱动程序与应用程序之间的数据交换例程
应用程序与驱动程序交换数据主要是由创建文件、读/写文件、设备I/O控制等函数发出请求,接着I/O管理器把这些请求转化为叫做I/O请求包的数据结构形式,再由I/O管理器把这些I/O请求包发送到驱动程序。数据交换例程的主要作用是接收I/O管理器所发出的报文,然后解析这些报文,从而得知报文从应用程序传递过来的数据。解析报文主要是运用C语言的switch语句,根据报文的堆栈单元中的参数进行不同的处理。最后报文的完成处理也非常重要,它要做的是返回系统,完成一个I/O请求的信息,系统根据返回的信息释放报文,以便使系统顺利进行下一个报文的处理。这里需要说明的是这个例程只是完成了数据从应用程序到驱动程序的传递,而没有进行任何实际的设备操作。
中断服务例程
中断服务例程主要是进行直接的访问设备的操作。驱动程序与应用程序之间的数据交换例程只完成了数据从用户空间到核心空间的传递,而中断服务例程根据传递过来的数据,直接对I/O端口进行访问操作。在嵌入式Linux中,中断信号有嵌入式Linux系统接收,然后选择相应的中断服务程序。
三、问题与总结
学习了一个学期的操作系统课程即将结束,在学习操作系统之前,我很肤浅地认为操作系统只是单纯地讲一些关于计算机方面的操作应用,就像大一那会学的word、excel一样,并不了解其中的具体操作实现过程和它强大的实用性。不过随着对课程的深入学习,我知道我错了,而且错的很离谱!一开始接触操作系统这门课程的时候,什么都不懂。之后经过自己的加倍努力,逐渐懂得了这门课的一
文档评论(0)