虚拟块设备驱动程序设计与分析

虚拟块设备驱动程序设计与分析

ID:47261305

大小:118.87 KB

页数:3页

时间:2019-09-01

虚拟块设备驱动程序设计与分析_第1页
虚拟块设备驱动程序设计与分析_第2页
虚拟块设备驱动程序设计与分析_第3页
资源描述:

《虚拟块设备驱动程序设计与分析》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、如果只是为了应付考试,这个文档就太啰嗦了,不用看,不过还是可以帮助记忆,考试只会考其中加粗字体的几个函数中的一个,至于是哪个我不能断定,因此要记的还是比较多的,要是能理解就更好了,结合课本和下面的解释应该能大体上弄明白这个虚拟块设备驱动的实现过程,毕竟设备驱动是内核的一部分,光看下面的解释也是还是很头晕的,不过坚持看下去还是有收获的,我也差不多花了半天时间,不过,要是打算……的话就可以直接跳过了。#define#define#define#define#define#define#defineMA

2、JOR_NR70//我们创造的虚拟块设备的主设备号DEVICE_NAME"bdemo"//我们创造的虚拟块设备的名字,当设备加载成功后可川lsmod命令查看到该设备模块名blkdemo_devs2blkdemo_rahead2blkdemosize4blkdemo_blksize//虚拟块设备的个数//读取块设备时预读的扇区个数//每个虚拟块设备的人小,单位为KB1024//设备每个数据块的大小,即block,单位为字节//设备每个扇区的大小,单位为字节intsize;//用來记录真实块设备的容量

3、,即下Iflldata指针所指向数据存储区的大小blkdemo_hardsect512structblkdemo_device{//这里定义了我们将要创造的虚拟块设备的数据结构intuse.cnt;//用來记录正在使用该块设备的程序的个数inthardsect;//川来保存该块设备每个扇区的大小,单位为字节,即设备的使川计数u8*data;//该指针所指向的内存区域就是该块设备rtiEJU来存储数据的区域,在该设备还未被加载函数初始化时,该指针为//空,即系统还没冇为该设备分配内存区域。stati

4、cintblkdemo_sizes[blkdemo_devs];//用來保存我们创建的所冇虚拟块设备的大小,单位为KBstaticintblkdemo_blksizes[blkdemo_devs];//川来保存我们创建的所有虚拟块设备中毎个数据块的大小,*L位为字节staticintb1kdemo_hardsects[blkdemo_devs];//丿IJ来保存我们创建的所有虚拟块设备中每个扇区的大小,单位为字节//上面的这三个数组将会在我们加载这些设备时応注册到内核的数据结构屮(即让内核中与Z相

5、关的一些指针指向它们,讣内核能够读取我们所创建的设备的一些重要信息//对于一个新的设备,内核肯定不知道他为何物,要想让内核识别我们自己创造的设备,则必须将该设备的一些信息.使用这个设备的方//法等告诉内核,山于内核早己编译成型,至于如何去告诉内核就早己模式化。内核中冇几个指针数组(书*page81)专门用來完成上面的部分任务://blk_size[];//blksize_size[];//hardsect_size[];//read_ahead[];//这几个数组都为每一个主设备号留冇一个位置,对

6、于2.4的内核,主设备号和次设备号均用8位二进制來表示(即短整型的高八位和//低八位),因此这儿个数组都包含有256个元索,毎个元索都是与主设备号对应的一个指针,如果主设备号所对应的设备不存在,贝I」该//指针置为空(NULL),其实其中很多指针祁为空,因为一般电脑上都没有那么多不同类型的块设备,当然,对于我们所创造的这个块设//备而言,它与系统中所存在的其他块设备的类型都不同,耍为其确定一个主设备号,这个没什么破性的规定,只要找一个没被使川的主//设备号就可以了,这个程序中使用的是70(前面的M

7、OJOR_NR宏)。」••而我们定义了保存冇虚拟块设备信息的数纽•,现在只要将他们的//首地址赋给这几个数组中下标70(主设备号)所对应的指针元素即可。这一过程是在后面的加载函数中完成的。staticintblksize=blkdemo_blksize;structblkdemo_deviceblkdemo_dev[blkdemo_devs];//这里才其正创建了我们虚拟块设备对应的结构体变量(一个全局数纽),//每个元素为对应一个虚拟块设备虚拟块设备的打开函数(open()):intblkdem

8、o_open(struetinode*inodezstreutfile*filp){//设备文尿对应的节点(inode)结构中包含有对应的设备号intnum;num=DEVICE_NR(inode->i_rdev);//用DEVICE_NR宏可求出该节点所对应设备的次设备号,所以num即为次设备号if(!blkdemo_dev[num].use_cnt){//如果该设洽勺使用计数为0,则说该设备没冇被任何程序使用,当虚拟块设备没冇被//任何程序使用时,内核先前为该设备所分配的存储区

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

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

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