我们在DSP上申请的共享数据buffer地址(地址是0x8fcf2e94),采用mmap()函数在A8上转换为ARM地址时,转换的结果(0xffffffff)应该不正确,请大侠们看看可能是什么原因?
— 共享数据buffer在C6XDSP上看到的地址:
memAddr is 0x8fcf2e94!!!
— 共享数据buffer在A8上调用mmap()函数转换后的地址
pCaliMemVirtAddr is 0xffffffff!!!
以下是代码:
int Demo_GetShareMemAddrAtA8( unsigned int memAddr )
{
unsigned int memAddr;
unsigned int memSize = 2048;
unsigned int mmapMemAddr;
unsigned int memOffset;
memfd = open("/dev/mem",O_RDWR|O_SYNC);
if(memfd < 0)
{
printf(" ERROR: /dev/mem open failed !!!\n");
return -1;
}
memAddr = 0x8fcf2e94;
printf(" memAddr is 0x%x!!!\n",memAddr);
memOffset = 0;
mmapMemAddr = memAddr – memOffset;
mmapMemSize = memSize + memOffset;
pCaliMemVirtAddr = mmap( (void *)mmapMemAddr,
mmapMemSize,
PROT_READ|PROT_WRITE|PROT_EXEC,MAP_SHARED,
memfd,
mmapMemAddr
);
printf(" pCaliMemVirtAddr is 0x%x!!!\n",pCaliMemVirtAddr);
if (pCaliMemVirtAddr==NULL)
{
perror(" ERROR: mmap() failed !!!\n");
close(memfd);
return -1;
}
return pCaliMemVirtAddr;
}
Chris Meng:
Lu Kingkuang,
请问你的代码里面为什么没有OSA_mapMem函数里面下面的几行代码,会不会是对齐的问题?
memOffset = physAddr & (sysconf(_SC_PAGE_SIZE) – 1); mmapMemAddr = physAddr – memOffset; mmapMemSize = OSA_align((memSize + memOffset),sysconf(_SC_PAGE_SIZE));
也可参考下面的信息:
http://bbs.csdn.net/topics/390219922