Linux操作系统分析-管理IO.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文档。上传文档
查看更多
这个驱动程序包含两个函数: 实现文件对象read方法的foo_read()函数 处理中断的foo_interrupt()函数 只要用户读设备文件,foo_read()函数就会被触发 对I/O设备发出读命令 等待读操作的结束, 由中断处理程序唤醒 将获得的数据送到用户空间中 * Linux OS Analysis */105 从设备上读入数据 唤醒read的剩余部分 * Linux OS Analysis */105 再看foo_read的输入参数 Struct file*filp,在这个数据的私有数据项中,VFS已经将其转换成设备驱动程序的私有的信息 foo_dev_t, 被定义为包含如下信息: 一个信号量,互斥 使用intr作为标志 0:没有发生/处理中断 1:处理了中断 一个等待队列,用来给foo_read睡眠 一个数据区,长度为1,用来存放读到的数据 * Linux OS Analysis */105 char* buf,用户提供的存放数据的空间 Count和ppos都没有用到 再看看foo_interrupt()中,这是通过foo一个全局变量获得设备的私有数据结构的,这个数据结构与foo_read()中通过filp中获得的私有数据一致 foo_interrupt的输入参数没有得到使用,这是一种很普遍的情况 * Linux OS Analysis */105 内核支持的级别 Linux内核并不完全支持所有可能存在的I/O设备 一般来说,事实上有三种可能的方式支持硬件设备 根本不支持 应用程序使用使用适当的in/out指令直接与设备的I/O端口进行交互 与内核设备驱动程序毫无关系 最常见于X Window系统对图形显示的传统处理方式 * Linux OS Analysis */105 最小支持 内核不识别硬件设备,但能识别它的I/O接口。用户程序把I/O接口视为能够读写字符流的顺序设备 用来处理连接到通用I/O接口上的外部硬件设备 使用设备文件和设备驱动 例如并口、串口 扩展支持 内核识别硬件设备,并处理I/O接口本身。 内核必须为每个这样的设备提供一个设备驱动程序 除了串口、并口之外的其他通用I/O接口上连接的外部设备都需要扩展支持 * Linux OS Analysis */105 字符设备驱动程序 处理字符设备驱动程序相对比较容易 不需要复杂的缓冲策略,也不涉及磁盘高速缓存 不同的字符设备的需求也是不同的 有的有复杂的通信协议 有的只需要简单得I/O端口读写 块设备驱动程序要比字符设备驱动程序复杂的多 * Linux OS Analysis */105 字符设备驱动程序的数据结构和相关接口 cdev_alloc()分配一个cdev描述符 * Linux OS Analysis */105 cdev_add()在设备驱动程序模型中注册一个cdev描述符 * Linux OS Analysis */105 分配设备号 为了记录目前已经分配了哪些字符设备号,内核使用散列表chrdevs 表的大小不超过设备号的范围 两个不同的设备号范围可能共享一个主设备号。由于设备号范围不重叠,因此次设备号应该完全不同 chrdevs包含255个表项 * Linux OS Analysis */105 Hash函数 分配设备号:新设备驱动采用这种方法 alloc_chrdev_region register_chrdev_region +cdev_add * Linux OS Analysis */105 * Linux OS Analysis */105 * Linux OS Analysis */105 kobject是驱动程序模型中的一个核心数据结构,与sysfs文件系统自然的邦定在一起: 每个kobject对应sysfs文件系统中的一个目录 kobject往往被嵌入到设备驱动程序模型中的组件中,如总线、设备和驱动程序的描述符 Kobject的作用是,为所属“容器”提供 引用计数器 维持容器的层次列表或组 为容器的属性提供一种用户态查看的视图 * Linux OS Analysis */105 指向包含有容器名称的字符串 * Linux OS Analysis */105 Kset是同类型kobject结构的一个集合体,通过kset数据结构可将kobjects组织成一棵层次树 * Linux OS Analysis */105 设备驱动程序模型的组件 设备:device_type对象;device对象 驱动程序:device_driver对象 总线:bus_type;bus_register(); 类:class * Linux OS Analysis */105 设备文件 Unix类操作系统都是基于文件概念的 文

文档评论(0)

js1180 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档