Binder机制,从Java到C (8. ServiceManager in Native)

在第三篇 Binder机制,从Java到C (3. ServiceManager in Java) 中,讲到ServiceManager的Stub端在Native,Proxy端在Java。
实际上,还要加一句:Native里也有Proxy(BpServiceManager),因为ServiceManager也是要服务于其他native service嘛。

ServiceManager是一个在init.rc里定义的一个system process,在系统启动的时候,它就启动了。如果它挂了,那么像zygote,media,surfaceflinger这些service就都要重启,可见它有多重要了吧。
看一下它在init.rc里的定义:

./out/target/product/generic/root/init.rc

 service servicemanager /system/bin/servicemanager
class core
user system
group system
critical
onrestart restart zygote
onrestart restart media
onrestart restart surfaceflinger
onrestart restart drm

servicemanager是唯一和Binder驱动直接交互的process。(系统里其他部分,都是通过libbinder使用统一的访问模型,就是Bp,Bn那些东西)。

所以ServiceManager的Stub的实现和一般的native service也不一样。它沒有去实现”BnServiceManager”,而是单独写了一个class。
在/frameworks/base/cmds/servicemanager/service_manager.c中,通过binder.c和binder驱动通信。

代码路径:
/frameworks/base/cmds/servicemanager/
    binder.h
    binder.c
    service_manager.c

上一篇:Java基础之面向对象以及其他概念


下一篇:weblogic开机启动脚本