WEB开发网
开发学院手机开发Android 开发 Android PMEM驱动研究 在应用程序中使用PMEM 阅读

Android PMEM驱动研究 在应用程序中使用PMEM

 2010-05-14 16:52:00 来源:WEB开发网   
核心提示:size = 4<<20; // 4 MiB}else{size = region.len;}pmem_base = mmap(0, size, PROT_READ|PROT_WRITE, MAP_SHARED, pmem_fd, 0);//mmap操作if (pmem_base == MAP_FAILED

size = 4<<20; // 4 MiB

}

else

{

size = region.len;

}

pmem_base = mmap(0, size, PROT_READ|PROT_WRITE, MAP_SHARED, pmem_fd, 0);//mmap操作

if (pmem_base == MAP_FAILED)

{

pmem_base = 0;

close(pmem_fd);

pmem_fd = -1;

printf("mmap pmem error! ");

}

if ( ioctl(pmem_fd, PMEM_GET_PHYS, ®ion) < 0)//获取物理地址

{

printf("PMEM_GET_PHYS failed ");

}

}

其实第一个ioctl无用,只是为了获取长度,也可以自己指定长度。

经过以上操作,region.offset为物理地址,其空间和虚拟地址pmem_base相对应。

在程序中填充pmem_base数据,配置VPU、GPU时使用region.offset该物理地址。

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

最后来看看驱动调用流程

1)open操作

[drivers/misc/pmem.c:pmem_open:336] current 55 file c7355c80(1)

2)mmap 会自动调用allocate

[drivers/misc/pmem.c:pmem_allocate:398] order 0

[drivers/misc/pmem.c:pmem_map_pfn_range:511] map offset 0 len 10000

3)ioctl PMEM_GET_PHYS 感觉物理地址是根据pid来确定的

[drivers/misc/pmem.c:pmem_ioctl:1081] get_phys

pmem: request for physical address of pmem region from process 55.

4)munmap

[drivers/misc/pmem.c:pmem_vma_close:555] current 55 ppid 47 file c7355c80 count 2

上一页  1 2 

Tags:Android PMEM 驱动

编辑录入:coldstar [复制链接] [打 印]
赞助商链接