- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
IO 管理IO设备 Linux内核分析PPT培训讲解.ppt
Linux OS Analysis 这个驱动程序包含两个函数: 实现文件对象read方法的foo_read()函数 处理中断的foo_interrupt()函数 只要用户读设备文件,foo_read()函数就会被触发 对I/O设备发出读命令 等待读操作的结束, 由中断处理程序唤醒 将获得的数据送到用户空间中 从设备上读入数据 唤醒read的剩余部分 再看foo_read的输入参数 Struct file*filp,在这个数据的私有数据项中,VFS已经将其转换成设备驱动程序的私有的信息foo_dev_t, 被定义为包含如下信息: 一个信号量,互斥 使用intr作为标志 0:没有发生/处理中断 1:处理了中断 一个等待队列,用来给foo_read睡眠 一个数据区,长度为1,用来存放读到的数据 char* buf,用户提供的存放数据的空间 Count和ppos都没有用到 再看看foo_interrupt()中,这是通过foo一个全局变量获得设备的私有数据结构的,这个数据结构与foo_read()中通过filp中获得的私有数据一致 foo_interrupt的输入参数没有得到使用,这是一种很普遍的情况 内核支持的级别 Linux内核并不完全支持所有可能存在的I/O设备 一般来说,事实上有三种可能的方式支持硬件设备 根本不支持 应用程序使用使用适当的in/out指令直接与设备的I/O端口进行交互 与内核设备驱动程序毫无关系 最常见于X Window系统对图形显示的传统处理方式 最小支持 内核不识别硬件设备,但能识别它的I/O接口。用户程序把I/O接口视为能够读写字符流的顺序设备 用来处理连接到通用I/O接口上的外部硬件设备 使用设备文件和设备驱动 例如并口、串口 扩展支持 内核识别硬件设备,并处理I/O接口本身。 内核必须为每个这样的设备提供一个设备驱动程序 除了串口、并口之外的其他通用I/O接口上连接的外部设备都需要扩展支持 字符设备驱动程序 处理字符设备驱动程序相对比较容易 不需要复杂的缓冲策略,也不涉及磁盘高速缓存 不同的字符设备的需求也是不同的 有的有复杂的通信协议 有的只需要简单得I/O端口读写 块设备驱动程序要比字符设备驱动程序复杂的多 字符设备驱动程序的数据结构和相关接口 cdev_alloc()分配一个cdev描述符 cdev_add()在设备驱动程序模型中注册一个cdev描述符 分配设备号 为了记录目前已经分配了哪些字符设备号,内核使用散列表chrdevs 表的大小不超过设备号的范围 两个不同的设备号范围可能共享一个主设备号。由于设备号范围不重叠,因此次设备号应该完全不同 chrdevs包含255个表项 Hash函数 分配设备号:新设备驱动采用这种方法 alloc_chrdev_region register_chrdev_region +cdev_add kobject是驱动程序模型中的一个核心数据结构,与sysfs文件系统自然的邦定在一起: 每个kobject对应sysfs文件系统中的一个目录 kobject往往被嵌入到设备驱动程序模型中的组件中,如总线、设备和驱动程序的描述符 Kobject的作用是,为所属“容器”提供 引用计数器 维持容器的层次列表或组 为容器的属性提供一种用户态查看的视图 指向包含有容器名称的字符串 Kset是同类型kobject结构的一个集合体,通过kset数据结构可将kobjects组织成一棵层次树 设备驱动程序模型的组件 设备:device_type对象;device对象 驱动程序:device_driver对象 总线:bus_type;bus_register(); 类:class 设备文件 Unix类操作系统都是基于文件概念的 文件是以字符序列而构成的信息载体,因此一个I/O设备也可以当作文件来处理 与普通文件交互的系统调用也可以直接用于I/O设备 例如对/dev/lp0设备文件的write()可以将数据发往打印机 设备文件的分类 根据设备驱动程序的基本特性,设备文件可以分为: 字符设备 块设备 块设备 数据可以被随机访问 在用户看来,访问任何位置的数据时间大致相同 典型例子:硬盘、软盘、CD-ROM、DVD播放器等 字符设备 要么不可以随机访问,例如声卡 如果可被随机访问(往往通过顺序访问方式实现),但随着数据的位置的不同,其访问时间会相差很大,例如磁带 网络 网卡不与文件相关联,使用专门的处理方式 老式的设备文件 在Linux2.4中存在两种设备文件 老式的设备文件 Devfs设备文件 老式的设备文件 这是存放在文件系统中的实际文件 索引节点不对磁盘上的数据块编址,而是包含硬件设备的一个标识 每个设备文件包括: 名字 类型(字符/块) 设备号(主设备号:次
您可能关注的文档
- INTEL Galileo开发板综合实验 移动计算(厦门大学)课件培训讲解.pptx
- Intent对象 Android从入门到精通课件教学 讲义.ppt
- interactions 生态学课件培训讲解.ppt
- interdependence Principles of Economics, Third Edition 经济学原理第三版课件培训讲解.ppt
- International Commercial Arbitration 国际商事仲裁 国际私法 教学 讲义.ppt
- International Exhibition 商务现场口译课件单元PPT知识介绍.ppt
- International Trade copy 中国经济发展与转型(英文版) 知识介绍.ppt
- Internet基础 网络计算机基础课件知识介绍.ppt
- Internet网际层 Internet 计算机通信网技术方案.ppt
- interrupt 中断和异常 Linux内核分析PPT培训讲解.ppt
文档评论(0)