Android PMEM驱动研究 在应用程序中使用PMEM
2010-05-14 16:52:00 来源:WEB开发网======================================================================================
Android PMEM主要有两个作用(来自android mail list):
1. GPU or VPU buffers shared with CPU core
2. Android service heap.
其中1是不能cache的,2可以cache,平台设备注册中 cached = X即控制是否可以被cache。
=======================================================================================
简单看PMEM驱动,主要有以下内容:
pmem_init()驱动加载
|
pmem_probe()platform加载
|
pmem_setup()
初始化 pmem[id]
启动时输出信息,格式为[名称][是否可以被cache] eg:pmem_adsp: 0 init
misc_register()
初始化所有的bitmap
通过ioremap获取所有pmem[id].vbase
pmem_map() 提供mmap接口
pmem_ioctl()
#define PMEM_GET_PHYS 获取物理地址
#define PMEM_MAP pmem_remap()
#define PMEM_GET_SIZE pmem_getsize()
#define PMEM_UNMAP pmem_remap(®ion, file, PMEM_UNMAP);
#define PMEM_ALLOCATE 分配pmem空间,len是参数,如果文件已被分配则失败
#define PMEM_CONNECT 将一个pmem file与其他相连接
#define PMEM_GET_TOTAL_SIZE 返回pmem region的全部尺寸
有篇文章值得参考http://linux.chinaunix.net/techdoc/net/2009/04/21/1108452.shtml
=======================================================================================
应用程序中使用PMEM,有待深入研究
#include "android_pmem.h"
int pmem_fd;
void *pmem_base;
unsigned int size;
struct pmem_region region;
pmem_fd = open("/dev/pmem_adsp", O_RDWR, 0);//打开设备,为了操作硬件引擎,要noncache的
if (pmem_fd >= 0)
{
if (ioctl(pmem_fd, PMEM_GET_TOTAL_SIZE, ®ion) < 0) //获取全部空间
{
printf("PMEM_GET_TOTAL_SIZE failed ");
更多精彩
赞助商链接