BnServiceManager 去哪了
来源:互联网 发布:网络布线怎么做 编辑:程序博客网 时间:2024/03/29 06:37
最近重新在撸binder的代码。
有个疑问,应用程序要获取服务必须依赖smgr,那它有是怎么样和smgr接上火的?毕竟在不同的进程空间。
发现有同学跟我有 同样的疑问。
http://www.oschina.net/question/698713_65247?sort=time
以addservice 为例,到底没找到实现。
189status_t BnServiceManager::onTransact(190 uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)191{192 //printf("ServiceManager received: "); data.print();193 switch(code) { 208 case ADD_SERVICE_TRANSACTION: {209 CHECK_INTERFACE(IServiceManager, data, reply);210 String16 which = data.readString16();211 sp<IBinder> b = data.readStrongBinder();212 status_t err = addService(which, b);213 reply->writeInt32(err);214 return NO_ERROR;215 } break;216 case LIST_SERVICES_TRANSACTION: {217 CHECK_INTERFACE(IServiceManager, data, reply);218 Vector<String16> list = listServices();219 const size_t N = list.size();220 reply->writeInt32(N);221 for (size_t i=0; i<N; i++) {222 reply->writeString16(list[i]);223 }224 return NO_ERROR;225 } break;226 default:227 return BBinder::onTransact(code, data, reply, flags);228 }229}230
BnServiceManager 实现在servicemanager
SVC_MGR_ADD_SERVICE:
- int svcmgr_handler(struct binder_state *bs,
- struct binder_txn *txn,
- struct binder_io *msg,
- struct binder_io *reply)
- {
- struct svcinfo *si;
- uint16_t *s;
- unsigned len;
- void *ptr;
- uint32_t strict_policy;
- int allow_isolated;
- ......
- switch(txn->code) {
- case SVC_MGR_ADD_SERVICE:
- s = bio_get_string16(msg, &len);//service name
- ptr = bio_get_ref(msg);//handle
- allow_isolated = bio_get_uint32(msg) ? 1 : 0;
- if (do_add_service(bs, s, len, ptr, txn->sender_euid, allow_isolated))
- return -1;
- break;
- ......
- }
总结下:正面分析更快速点,确定肯定在servicemanager 里,在结合binder驱动的代码BINDER_WRITE_READBINDER_SET_CONTEXT_MGR 这些就能很快找到了。RTFSC才是王道
老罗的参考
http://blog.csdn.net/luoshengyang/article/details/6627260
0 0
- BnServiceManager 去哪了
- 羊头哪去了
- 时间去哪了?
- 时间去哪了
- 去哪了 修订
- 飞机哪去了
- 时间去哪了
- QT去哪了?
- 好女孩哪去了
- DirectX SDK去哪了?
- 面试题:一块钱哪去了?
- 我的火车票哪去了??
- 我的帖子去哪了?
- 埃及狮身人面像的鼻子哪去了
- Tip - IE Developer Tools 哪去了?
- 我的学习状态哪去了
- 我的智商哪去了
- 我的代码哪去了?
- LightOJ-1395 A Dangerous Maze (II) (期望dp)
- java 虚拟机堆内存划分--新生代与老年代GC
- 功率放大器分类
- socketapi-socketbind
- CSS box model布局
- BnServiceManager 去哪了
- Python中使用XMLRPC(入门)
- css3动画
- css布局
- Linux基础(4)/Linux 目录结构及文件基本操作
- 『 Jack_a_Lent_Notes』---FlyBack基本工作原理
- 安卓zxing源代码修改标 特别注意21的版本
- 字母小游戏
- css基础