From 0775ad03c8f368199aa0d31ca3c5e1ea0bed93e9 Mon Sep 17 00:00:00 2001 From: Omooo <869759698@qq.com> Date: Mon, 18 May 2020 12:47:58 +0800 Subject: [PATCH] =?UTF-8?q?finish=20Binder=20=E8=AE=BE=E5=A4=87=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E7=9A=84=E5=88=9D=E5=A7=8B=E5=8C=96=E3=80=81=E6=89=93?= =?UTF-8?q?=E5=BC=80=E5=92=8C=E5=86=85=E5=AD=98=E6=98=A0=E5=B0=84=E8=BF=87?= =?UTF-8?q?=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...始化过程.md => Binder 设备文件的初始化、打开和内存映射过程.md} | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) rename blogs/Android/Framework/源代码情景分析/{Binder 设备的初始化过程.md => Binder 设备文件的初始化、打开和内存映射过程.md} (64%) diff --git a/blogs/Android/Framework/源代码情景分析/Binder 设备的初始化过程.md b/blogs/Android/Framework/源代码情景分析/Binder 设备文件的初始化、打开和内存映射过程.md similarity index 64% rename from blogs/Android/Framework/源代码情景分析/Binder 设备的初始化过程.md rename to blogs/Android/Framework/源代码情景分析/Binder 设备文件的初始化、打开和内存映射过程.md index 981fc14..950a44e 100755 --- a/blogs/Android/Framework/源代码情景分析/Binder 设备的初始化过程.md +++ b/blogs/Android/Framework/源代码情景分析/Binder 设备文件的初始化、打开和内存映射过程.md @@ -1,5 +1,5 @@ --- -Binder 设备文件 +Binder 设备文件的初始化、打开和内存映射过程 --- #### 初始化过程 @@ -18,4 +18,10 @@ Binder 设备的初始化过程是在 Binder 驱动程序的初始化函数 bind 进程打开了设备文件 /dev/binder 之后,还必须要调用函数 mmap 把这个设备文件映射到进程的地址空间,然后才可以使用 Binder 进程间通信机制。设备文件 /dev/binder 对应的是一个虚拟设备,将它映射到进程的地址空间的目的并不是对它的内容感兴趣,而是为了为进程分配内核缓冲区,以便它可以用来传输进程间通信数据。 -当进程调用函数 mmap 将设备文件 /dev/binder 映射到自己的地址空间时,Binder 驱动程序中的函数 binder_mmap 就会被调用。 \ No newline at end of file +当进程调用函数 mmap 将设备文件 /dev/binder 映射到自己的地址空间时,Binder 驱动程序中的函数 binder_mmap 就会被调用。 + +Binder 驱动程序最多可以为进程分配 4M 内核缓冲区来传输进程间通信数据。Binder 驱动程序为进程分配的内核缓冲区在用户空间只可以读,而不可以写。 + +Binder 驱动程序为进程分配的内核缓冲区有两个地址,其中一个是用户空间地址,另一个是内核空间地址。进程通过用户空间地址来访问这块内核缓冲区的内容,而 Binder 驱动程序通过内核空间地址来访问这块内核缓冲区的内容。由于它们是连续的,并且起始地址相差一个固定值,因此,只要知道其中的一个地址,就可以方便的计算出另外一个地址。 + +Binder 驱动程序为进程分配的内核缓冲区即为一系列物理页面,它们分别被映射到进程的用户地址空间和内核地址空间。当 Binder 驱动程序需要将一块数据传输给一个进程时,它就可以先把这块数据保存在为该进程所分配的一块内核缓冲区中,然后再把这块内核缓冲区的用户空间地址告诉进程,最后进程就可以访问到里面的数据了。这样做的好处便是不需要将数据从内核空间复制到用户空间,从而提高了数据的传输效率。 \ No newline at end of file