Binder源码解析(一)
Binder系列传送门
Binder的jni方法注册
1. zygote启动
1.1 启动zygote进程
zygote是由init进程通过解析 init.zygote.rc 文件而创建的,zygote所对应的可执行程序app_process,所对应的源文件是 app_main.cpp ,进程名为zygote。
1  | // system/core/rootdir/init.zygote32.rc  | 
1.2 执行app_main.cpp 中的main方法
启动zygote的入口函数是 app_main.cpp 中的main方法。
1  | frameworks/base/cmds/app_process/app_main.cpp  | 
1.3 AndroidRuntime::start
调用startReg方法来完成jni方法的注册。
1  | frameworks/base/core/jni/AndroidRuntime.cpp  | 
2 register_android_os_Binder
1  | frameworks/base/core/jni/android_util_Binder.cpp  | 
2.1 int_register_android_os_Binder
1  | //843  | 
2.2 int_register_android_os_BinderInternal
1  | frameworks/base/core/jni/android_util_Binder.cpp  | 
2.3 int_register_android_os_BinderProxy
1  | frameworks/base/core/jni/android_util_Binder.cpp  | 
binder驱动

1. binder_init
1  | kernel/drivers/staging/android/binder.c  | 
2. binder_open
1  | kernel/drivers/staging/android/binder.c  | 
3. binder_mmap
1  | kernel/drivers/staging/android/binder.c  | 
4. binder_ioctl
1  | kernel/drivers/staging/android/binder.c  | 
数据结构
1. file_operations
1  | static const struct file_operations binder_fops = {  | 
2. binder_proc
每个进程调用open()打开binder驱动都会创建该结构体,用于管理IPC所需的各种信息。
1  | struct binder_proc {  | 
3. binder_node
1  | struct binder_node {  | 
4. binder_buffer
1  | struct binder_buffer {  |