ServiceManager & Binder 启动 · 深度剖析
📚
30章 · 从入门到实战
01
Binder初探
概念
什么是Binder?为什么Android选择Binder?Binder在系统中的位置
02
ServiceManager的角色
DNS
ServiceManager是什么?如何成为Binder通信的DNS?
03
Binder驱动入门
数据结构
binder_proc, binder_node, binder_ref, binder_buffer
04
Binder内存模型
mmap
一次拷贝原理 · mmap在Binder中的作用
05
ServiceManager启动流程
init.rc
init.rc如何拉起servicemanager进程?
06
ServiceManager循环
binder_loop
binder_loop深度解析,等待和处理请求
07
Binder协议基础
BC/BR
BC_和BR_协议,命令与响应机制
08
服务注册流程(上)
addService
服务端通过ServiceManager.addService()注册自己
09
服务注册流程(下)
驱动处理
Binder驱动如何处理ADD_SERVICE_TRANSACTION
10
服务获取流程
getService
客户端如何通过getService()获取服务?
11
Binder线程池
binder_thread
线程池启动与管理,binder_thread_read工作机制
12
引用计数管理
强/弱指针
强指针、弱指针在Binder对象中的管理
13
死亡通知机制
linkToDeath
监听服务端进程死亡 · linkToDeath/unlinkToDeath
14
权限校验
SELinux
SELinux与Binder交互,检查调用方权限
15
Context Manager特殊性
句柄0
为什么ServiceManager的句柄是0?
16
Binder节点与引用
node/ref
binder_node与binder_ref的创建与查找
17
事务完整生命周期
transaction
从binder_transaction到buffer_release
18
异步与同步
oneway
oneway标记如何影响Binder调用?
19
调试与监控
dumpsys
dumpsys, lsof, /proc/binder/proc 等工具
20
常见问题与优化
TooLarge
Binder Transaction Too Large、线程耗尽排查
21
Java层封装
AIDL
AIDL生成Java代码 · BinderProxy/BinderInternal
22
C++层封装
BBinder
BBinder, BpBinder, IPCThreadState工作原理
23
ServiceManager C++实现
IServiceManager
IServiceManager, BpServiceManager, BnServiceManager
24
Binder驱动初始化
binder_init
binder_init函数,创建misc设备和proc文件系统
25
ioctl接口详解
BINDER_WRITE_READ
BINDER_WRITE_READ, SET_CONTEXT_MGR等命令
26
并发处理
锁机制
binder_main_lock, proc->inner_lock
27
冻结与恢复
进程冻结
进程冻结时Binder如何处理待处理事务?
28
匿名共享内存
Ashmem
Ashmem与Binder的结合使用场景
29
Binder演进历史
Binderfs
从早期Android到现代版本的Binder优化
30
实战:手写简易ServiceManager
C语言
用C实现最小化服务注册与发现系统