caddr_t addr = mmap(NULL, PAGE_SIZE, PROT_WRITE, MAP_SHARED, f, paddr & PAGE_MASK); 内核中实现: static int led_mmap(struct file *f, struct vm_area_struct *vma) { if (remap_pfn_range(vma, vma->start, (EPLD_BASE_ADDR + vma->vm_pgoff) >> PAGE_SHIFT, vma->vm_end – vma...
pgoff_t pglen = (end - addr) >> PAGE_SHIFT; struct vm_area_struct *area, *next; /* * We later require that vma->vm_flags == vm_flags, * so this tests vma->vm_flags & VM_SPECIAL, too. */ if (vm_flags & VM_SPECIAL) return NULL; if (prev)//指定了先驱vma,则获取先驱vma...
unsigned long vm_pgoff; /* Offset (within vm_file) in PAGE_SIZE units */ struct file * vm_file; /* File we map to (can be NULL). */ void * vm_private_data; /* was vm_pte (shared mem) */ #ifdef CONFIG_SWAP atomic_long_t swap_readahead_info; #endif #ifndef CONFIG_MMU str...
const struct vm_operations_struct *vm_ops;---VMA操作函数合集,常用于文件映射。 /* Information about our backing store: */ unsigned long vm_pgoff; /* Offset (within vm_file) in PAGE_SIZE-指定文件映射的偏移量,单位是页面。 units, *not* PAGE_CACHE_SIZE */ struct file * vm_file; /* Fi...
VMA的数据结构vm_area_struct如下。 /** This struct defines a memory VMM memory area. There is one of these* per VM-area/task. A VM area is any part of the process virtual memory* space that has a special rule for the page-fault handlers (ie a shared* library, the executable area ...
unsigned long vm_pgoff; /* 映射文件的偏移量,以PAGE_SIZE为单位 */ struct file * vm_file; /* 映射的文件,没有则为NULL */ void * vm_private_data; /* was vm_pte (shared mem) */ unsigned long vm_truncate_count;/* truncate_count or restart_addr */ ...
vma->vm_pgoff = vma->vm_start >>PAGE_SHIFT; }if(find_vma_links(mm, vma->vm_start, vma->vm_end,&prev, &rb_link, &rb_parent))return-ENOMEM;if((vma->vm_flags & VM_ACCOUNT) &&security_vm_enough_memory_mm(mm, vma_pages(vma)))return-ENOMEM;vma_link(mm, vma, prev, rb_link...
对于可执行文件及进程所依赖的各种so动态链接库,是execve依次调用do_execve_common、search_binary_handler、load_elf_binary、elf_map,然后调用mmap_region申请vm_area_struct对象。 unsignedlongmmap_region(struct file *file,unsignedlongaddr,unsignedlonglen,vm_flags_tvm_flags,unsignedlongpgoff,struct list_head ...
> physp = (vma->vm_pgoff << PAGE_SHIFT) + (virtp - vma->vm_start); > + up_read(¤t->mm->mmap_sem); > } else { > /* otherwise, use get_user_pages() for general userland pages */ > int res, nr_pages = 1; ...
Search or jump to... Search code, repositories, users, issues, pull requests... Provide feedback We read every piece of feedback, and take your input very seriously. Include my email address so I can be contacted Cancel Submit feedback Saved searches Use saved searches to filter your...