1. 简介
对于mmap在用户态通过函数以下函数进行调用:
然后进入系统调用。
2. Kernel mmap实现1)然后进入系统调用,,其系统调用号为:
kernel/arch/arm/include/asm/unistd.h
#define __NR_mmap2(__NR_SYSCALL_BASE+192)
2)触发软中断
其ISR 代码位于kernel/arch/arm/kernel/entry-common.S的ENTRY(vector_swi), __NR_mmap2对应的函数为:sys_mmap2(位于linux/arch/arm/kernel/calls.S)
3)sys_mmap2的实现
位于kernel/arch/arm/kernel/entry-common.S,实现代码如下:
4) 调用sys_mmap_pgoff
在kernel/include/linux/syscalls.h中定义如下:
6)sys_mmap_pgoff实现在kernel/mm/mmap.c中实现如下:
其功能为:从当前进程中获取用户态可用的虚拟地址空间(vm_area_struct *vma),在mmap_region中真正获取vma,然后调用file->f_op->mmap(file, vma),调用具体的支持mmap的驱动来处理。
下面以binder驱动为例。
一个人,一条路,人在途中,心随景动,