阅读:1456回复:9
关于如何分配isa设备的资源,20分!
我要做的isa卡的驱动中需要对isa卡的3个地址进行读写控制(0x200、0x201、0x202),我在驱动程序中是不是应该调用3次IoReportResourceUsage函数为其分配资源呢?具体应该怎么写啊?? :( :( :( :( :( :( :(
|
|
|
沙发#
发布于:2002-12-20 10:49
不需要
只要一个基地址和需要的地址长度就可以了 |
|
|
板凳#
发布于:2002-12-20 11:14
我要做的isa卡的驱动中需要对isa卡的3个地址进行读写控制(0x200、0x201、0x202),我在驱动程序中是不是应该调用3次IoReportResourceUsage函数为其分配资源呢?具体应该怎么写啊?? :( :( :( :( :( :( :( 因你的这三个端口地址是连续的,所以你只要调用一次IoReport...()且在其参数中指定基地址和地址范围就可以了。 但如你需要的端口地址有不连续的地址空间,则对不连续的地址空间必须分别调用IoReport...()。 仅些作为zydcat大侠的一点补充,也顺便蹭点分。^_^ :P |
|
|
地板#
发布于:2002-12-20 16:23
楼上两位大哥请问,那我在分配好资源后,处理irp包时如何去操作不同的地址?在驱动程序里如何确定irp要操作的地址?
我看一个驱动程序中分配资源过程如下: IoReportResourceUsage--》HalTranXXXXX-->MMMemoXXX 流程是否正确?为何要这么做? 有没有例程,只要处理irp包的部分就行!谢! 高分赠高手! :( :( :( :) :) :) |
|
|
地下室#
发布于:2002-12-20 16:35
你可以先参考一个DS提供的例子PORTIO,位于DRIVERWORKS\\EXAMPLES\\NT\\PORTIO目录下,
其实用这个驱动就可在NT下和2000下实现对IO端口(当然也包括ISA的IO端口)的读写了。 |
|
|
5楼#
发布于:2002-12-20 16:35
在分配资源时做了地址转换,那我我在处理irp包时如何确定readXXXX或WriteXXX的地址呢? :(
|
|
|
6楼#
发布于:2002-12-20 16:43
在分配资源时做了地址转换,那我我在处理irp包时如何确定readXXXX或WriteXXX的地址呢? :( 当然得应用程序告诉驱动程序要读哪个端口了。 |
|
|
7楼#
发布于:2002-12-20 17:10
是不是应用程序调用DeviceIoControl时的第三个参数就是地址的偏移量?
大概明白点了,是不是所有的驱动程序在为其分配资源时都要做地址转换!但在调用ReadXXX或WRITEXXX函数时又不使用地址转换,不太明白这一点!请多指教! 给分了!!! :D :D :D :D :D :D :D :D :D :( |
|
|
8楼#
发布于:2002-12-20 17:17
给了一次分好象就不能再给了,那个给分按钮没了,今天先下班了,下次补上,我是石家庄的你在哪工作?是专门做驱动开发的吗?
|
|
|
9楼#
发布于:2002-12-21 12:56
你可以自己定义一个设备信息结构,如何在该结构中包含你需要的任何地址段(包括首地址和长度),当需要进行资源声明,你只要把你的设备信息结构对象中的所以资源(端口地址和中断)读入到一个PCM_RESOURCE_LIST结构对象中(该结构对象可以自己定义,结构中的子项你可以自己去查看资料),然后就可以调用IoReportResourceUsage这个资源声明函数了,它的第三个参数就是你自己定义并且配置好的PCM_RESOURCE_LIST结构对象。所以不管你有多少地址段需要声明,只要调用一次IoReportResourceUsage函数就可以了。
另外,你在应用程序中调用I/O请求WriteFile和ReadFile与驱动进行通讯时,没有必要设端口地址,只要把你需要传输的数据的首地址及数据长度送下去就可以了。当然DeviceIoControl请求函数也可以替代上面两个读写请求。 |
|
|