3943|8

91

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

新手高分请教:WDM程序结构问题 [复制链接]

WDM驱动程序是分层的,是堆栈式的结构,包括总线驱动、功能驱动、过滤驱动等。
1. 那么我们写的驱动(包括驱动入口、IPR处理等)是属于哪一层?
2. 如果我要访问硬件端口(ISA总线),应该在哪个例程(函数)中访问,这个访问硬件的例程(函数)又是属于哪一层?

最新回复

VXD只用在win9x上,当初大名鼎鼎的cih就是用这个编的,nt驱动和wdm很近,但有细微差别,我当初学也总混,有问题就站内发信好了,呵呵  详情 回复 发表于 2007-10-17 09:50
点赞 关注

回复
举报

79

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
问题1:一般写的都是功能驱动
总线驱动问厂家要一般
问题2:一般直接操作IO端口,不一定有现成的API,读写IO和内存看看
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
1.一般你写的驱动都是功能驱动,有时候还需要写过滤驱动
2.如果你插入isa设备,总线驱动会立刻枚举到这个设备,并创建一个pdo,系统会搜索挂在上面的fdo,若果第一次会要你提供driverentry函数,里面告诉各个函数的入口地址,然后系统调用你写的adddevice,你在这个函数中主要是创建一个fdo,并且挂载在这个pdo之上。这样就形成一个堆栈了。如果还要加载过滤驱动,会调用过滤驱动的adddevice,并把过滤驱动的fido,挂在这个堆栈上。至于如何操作你的isa卡,你可以在read write deviceiocontrol里控制,其实就是对某个端口,某段物理内存,中断向量操作
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

4
 
谢谢回答。
少年壮志不言愁zswolf2000的回答让我比较明白。

1.总线驱动是操作系统自带的,除了极特殊的之外。

2.PCI、USB等PNP总线驱动可以在操作系统启动后动态检测插入到总线上的设备,然后启动相应的设备驱动。

3.操作系统也带有ISA总线驱动,这个总线驱动结合inf文件在操作系统启动时获取设备的资源,以后的工作和PNP设备一样。

4.我们在StartDevice例程里获取设备被分配的资源,在read write deviceiocontrol里把请求转发给startIo例程,然后startIo调用HAL的函数操纵硬件。

5.操纵硬件也是功能驱动的部分,我以前以为这应该由总线驱动完成。其实总线驱动的主要功能是枚举硬件,而不是读写硬件。

不知我理解的对不对。
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

5
 
1.对,当然你也可以自己开发,可以参照ddk下面的toaster的例子
2.对,检测到一个设备,就创建一个pdo
3.对,isa总线是挂载pci总线之上的,是通过一个桥连接的
4.对
5.不完全对,看你操作啥硬件了,比如物理内存,端口,中断,你可以自己操作。但一些操作,你是无法实现的,比如对usb设备的造作,他可以根据usb协议,分解成一系列的对这些物理设备的操作,包括一些同步什么的,很复杂,你必须调用一些库来实现,这些库就是class driver,微软已经为我们提供好了
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

6
 
少年壮志不言愁zswolf2000:
我还有个问题想向你请教,是关于ISA驱动如何获取设备的资源信息的。

我看了驱动指南那本书,那上面的一个例子是在CreateFile里通过filename字符串把资源信息传递给驱动,但驱动程序没有adddevice例程。对于这个我是这样理解的:ISA驱动获得设备的资源信息有多种方法(至少有两种)

方法一:在inf文件里设置资源信息,当这个inf文件被安装后,资源信息被写入注册表。以后系统在启动的时候会调用驱动程序的adddevice例程,同时根据注册表信息把设备资源作为参数传递给adddevice例程,这样驱动就获得了设备的资源信息。

方法二:不在inf文件里设置资源信息,驱动程序也没有adddevice例程,系统在启动的时候只是调用driverEntry例程,当用户调用CreateFile时通过filename字符串把资源信息传递给驱动。

但这样理解有个明显的问题,系统如何知道该不该调用adddevice例程,希望解答
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

7
 
你说的是chris cant的那本书,还是art baker的啊?
没有AddDevice的驱动是老式的nt驱动,不需要inf,需要专门的加载器加载

简单说一下nt驱动和wdm驱动的区别
1.加载方式,wdm需要inf,nt需要一个加载器(其实是往注册表里写数据,然后被当作系统的一个服务)
2.adddevice的有无
3.wdm没有支持pnp,pnp管理器(系统的一个部件)调用的adddevice;nt不支持pnp,当然也就不需要pnp管理器调用adddevice了

 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

8
 
又上网查了一些资料,原来NT和VXD一样,也是一种驱动.只不过NT和WDM比较接近.
决定这个星期先写一个,练练手.
感谢eeworld的大侠.
感谢少年壮志不言愁zswolf2000,希望以后能向你学习,我的QQ:61802646.
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

9
 
VXD只用在win9x上,当初大名鼎鼎的cih就是用这个编的,nt驱动和wdm很近,但有细微差别,我当初学也总混,有问题就站内发信好了,呵呵
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表