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 { |