sixbobo
驱动牛犊
驱动牛犊
  • 注册日期2002-12-03
  • 最后登录2003-01-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1456回复:9

关于如何分配isa设备的资源,20分!

楼主#
更多 发布于:2002-12-19 14:49
我要做的isa卡的驱动中需要对isa卡的3个地址进行读写控制(0x200、0x201、0x202),我在驱动程序中是不是应该调用3次IoReportResourceUsage函数为其分配资源呢?具体应该怎么写啊?? :( :( :( :( :( :( :(
初学驱动,多多关照
zydcat
驱动老牛
驱动老牛
  • 注册日期2001-12-06
  • 最后登录2006-04-12
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-12-20 10:49
不需要
只要一个基地址和需要的地址长度就可以了
[color=red]肥虫虫[/color] [img]http://www.driverdevelop.com/forum/upload/bradley/2002-11-15_ig01.gif[/img]
Dragon2008
驱动中牛
驱动中牛
  • 注册日期2002-04-01
  • 最后登录2006-03-13
  • 粉丝0
  • 关注0
  • 积分31分
  • 威望5点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-12-20 11:14
我要做的isa卡的驱动中需要对isa卡的3个地址进行读写控制(0x200、0x201、0x202),我在驱动程序中是不是应该调用3次IoReportResourceUsage函数为其分配资源呢?具体应该怎么写啊?? :( :( :( :( :( :( :(

因你的这三个端口地址是连续的,所以你只要调用一次IoReport...()且在其参数中指定基地址和地址范围就可以了。
但如你需要的端口地址有不连续的地址空间,则对不连续的地址空间必须分别调用IoReport...()。

仅些作为zydcat大侠的一点补充,也顺便蹭点分。^_^ :P
我姓龙,我属龙,我叫龙。。。
sixbobo
驱动牛犊
驱动牛犊
  • 注册日期2002-12-03
  • 最后登录2003-01-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-12-20 16:23
楼上两位大哥请问,那我在分配好资源后,处理irp包时如何去操作不同的地址?在驱动程序里如何确定irp要操作的地址?
我看一个驱动程序中分配资源过程如下:
IoReportResourceUsage--》HalTranXXXXX-->MMMemoXXX
流程是否正确?为何要这么做?
有没有例程,只要处理irp包的部分就行!谢!
高分赠高手! :( :( :( :) :) :)
初学驱动,多多关照
Dragon2008
驱动中牛
驱动中牛
  • 注册日期2002-04-01
  • 最后登录2006-03-13
  • 粉丝0
  • 关注0
  • 积分31分
  • 威望5点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-12-20 16:35
你可以先参考一个DS提供的例子PORTIO,位于DRIVERWORKS\\EXAMPLES\\NT\\PORTIO目录下,
其实用这个驱动就可在NT下和2000下实现对IO端口(当然也包括ISA的IO端口)的读写了。
我姓龙,我属龙,我叫龙。。。
sixbobo
驱动牛犊
驱动牛犊
  • 注册日期2002-12-03
  • 最后登录2003-01-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-12-20 16:35
在分配资源时做了地址转换,那我我在处理irp包时如何确定readXXXX或WriteXXX的地址呢? :(
初学驱动,多多关照
Dragon2008
驱动中牛
驱动中牛
  • 注册日期2002-04-01
  • 最后登录2006-03-13
  • 粉丝0
  • 关注0
  • 积分31分
  • 威望5点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-12-20 16:43
在分配资源时做了地址转换,那我我在处理irp包时如何确定readXXXX或WriteXXX的地址呢? :(

当然得应用程序告诉驱动程序要读哪个端口了。
我姓龙,我属龙,我叫龙。。。
sixbobo
驱动牛犊
驱动牛犊
  • 注册日期2002-12-03
  • 最后登录2003-01-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-12-20 17:10
是不是应用程序调用DeviceIoControl时的第三个参数就是地址的偏移量?
大概明白点了,是不是所有的驱动程序在为其分配资源时都要做地址转换!但在调用ReadXXX或WRITEXXX函数时又不使用地址转换,不太明白这一点!请多指教!
给分了!!! :D :D :D :D :D :D :D :D :D :(
初学驱动,多多关照
sixbobo
驱动牛犊
驱动牛犊
  • 注册日期2002-12-03
  • 最后登录2003-01-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-12-20 17:17
给了一次分好象就不能再给了,那个给分按钮没了,今天先下班了,下次补上,我是石家庄的你在哪工作?是专门做驱动开发的吗?
初学驱动,多多关照
dyangbin
驱动牛犊
驱动牛犊
  • 注册日期2002-07-02
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
9楼#
发布于:2002-12-21 12:56
你可以自己定义一个设备信息结构,如何在该结构中包含你需要的任何地址段(包括首地址和长度),当需要进行资源声明,你只要把你的设备信息结构对象中的所以资源(端口地址和中断)读入到一个PCM_RESOURCE_LIST结构对象中(该结构对象可以自己定义,结构中的子项你可以自己去查看资料),然后就可以调用IoReportResourceUsage这个资源声明函数了,它的第三个参数就是你自己定义并且配置好的PCM_RESOURCE_LIST结构对象。所以不管你有多少地址段需要声明,只要调用一次IoReportResourceUsage函数就可以了。
另外,你在应用程序中调用I/O请求WriteFile和ReadFile与驱动进行通讯时,没有必要设端口地址,只要把你需要传输的数据的首地址及数据长度送下去就可以了。当然DeviceIoControl请求函数也可以替代上面两个读写请求。
[i]疾风青木[/i]
游客

返回顶部