本文主要是介绍Binder机制原理学习笔记(4)_ServiceManager启动Binder分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
ServiceManager启动Binder
在Framwork源码解析(1)_Zygote进程启动流程一文中了解过,Android系统启动Zygote进程然后创建SystemService,再创建其他服务进程,ServiceManager 进程也是在这里启动的。查看/system/core/rootdir/init.rc
源码,可以找到启动servicemanager:
这里启动的是/frameworks/native/cmds/servicemanager
下的service_manager.c
文件,此目录下还有servicemanager.rc
配置,就是被zygote启动的。
查看service_manager.c
源码的main方法:
int main(int argc, char** argv){// ......if (argc > 1) {driver = argv[1];} else {// 设置默认binder驱动文件路径driver = "/dev/binder";}// 打开binder文件,并设置映射文件大小为128KBbs = binder_open(driver, 128*1024);// 成为上下文管理者if (binder_become_context_manager(bs)) {ALOGE("cannot become context manager (%s)\n", strerror(errno));return -1;}// ......// 开启binder循环binder_loop(bs, svcmgr_handler);return 0;
}
主要做了三件事:
- 设置默认binder驱动文件路径,root过的手机可以在/dev/binder目录下找到Binder驱动文件
- 打开binder驱动:binder_open
- 将ServiceManager注册成为 binder 服务管理者:binder_become_context_manager
- 开启binder循环:binder_loop
binder_open
找到同级目录下的frameworks/native/cmds/servicemanager/binder.c
文件,该文件中找到binder_open
方法:
struct binder_state *binder_open(const char* driver, size_t mapsize)
{struct binder_state *bs;struct
这篇关于Binder机制原理学习笔记(4)_ServiceManager启动Binder分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!