Linux Kernel 及 binder mmap实现

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驱动为例。

一个人,一条路,人在途中,心随景动,

Linux Kernel 及 binder mmap实现

相关文章:

你感兴趣的文章:

标签云: