Cha*_*kra 7 android android-source android-binder
在IServiceManager.cpp文件中,我看到了BnServiceManager::onTransact函数定义.
在该功能内部,有一个" addService"," listServices"等的调用.
我找不到那些函数的实现(在IServiceManager下声明).
有人可以告诉我,在哪里可以找到BnServiceManager的实现.
Sta*_*kER 10
它位于service_manager.c中,位于frameworks/base/cmds/servicemanager下.
您可能想知道他们如何找到servicemanager,它是binder的一个特性,在systemserver启动servicemanager(在service_manager.c中调用main)之后,servicemanager会将自己注册为binder的context_manager ioctl(bs->fd, BINDER_SET_CONTEXT_MGR, 0);.然后你总是可以从活页夹获得该服务.
因此,当其他服务想要使用服务管理器列出,查找或添加服务时,它将调用defaultServiceManager方法IServiceManager.cpp.该方法将查找句柄0以获取BpServiceManager.当你使用时BpServiceManager->addService,它不会调用BnServiceManager,这与CameraService等其他服务略有不同.绑定器将直接解析事务代码和调用do_add_service方法service_manager.c.您可能会注意到BpServiceManager使用的事务代码与svcmgr_handler中的事务代码完全相同.
//transaction code used by svcmgr_handler
enum {
SVC_MGR_GET_SERVICE = 1,
SVC_MGR_CHECK_SERVICE,
SVC_MGR_ADD_SERVICE,
SVC_MGR_LIST_SERVICES,
};
//transaction code used by BpServiceManager.
enum {
GET_SERVICE_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION, //0x00000001
CHECK_SERVICE_TRANSACTION,
ADD_SERVICE_TRANSACTION,
LIST_SERVICES_TRANSACTION,
};
Run Code Online (Sandbox Code Playgroud)
只有servicemanager这样工作,其他BpService会调用他们的BnService,例如,CameraService扩展了BnCameraService,因此它是CameraService的实际服务器端.BpCameraService将启动一个绑定器事务,绑定器事务最终将由BnCameraService处理,即CameraService.
您可以搜索整个AOSP,没有BnServiceManager的实现,因此无法调用它.
| 归档时间: |
|
| 查看次数: |
2488 次 |
| 最近记录: |