- struct ashmem_area{
char name
struct list_head unpinned_list
struct file *file
unsigned long prot_mask}
- 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,
}
-
GraphicBufferMap.cpp
- ashmem_create_region()
(system/core/libcutils/Ashmem-dev.c)
- /dev/ashmem
-
/mm/ashmem.c
(linux kernel)
- kmem_cache *ashmem_area_cachep
kmem_cache *ashmem_range_cachep
-
ashmem_init(void)
- ashmem_area_cache = kmem_cache_create()
ashmem_range_cache = kmem_cache_create()
- misc_register(&ashmem_misc)
-
ashmem_open(struct inode *inode, struct file *file)
- struct ashmem_area *asma
- generic_file_open(inode,file)
- asma = kmem_cache_zalloc()
-
backgorund
- misc device driver
- kmem_cache_create()
-
Control Flow
- MemoryFile.java
- android_os_memoryfile.cpp[JNI]
- Ashmem-dev.c