阅读:1283回复:4
为什么安装我的pci驱动后端口都不可用了?
pci卡上的寄存器在没有安装驱动前直接用READ/WRITE_PORT_XXX等可以正常读写,为什么安装了我的驱动后再读写此PCI卡上的寄存器值就全变成0XFF了?
在StartDevice里得到资源: PHYSICAL_ADDRESS phy; PULONG PortBase; ... case CmResourceTypePort: phy=resource->u.Port.Start; ... 这个端口应该是不需要mapping的,因为resource->Flags 有 CM_RESOURCE_PORT_IO 标志,而且我想如果需要mapping的话没有安装驱动前应该无法正常读写这些端口 然后PortBase = phy.LowPart 使用:READ_PORT_ULONG(PortBase); 好像别的例程也是这样处理的,为什么现在不管我写入什么读出来的值全是ff?而在装我的驱动之前直接操作这些pci端口反而是正常的? |
|
|
沙发#
发布于:2002-12-15 19:56
用户被禁言,该主题自动屏蔽! |
|
板凳#
发布于:2002-12-15 21:38
我已经用MmMapIoSpace转化:
dx->PortBase = (PUSHORT)MmMapIoSpace( dx->PHY_PortStartAddress, dx->PortLength, MmNonCached); 但是结果依旧,那些端口好像根本就不再响应我的任何操作,为什么?为什么干脆不装我的驱动的话,就什么转化都不需要,直接READ_PORT_XXX就可以? |
|
|
地板#
发布于:2002-12-16 16:47
是否有指定资源独占之类的函数,有的话,是否可以指定共享资源?
我用DriverWorks又写了一个相同pci卡的驱动并安装,在别的驱动里依然可以用READ_PORT_XXX等函数读写PCI卡的端口,为什么用DDK写的驱动却连它自己都不能访问端口? |
|
|
地下室#
发布于:2002-12-17 14:48
今天又看了ddk的资源定义,注意到资源里的共享标志:
resource->ShareDisposition,其取值为CmResourceShareDeviceExclusive或CmResourceShareShared,另外一个状态对wdm不可用,我检查了我的驱动得到资源的标志,都是CmResourceShareDeviceExclusive,也就是说都是独占性的资源,那么有什么方法可以让系统给驱动分配资源时设置为资源共享吗? |
|
|