Linux设备驱动程序课件.ppt

  1. 1、本文档共62页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux设备驱动程序课件

设备驱动概述 操作系统是通过各种驱动程序来驾驭硬件设备,它为用户屏蔽了各种各样的设备,硬件设备的抽象。 设备驱动程序:处理和管理硬件控制器的软件。 设备驱动程序是操作系统内核和机器硬件之间的接口。 设备驱动概述 设备由两部分组成,一个是被称为控制器的电器部分,另一个是机械部分。 一组寄存器组被赋予到各个控制器。I/O端口包含4组寄存器,即状态寄存器,控制寄存器,数据输入寄存器,数据输出寄存器。 状态寄存器拥有可以被CPU读取的(状态)位,用来 指示当前命令是否执行完毕,或者字节是否可以被读出或写入,以及任何错误提示。 控制寄存器则用于启动一条命令(指令)或者改变设备的(工作)模式。 数据输入寄存器用于获取输入的数据。 数据输出寄存器则向CPU发送结果。 处理器和设备之间的基本界面是控制和状态寄存器。 设备驱动概述 寄存器拥有在I/O空间明确定义的地址范围。 通常这些地址在启动时被分配。 如果设备是静态加载的,各个设备的地址范围可能被预分配。这意味内核包含了已存在设备的驱动 程序。通过运行“cat /proc/ioports” 命令检查其所使用的地址范围。第一列输出显示了端口的范围而第二列则是拥用这些端口的设备。 设备驱动概述 设备驱动的概念是非常抽象的并且处于一台计算上所运行软件的最低层。 由于直接到设备的硬件特性的限 制。每个设备驱动都只管理一种单一类型的设备。 如果一个应用 程序向设备提出(操作)要求。内核会联系到对应的设备驱动,设备驱动接着向特定的设备发出命令。 设备驱 动是一个函数集合:包含了许多调用入口,类似于open,close,read,write,ioctl,llseek 等。 设备驱动概述 Linux操作系统把设备纳入文件系统的范畴来管理。 文件操作是对设备操作的组织和抽象。设备操作则是对文件操作的最终实现。 每个设备都对应一个文件名,在内核中也就对应一个索引节点。 对文件操作的系统调用大都适用于设备文件。 从应用程序的角度看,设备文件逻辑上的空间是一个线性空间(起始地址为0,每读取一个字节加1)。从这个逻辑空间到具体设备物理空间(如磁盘的磁道、扇区)的映射则是由内核提供,并被划分为文件操作和设备驱动两个层次。 设备驱动概述 Linux将设备分成两大类。 一类像键盘那样以字符(字节)为单位,逐个字符进行输入/输出的设备,称为字符设备。 一类是像磁盘那样以块或扇区为单位,成块进行输入/输出的设备,称为块设备。 文件系统通常都建立在块设备上。 设备驱动概述 文件操作和设备驱动是对一个具体的设备操作的不同层次。从这种观点出发,从概念上可以把一个系统划分为应用、文件系统和设备驱动三个层次。 设备驱动概述 设备驱动概述 要使一项设备可以被应用程序访问,首先要在系统中建立一个代表此设备的设备文件,这是通过系统调用mknode()实现的。此外,更重要的是在设备驱动层要有这种设备的驱动程序。 设备驱动概述 设备文件: 任何设备都被当作路径/dev 的设备文件处理,并通过这些设备文件提供访问硬件的方法。 每个设备文件除了设备名外,还有类型、主设备号、次设备号这三个属性。 设备文件是通过mknod系统调用创建的。其原型为:mknod(const char * filename, int mode, dev_t dev) mknod /dev/led0 c 253 0 设备驱动概述 主设备号和次设备号: 主设备号标识设备对应的驱动程序。一般“一个主设备号对应一个驱动程序” 次设备号用于确定设备文件所指的设备。 可通过ls –l “设备文件名”命令查看设备的主次设备号,以及设备的类型。 设备驱动概述 主设备号和次设备号的内部表达: Dev_t类型用于保存设备号,称为设备编号。/linux/types.h文件中定义。 目前设备编号dev_t是一个32位的整数,其中12位表示主设备号,20位表示次设备号。 通过设备编号获取主次设备号: MAJOR(dev_t dev); MINOR(dev_t dev); 通过主次设备号合成设备编号: MKDEV(int major, int minor); Dev_t格式以后可能会发生变化,但只要使用这些宏,就可保证设备驱动程序的正确性。 一些重要的数据结构 大部分驱动程序涉及三个重要的内核数据结构: 文件操作file_operations结构体 文件对象file结构体 索引节点inode结构体 一些重要的数据结构 文件操作结构体file_operations 结构体file_operations在头文件 linux/fs.h中定义,用来存储驱动内核模块提供的对设备进行各种操作的函数的指针。 结构体的每个域都对应着驱动模块用来处理某个被请求的事务的函数的地址。 struct f

文档评论(0)

jiqinyu2015 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档