Binder 底层通信原理
2020-08-14 14:00:01 16 举报
Binder机制(上) Native层Binder通信原理
作者其他创作
大纲/内容
阻塞
通过模板函数创建
binder_loop函数
Binder客户端请求过程
BC_REPLY_COMPLE
self
ioctl函数
注册服务
客户端进程
回复数据包
writeTransactionData
发送数据包mOut
Binder驱动
中断
4.验证code
数据主体Binder_read_write结构体
命令BC_TRANSTION
命令BC_REPLY
获取服务
ServiceManager
Parcel
5.接收回复BR_REPLY
附带命令为ADD_SERVICE_TRANSACTION
接收数据的reply
open函数
1.让服务端进入消息循环2.挂起binder线程读取数据3.设置回调函数svcmgr_handler
mmap函数
open_binder
注册自己成为Binder的管理类
直接获取或者创建
BpBinder
main函数
mmap
ioctl
把数据封装成Parcel
waitForResponse
Ioctl
MediaPlayService
挂起函数
IPCThreadState
IServiceManager
其内部会将BC_TRANSACTION和binder_transaction_data结构体写入到mOut中BC_TRANSACTION开始BR_TRANSACTION结束
BpServiceManager
transact
5.BC_REPLY
binder_loop
binder驱动
Parcel data
6.客户端接受回复BR_TRANSACTION_COMPLE
binder_parse
init进程
Binder服务端响应过程
服务获取过程
开启消息循环队列
BR_TRANSACTION_COMPLE
Native层的Binder机制
1. 开始发送BC_TRANSTION
3.BR_TRANSACTION
2.开始接收BR_TRANSACTION
defaultServiceManager
服务注册过程
4.开始回复BC_REPLY
ServiceManager服务端
6.BR_REPLY
open(/dev/binder)
binder.c
数据主体binder_transaction_data结构体
1. 数据封装进parcel
需要发送的data
1.todo队列2.wait队列3.传输的结构体binder_proc
3.发送成功返回BR_TRANSACTION_COMPLE
1.申请一个4K的虚拟空间2.申请1个page(4k)的物理空间3.虚拟空间和屋里空间映射
wait
1.休眠状态2.从proc结构体获取binder线程3.binder数据的读写操作
ProcessState
0 条评论
回复 删除
下一页