airy1727
驱动牛犊
驱动牛犊
  • 注册日期2003-01-20
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分141分
  • 威望25点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
阅读:1354回复:2

PCI卡上的SDRAM地址映射到用户区地址的问题!!

楼主#
更多 发布于:2003-06-11 21:19
第一步:在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分配的内存,经过上面的步骤后可以合法使用,真是郁闷啊/?

谢谢各位帮忙了。
airy1727
驱动牛犊
驱动牛犊
  • 注册日期2003-01-20
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分141分
  • 威望25点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-06-12 09:06
这个地址为何映射不对啊??
airy1727
驱动牛犊
驱动牛犊
  • 注册日期2003-01-20
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分141分
  • 威望25点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-06-12 09:36
我最后所获得的SDRAM地址和PC上分配的内存块地址分别如下:

PC内存:0x00a10001
SDRAM地址:0x00b10000

同时我又在DEVICE_CONTROL里面又分配了一个地址,最后所获得的
SDRAM:0x00d10000  
这让我感到很奇怪,同样的核态地址,为何所获得的用户地址不一样呢!!
游客

返回顶部