Android PMEM驱动研究(一)

上一篇 / 下一篇  2013-03-05 08:51:21 / 个人分类:Linux驱动

PMEM并不像Ashmem和binder那样,选中就可以被Android系统使用,他是一个platform设备,需要注册才可以使用.
  下面以S3C6410为例,描述使用流程:
  1)选中内核选项
  Device Drivers --->
   Misc devices --->
      Android pmem allocator
  2)修改你的dev.c注册文件,添加如下内容:

java代码:
  1. #ifdef CONFIG_ANDROID_PMEM
  2. static struct android_pmem_platform_data android_pmem_pdata = {
  3. .name = "pmem",
  4. .start = PMEM_BASE,
  5. .size = PMEM_BASE_SIZE,
  6. .no_allocator = 1,
  7. .cached = 1,
  8. };

  9. static struct android_pmem_platform_data android_pmem_adsp_pdata = {
  10. .name = "pmem_adsp",
  11. .start = PMEM_ADSP_BASE,
  12. .size = PMEM_ADSP_BASE_SIZE,
  13. .no_allocator = 0,
  14. .cached = 0,
  15. };

  16. struct platform_device android_pmem_device = {
  17. .name = "android_pmem",
  18. .id = 0,
  19. .dev = { .platform_data = &android_pmem_pdata },
  20. };

  21. struct platform_device android_pmem_adsp_device = {
  22. .name = "android_pmem",
  23. .id = 1,
  24. .dev = { .platform_data = &android_pmem_adsp_pdata },
  25. };
  26. #endif
复制代码
   3)在驱动注册列表中添加如下内容:

java代码:
  1. static struct platform_device *smdk6410_devices[] __initdata = {
  2. #ifdef CONFIG_ANDROID_PMEM
  3. &android_pmem_device,
  4. &android_pmem_adsp_device,
  5. #endif
  6. };
复制代码
4)分配物理地址我用了128MB的最后8MB
  #define PMEM_BASE 0x57900000
  #define PMEM_BASE_SIZE SZ_1M*4
  #define PMEM_ADSP_BASE 0x57c00000
  #define PMEM_ADSP_BASE_SIZE SZ_1M*4
  5)重新编译内核
  6)修改bootargs 减少Linux可管理的MEM
  MEM=120MB
  7)重新启动系统
  启动信息:
  pmem: 1 init
  pmem_adsp: 0 init
  8)查看dev目录,多了pmem和pmem_adsp

TAG:

 

评分:0

我来说两句

Open Toolbar