1. struct ashmem_area{ char name struct list_head unpinned_list struct file *file unsigned long prot_mask}
  2. static struct file_operations ashmem_fops = { .owner = THIS_MODULE, .open = ashmem_open, .release = ashmem_release, .read = ashmem_read, .llseek = ashmem_llseek, .mmap = ashmem_mmap, .unlocked_ioctl = ashmem_ioctl, .compat_ioctl = ashmem_ioctl, }
  3. GraphicBufferMap.cpp
    1. ashmem_create_region() (system/core/libcutils/Ashmem-dev.c)
  4. /dev/ashmem
  5. /mm/ashmem.c (linux kernel)
    1. kmem_cache *ashmem_area_cachep kmem_cache *ashmem_range_cachep
    2. ashmem_init(void)
      1. ashmem_area_cache = kmem_cache_create() ashmem_range_cache = kmem_cache_create()
      2. misc_register(&ashmem_misc)
    3. ashmem_open(struct inode *inode, struct file *file)
      1. struct ashmem_area *asma
      2. generic_file_open(inode,file)
      3. asma = kmem_cache_zalloc()
  6. backgorund
    1. misc device driver
    2. kmem_cache_create()
  7. Control Flow
    1. MemoryFile.java
    2. android_os_memoryfile.cpp[JNI]
    3. Ashmem-dev.c