Linux操作系统分析报告.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* Linux OS Analysis */105 块设备描述符与块子系统其他结构的链接 * Linux OS Analysis */105 注册和初始化块设备驱动程序 自定义驱动程序描述符 预订主设备号 初始化自定义描述符 初始化gendisk描述符 初始化块设备操作表 分配和初始化请求队列 设置中断处理程序 注册磁盘 * Linux OS Analysis */105 策略例程 策略例程是快设备驱动程序的一个函数或一组函数 与硬件块设备之间相互作用,以满足调度队列中所汇集的请求 通过请求队列描述符中的request_fn方法可以调用策略例程 策略例程的简单实现方法 对于调度队列中的每个元素,与块设备驱动程序相互作用共同为请求服务,等待知道数据传送完成,然后把已经服务过的请求从队列中删除,继续处理调度队列中的下一个请求 * Linux OS Analysis */105 上述方法效率不高 现在,很多块设备是用如下策略 策略例程处理队列中的第一个请求,并设置块设备控制器,以便在数据传送完成时可以产生一个中断。然后策略例程就终止。 当磁盘控制器产生中断时,中断服务例程重新调用策略例程 策略例程要么为当前请求再启动一次数据传送 要么当请求的所有数据已经传送完成时,把请求从调度队列中删除然后开始处理下一个请求 * Linux OS Analysis */105 中断处理程序 块设备驱动程序的中断处理程序是在DMA数据传送结束时被激活的。 检查是否已经传送完所有的数据块 是:调用策略例程处理调度队列中的下一个请求 否则:更新请求描述符的相应字段,并调用策略例程处理还没有完成的数据传送 典型片断 * Linux OS Analysis */105 * Linux OS Analysis */105 打开块设备文件 用于块设备文件的缺省的文件操作方法 * Linux OS Analysis */105 驱动程序的编写 有专门的书《Linux设备驱动程序》来讲如何写Linux下的驱动程序 中译本有500多页 我们这里用最简单的例子来尝试驱动程序的编写 * Linux OS Analysis */105 1,确定设备名称与主次设备号(动态分配的不指定) 2,编写设备文件对内核上层的接口file_operations 包括: init, open, release, read, write, ioctl 等 3,编译并加载设备驱动(两种方法) 3.1,静态加载: 3.1.1,将初始化函数加入内核驱动初始化部分 3.1.2,修改相应的Makefile, 增加驱动的目标文件 3.1.3,重新编译内核,启用新的内核 * Linux OS Analysis */105 3.2,动态加载, 先编译成Linux模块目标文件,再用insmod将驱动模块加载,还有rmmod, lsmod命令,可查看man得知相应的功能。 4,在目录/dev下建立相应的设备文件。 mknod 创建设备对象, 参数: 设备名 设备类型 主设备号 次设备号 5,在用户态下编写应用程序测试,使用该设备驱动 * Linux OS Analysis */105 一个虚拟的字符驱动程序举例 char_dev.c makefile testchardev.c 设备名定为:char_dev 用命令insmod char_dev.o加载 用命令lsmod察看是否成功加载 使用dmesg察看主设备号 使用mknod char_dev c 253 1在/dev目录下创建设备文件 运行Testchardev.c测试 * Linux OS Analysis */105 Project7 实现一个虚拟的字符驱动程序 知识回顾Knowledge Review * Linux OS Analysis */105 中断模式的简单例子 假定实现一个简单的输入字符设备的驱动程序 当在对应的设备文件上发出read()系统调用时,一条输入命令被发往设备的控制寄存器 在一个不可预知的长时间后,设备把一个字节的数据放在输入寄存器 驱动程序然后将这个字节作为read()系统调用的结果返回 * Linux OS Analysis */105 这个驱动程序包含两个函数: 实现文件对象read方法的foo_read()函数 处理中断的foo_interrupt()函数 只要用户读设备文件,foo_read()函数就会被触发 对I/O设备发出读命令 等待读操作的结束, 由中断处理程序唤醒 将获得的数据送到用户空间中 * Linux OS Analysis */105 从设备上读入数据 唤醒read的剩余部分 * Linux OS Analysis */105 再看foo_read的输入参数 Struct

文档评论(0)

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

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

1亿VIP精品文档

相关文档