您的位置:首页 > 其它

adriod HAL层 内核空间与用户空间内存共享

2011-11-02 09:18 246 查看

1、内核部分
unsignedlonggMmapAddr;
unsignedlonglMmapAddr;

staticintxxx_mmap(structfile*filp,structvm_area_struct*vma)
{
vma->vm_pgoff=((unsignedlong)virt_to_phys(gMmapAddr))>>PAGE_SHIFT;

printk("vma->vm_pgoff=%lx\n",vma->vm_pgoff);

if(remap_pfn_range(vma,vma->vm_start,vma->vm_pgoff,sizeof(gMmapAddr),vma->vm_page_prot))
{
printk("remap_pfn_rangeerror\n");
return-EAGAIN;
}
return0;
}

staticint__initshareMmap_init(void)
{

gMmapAddr=PAGE_ALIGN((UINT32)lMmapAddr);//页对齐,重要

return0;

}


EXPORT_SYMBOL_GPL(gMmapAddr);

这后可以引用gMmapAddr


===================================================================================================================================

===================================================================================================================================


2、应用层


unsignedlong*comAddr;


//打开和共享内存驱动
fd=open("/dev/map",O_RDWR);
if(fd<0)
{
returnFALSE;
}

comAddr=(unsignedlong*)mmap(NULL,sizeof(unsignedlong),PROT_READ|PROT_WRITE|PROT_EXEC,MAP_SHARED,fd,0);


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: