TI中文支持网
TI专业的中文技术问题搜集分享网站

请问DM8168 DVR_RDK系统上,A8和DSP之间数据共享buffer地址转换异常问题如何解决?

    我们在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

赞(0)
未经允许不得转载:TI中文支持网 » 请问DM8168 DVR_RDK系统上,A8和DSP之间数据共享buffer地址转换异常问题如何解决?
分享到: 更多 (0)