嵌入式系统设计大学教程 教学课件 作者 刘艺 许大琴 万福 ch7 设备驱动程序.pptVIP

嵌入式系统设计大学教程 教学课件 作者 刘艺 许大琴 万福 ch7 设备驱动程序.ppt

  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文档。上传文档
查看更多
嵌入式系统设计大学教程 第七章 设备驱动程序 主要内容 7.1 概述 7.2 设备文件接口 7.3 中断处理 7.4 应用实例 7.1 概述 Linux作为unix的一个变种,它继承了unix的设备管理方法,将所有的设备看作具体的文件,通过文件系统层对设备进行访问。所以在Linux/uclinux的框架结构中,和设备相关的处理可以分为两个层次——文件系统层和设备驱动层。 设备驱动层屏蔽具体设备的细节,文件系统层则向用户提供一组统一的、规范的用户接口。 7.1 概述 7.1.1 设备驱动原理 所有操作系统下设备驱动程序的共同目标是屏蔽具体物理设备的操作细节,实现设备无关性。在嵌入式操作系统中,设备驱动程序通常是内核的重要部分,运行在内核模式,即设备驱动程序为内核提供了一个I/O接口,用户使用这个接口实现对设备的操作。图 7?2显示了一个操作系统的输入输出子系统中各层次结构和功能。 7.1.1 设备驱动原理 7.1 概述 7.1.2 模块化编程 由于历史原因及出于效率方面的考虑,Linux是一个宏内核。虽然这种宏内核给Linux带来了效率高的优点,但也给它带来了某种程度的麻烦,即一旦需要在内核的基础上增加一项功能时,就必须重新编译整个内核,这无疑给内核功能的扩充带来了不便。于是,Linux发展了可安装内核模块的机制——“module”。 7.1.2 模块化编程 从代码特征上来看,模块就是可完成一项独立功能的一组函数的集合; 从使用特征上来看,它在需要时可以随时被安装,而在不需要时又可以随时被卸载。 准确地说,模块就是一个已编译但未连接的可执行文件。利用这种机制,我们可以根据需要,在不重新编译内核的情况下,将编译好的模块动态地插入运行中的内核,或者将内核中已经存在的某个模块移走。 7.1.2 模块化编程 为了增强内核的灵活性和为了方便,设备驱动程度应被设计为可动态安装的内核模。于是,一个典型的Linux设备驱动程序应包含以下几部分代码: 驱动程序模块的注册与注销函数; 设备的打开、关闭、读、写及需要的其他操作函数; 设备的中断服务程序。 7.1 概述 7.1.3 设备类型 作为最简单的输入输出设备,操作系统将字符设备作为设备文件管理。其文件结点和目录管理方式与普通文件相同。 字符设备的初始化在内核启动时进行。某个字符设备初始化时,其驱动程序会构造一个device_struct结构,将其作为字符向量数组chrdevs的一个元素向Linux内核注册。 7.1.3 设备类型 7.1.3 设备类型 7.1.3 设备类型 7.1.3 设备类型 (1)网络设备接口 所谓的网络设备接口,它既包括纯软件网络设备接口,如环路(loopback),也包括硬件网络设备接口,如以太网卡。在Linux中,网络设备接口是由数据结构device来表示的。它操作的数据对象——数据包是通过结构sk_buff来封装的。 7.1.3 设备类型 (2)网络驱动程序加载方法 目前,Linux网络设备驱动程序的加载有两种方式。一种是系统启动时,由内核自动检测并静态加载,称之为“启动初始化方式”;另一种是通过模块化机制在系统运行过程中根据需要由用户或系统进程动态加载,称之为“模块初始化方式”。 7.1 概述 7.1.4 设备号 传统的设备管理中,除了设备类型外,Linux/uclinux内核还需要一对被称作为主设备号、次设备号的参数,才能唯一地标识设备。 主设备号(major number)标识设备对应的驱动程序。系统中不同的设备可以有相同的主设备号,主设备号相同的设备使用相同的驱动程序,内核利用主设备号将设备与相应的驱动程序对应。 7.1.4 设备号 次设备号(minor number)用来区分具体设备的驱动程序实例,只能由设备驱动程序使用,内核的其他部分仅将它作为参数传递给驱动程序。 向系统添加一个驱动程序相当于添加一个主设备号,字符型设备主设备号的添加和注销分别通过调用函数register_chrdev()和unregister_chrdev()实现。 主要内容 7.1 概述 7.2 设备文件接口 7.3 中断处理 7.4 应用实例 7.2 设备文件接口 7.2.1 用户访问接口 1.open入口点 打开设备准备I/O操作。对字符设备文件进行打开操作,都会调用设备的open入口点。open子程序必须对将要进行的I/O操作做好必要的准备工作,如清除缓冲区等。如果设备是独占的,即同一时刻只能有一个程序访问此设备,则open子程序必须设置一些标志以表示设备处于忙状态。 7.2.1 用户访问接口 2.open入口点 close()函数的作用是关闭由open()函数 打开的文件,其调用格式为: int

您可能关注的文档

文档评论(0)

时间加速器 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档