阅读:1354回复:2
PCI卡上的SDRAM地址映射到用户区地址的问题!!
第一步:在pnp里面将获得的物理地址映射为核态地址
if ( ( SDRAMAddrKernel = MmMapIoSpace( SDRAMAddrPhysical,//从pnp管理器获得 0xfa000 FALSE ) ) != NULL ) 第二步:在[IRP_MJ_CREATE]消息里面将核态地址映射为用户地址 if((Mdl = IoAllocateMdl( (PVOID)(D_EXTENSION->SDRAMAddrKernel ),//这里是核态地址,通过物理地址转换过来的 0xfa000, FALSE, FALSE, NULL))==NULL) { ...... } //将MDL转换为用户地址 MmBuildMdlForNonPagedPool(Mdl); // MmProbeAndLockPages(Mdl,UserMode,IoModifyAccess); MemoryAddrUser = MmMapLockedPages( Mdl, UserMode); 可是最后得到的用户地址MemoryAddrUser 总是不能使用,里面的数据查看全是FFFF....,也就是分配不成功 而我利用在PC里面用MmAllocateContiguousMemory分配的内存,经过上面的步骤后可以合法使用,真是郁闷啊/? 谢谢各位帮忙了。 |
|
沙发#
发布于:2003-06-12 09:06
这个地址为何映射不对啊??
|
|
板凳#
发布于:2003-06-12 09:36
我最后所获得的SDRAM地址和PC上分配的内存块地址分别如下:
PC内存:0x00a10001 SDRAM地址:0x00b10000 同时我又在DEVICE_CONTROL里面又分配了一个地址,最后所获得的 SDRAM:0x00d10000 这让我感到很奇怪,同样的核态地址,为何所获得的用户地址不一样呢!! |
|