Binder驱动

原文链接https://www.jianshu.com/p/5dd4c5a8333a

要学习Android进程间通信那么第一步要掌握的就是Binder驱动,Binder驱动提供很多命令其中最常用的三个命令是open,mmap,ioctl,分别看一下这三个命令都是干啥的

binder_open

上层需要访问binder驱动时,首先需要打开/dev/binder结点。实现是在binder_open中
Binder驱动会在/proc的系统目录下生成管理信息,每个进程都是自己独立的管理信息,比如/proc/binder/proc/<PID>
初始化binder_proc,初始完成后添加到Binder的全局管理中binder_procs队列

总结
1,Binder驱动给用户创建了一个它自己的binder_proc实体,这个binder_proc的实体就是以后Binder设备操作的基础

binder_mmap

 

 

mmap主要是用于映射内核内存空间和用户内存空间的,映射如下

Binder映射关系.png

 

首先我们要明白的是Android中的进程分为用户区域和内核区域,mmap做映射是将用户区域的内存和内存区域的内存映射到同一片物流内存上,如图中B进程映射一样

然后,将A进程的内核空间内存也映射到同一片物理内存上,将要共享的内容直接使用copy_from_user从用户空间内存复制到内存空间内存上,这样就可以进程间通信了,同时也保证了Binder只需复制一次

binder_proc有三颗红黑树负责管理内存
1,list_head_buffers所有内存块都要注册在这
2,rb_root_free_buffers没有分配物理内存的空间空闲内存块
2,rb_root_allocated_buffers分配了物理内存的内存块

应用程序申请内存最大申请4m,在分配的时候只会事先分配一页也就是4k,然后根据需求在分配

总结
1,mmap就是为了实现用户空间内存和内核空间内存映射

binder_ioctl

这个方法主要是用于实现Binder驱动的读写,以及各种协议
最重要的是BINDER_WRITE_READ可用于读写Binder驱动
BC_INCREFS
BC_ACQUIRES
BC_RELEAS
BC_DECREFS
上面的用于控制引用计数
BC_FREE_BUFFER 使用完用于释放binder_buffer
BC_TRANSACTION
BC_REPLY
用于处理客户与服务器交互

总结
1,ioctl用与操作Binder驱动

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值