This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

请问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;
}

  • 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