Linux设备分析报告

Linux设备分析报告

ID:46497063

大小:117.50 KB

页数:15页

时间:2019-11-24

Linux设备分析报告_第1页
Linux设备分析报告_第2页
Linux设备分析报告_第3页
Linux设备分析报告_第4页
Linux设备分析报告_第5页
资源描述:

《Linux设备分析报告》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Linux设备分析报告杜阳9811526浙江人学计算机系98研duy@isee.zju.edu.cn[摘要]在木文中,首先概括了linux设备的基木概念。接着依次介绍了相关的数据结构、初始化流程和设备管理流程,接着主要介绍了如何添加一个字符设备和块设备。在附录中是一个虚拟的字符设备驱动程序,该程序是我和潘刚同学的试验结果,本来我们还打算写一个虚拟的块设备驱动程序,由于吋间关系,没有能够完成,非常遗憾,不过主要步骤已经在本文中进行了介绍。一.linux设备概述在概念上一般把设备分为字符设备、块设备。字符设备是指设备发送和接收数据以字符形式的进行;而块设备则以整个数据缓冲区的形

2、式进行。由于网络设备等有其特殊性,实际上系统对它们单独处理。系统用主设备号(MAJOR)加次设备(MINOR)号來唯一标识一个设备。相同主设备号表示同一类设备,例如都是硕盘;次设备号标识同类设备的个数。所有设备在适当的冃录(通常在/dev目录下)下必须有相应的文件,这样字符设备和块设备都可以通过文件操作的系统调用了完成。不同的是,块设备操作经常要和缓冲区打交道,更加复杂一点。系统设备管理的总体框图如下:用户程序系统调用接口文件系统-―>高速缓存字符设备块设备驱动程序硬件设备二•主要数据结构与设备管理有关的主要数据结构如下:1、登记设备管理系统对已登记设备的管理是由chrde

3、vs和blkdevs这两张列表来完成的:/*srcfsdevices.c*/structdcvicc_struct{constchar*name;structfile_operations*fops;〃指向设备名称〃指向设备的访问操作函数集,file_operations定义在include/linux/fs.h中};staticstructdevice_struct{NULL,NULL},};staticstructdevice_struct{NULL,NULL},chrdcvs[MAX_CHRDEV]二{〃所有系统登记的字符设备列表blkdevs[MAX_BLKDE

4、V]={〃所有系统登记的块设备列表实际上这两张列表的结构是一样的,但在登记时每个结构元素的值会不同(见初始化部分)。Linux对设备的进行访问时,访问文件系统中相应的文件,通过文件系统和文件的属性描述块,系统可以找到该文件系统或文件对应设备的设备号。在实际访问列表吋,以chrdevsLMAJORJLMlNORJ或blkdevsLMAJORJ[MINORJ形式访问,相同主设备号(MAJOR)的元索小fops的内容相同。文件系统屮相关的的数据结构如F:structsuper_block{kdev_ts_dev;〃该文件系统所在设备的设备标志符•••}〃每个文件系统对应一个sup

5、er_blockstructinode{kdcv_ti_dcv;♦♦•}〃该文件所在设备的设备标志符通过它可以找到在设备列表中相应设备〃每个文件对应-一个inode2、I/O请求管理系统会把一部分系统内存作为块设备驱动程序与文件系统接口Z间的一层缓冲区,每个缓冲区与某台块设备屮的特定区域相联系,文件系统首先试图存在相应的缓冲区,如未找到就向该设备发出I/O读写请求,山设备驱动程序対这些请求进行处理。因此,需要有和应的数据结构进行管理。/*srcincludelinuxblkdev.h*/structblk_dev_struct{void(*request_fn)(vo

6、id);〃指向请求处理函数的指针,请求处理函数是写设备驱动程序的重要一•环,设备驱动程序在此函数中通过outb向位于I/O空间中的设备命令寄存器发出命令structrequest*currcnt_rcqucst;//指向当前正在处理的请求,它和plug共同维护了该设备的请求队列structrequestplug;〃这是LINUX2.0版本与以前版本的一个不同之处,plug主耍被用于界步提前读写操作,在这种情况F,由于没有特别的请求,为了提高系统性能,需要等发送完所有的提前读写请求才开始进行请求处理,即unphg_device。structtq_structplug_tq;〃

7、设备对应的任务队列/*srcdriversblockll_rw_blkx*/structblk_dev_structb!k_dev[MAX_BLKDEV];其中每个请求以request的类型的结构进行传递,定义如下:/*srcincludelinuxblk_dev.h*/structrequest{volatileintrq_status;kdcv_trq_dcv;〃表示请求的状态〃是该请求对应的设备号,kdcv_t是unsignedshort类型,高8位是主设备号,低8位是从设备号,毎一请求都针对一个

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。