阅读:1944回复:4
关于在WDM驱动程序编写对于PCI板卡MEMORY的访问:
在响应IRP_MN_START_DEVICE的功能代码时调用PnpStartDeviceHandler(IN PDEVICE_OBJECT fdo, IN PIRP Irp);
其中有两行代码: 1---->ListResources(IrpStack->Parameters.StartDevice.AllocatedResources); 2---->status = StartDevice( dx, IrpStack->Parameters.StartDevice.AllocatedResourcesTranslated); 中间涉及到AllocatedResources和AllocatedResourcesTranslated两个数据,可否这样理解: 段一: PCM_PARTIAL_RESOURCE_LIST list = &AllocatedResources->List[0].PartialResourceList; PCM_PARTIAL_RESOURCE_DESCRIPTOR resource = list->PartialDescriptors; ..... case CmResourceTypeMemory: { PHYSICAL_ADDRESS MemBase = resource->u.Memory.Start; ULONG PortLength = resource->u.Memory.Length; break; } 该段中的MemBase是BIOS和PNP管理器为PCI板卡上MEMORY分配的原始地址;(所谓原始地址是不是总线地址?) 段二: PCM_PARTIAL_RESOURCE_LIST list = &AllocatedResourcesTranslated->List[0].PartialResourceList; PCM_PARTIAL_RESOURCE_DESCRIPTOR resource = list->PartialDescriptors; ..... case CmResourceTypeMemory: { PHYSICAL_ADDRESS MemBase = resource->u.Memory.Start; ULONG PortLength = resource->u.Memory.Length; break; } 该段中的MemBase是不是BIOS和PNP管理器为PCI板卡上MEMORY分配的原始地址转换后得到的物理地址? 如果此时的MemBase = 0xffffff00,用READ_REGISTER_ULONG()时,能否直接使用MemBase?是否需要MmMapIoSpace()? //----------------------------------- 另外,当将PCI板卡的驱动装上后查看资源:我的电脑->属性->硬件->设备管理器:看到系统为板卡分配的内存资源为:0xffefffc0 --0xffefffff;那么这个地址是属于什么地址?总线地址,物理地址还是虚拟地址? |
|
|
沙发#
发布于:2004-06-11 22:12
没有人回答,是不是我的问题没表述清楚?
请高人出手啊。 |
|
|
板凳#
发布于:2004-06-12 12:47
真的如此狼狈吗?
|
|
|
地板#
发布于:2004-06-17 14:36
有人能够给一点点提示吗?
|
|
|
地下室#
发布于:2004-06-17 17:56
建议删掉此帖。
|
|
|