linux设备分析数报告.docVIP

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
linux设备分析数报告

精品word文档 值得下载 值得拥有 精品word文档 值得下载 值得拥有 Linux设备分析报告 杜阳 9811526 浙江大学计算机系98研 duy@isee.zju.edu.cn [摘要] 在本文中,首先概括了linux设备的基本概念。接着依次介绍了相关的数据结构、初始化流程和设备管理流程,接着主要介绍了如何添加一个字符设备和块设备。在附录中是一个虚拟的字符设备驱动程序,该程序是我和潘刚同学的试验结果,本来我们还打算写一个虚拟的块设备驱动程序,由于时间关系,没有能够完成,非常遗憾,不过主要步骤已经在本文中进行了介绍。 linux设备概述 在概念上一般把设备分为字符设备、块设备。字符设备是指设备发送和接收数据以字符形式的进行;而块设备则以整个数据缓冲区的形式进行。由于网络设备等有其特殊性,实际上系统对它们单独处理。 系统用主设备号(MAJOR)加次设备(MINOR)号来唯一标识一个设备。相同主设备号表示同一类设备,例如都是硬盘;次设备号标识同类设备的个数。所有设备在适当的目录(通常在/dev目录下)下必须有相应的文件,这样字符设备和块设备都可以通过文件操作的系统调用了完成。不同的是,块设备操作经常要和缓冲区打交道,更加复杂一点。系统设备管理的总体框图如下: 硬件设备 文件系统 驱动程序 块设备 字符设备 高速缓存 系统调用接口 用户程序 主要数据结构 与设备管理有关的主要数据结构如下: 1、登记设备管理 系统对已登记设备的管理是由chrdevs和blkdevs这两张列表来完成的: /*src\fs\devices.c*/ struct device_struct { const char * name; //指向设备名称 struct file_operations * fops; //指向设备的访问操作函数集,file_operations定义在 include/linux/fs.h中 }; static struct device_struct chrdevs[MAX_CHRDEV] = { { NULL, NULL }, }; //所有系统登记的字符设备列表 static struct device_struct blkdevs[MAX_BLKDEV] = { { NULL, NULL }, } //所有系统登记的块设备列表 实际上这两张列表的结构是一样的,但在登记时每个结构元素的值会不同(见初始化部分)。Linux对设备的进行访问时,访问文件系统中相应的文件,通过文件系统和文件的属性描述块,系统可以找到该文件系统或文件对应设备的设备号。在实际访问列表时,以chrdevs[MAJOR][MINOR]或blkdevs[MAJOR][MINOR]形式访问,相同主设备号(MAJOR)的元素中fops的内容相同。文件系统中相关的的数据结构如下: struct super_block { kdev_t s_dev; //该文件系统所在设备的设备标志符 … } //每个文件系统对应一个super_block struct inode { kdev_t i_dev; //该文件所在设备的设备标志符通过它可以找到在设备列表中 … 相应设备 } //每个文件对应一个inode 2、I/O请求管理 系统会把一部分系统内存作为块设备驱动程序与文件系统接口之间的一层缓冲区,每个缓冲区与某台块设备中的特定区域相联系,文件系统首先试图存在相应的缓冲区,如未找到就向该设备发出I/O读写请求,由设备驱动程序对这些请求进行处理。因此,需要有相应的数据结构进行管理。 /*src\include\linux\blkdev.h*/ struct blk_dev_struct { void (*request_fn)(void); //指向请求处理函数的指针,请求处理函数是写设备驱动 程序的重要一环,设备驱动程序在此函数中通过outb向位 于I/O空间中的设备命令寄存器发出命令 struct request * current_request; //指向当前正在处理的请求,它和plug共同维护了该设备 的请求队列 struct request plug; //这是LINUX2.0版本与以前版本的一个不同之处,plug 主要被用于异步提前读写操作,在这种情况下,由于没有特别的请求,为了提高系

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档