- 博客(11)
- 资源 (1)
- 收藏
- 关注
原创 binder学习笔记(十)—— 穿越到驱动层
Binder驱动层的代码在kernel/goldfish/drivers/staging/android下的binder.c和binder.h。Android源码是不带Linux内核的,驱动正是在这个内核里,需要单独下载,出门左转参见《Anrdoid源码、内核编译》。驱动的相关知识先不在这里展开了,那又是一个庞大的体系,以后再啃。直奔我们的主题——客户端为test()组织的请求数据是: 驱动程
2016-05-28 22:53:01 1421
原创 Binder学习笔记(九)—— 服务端如何响应Test()请求 ?
从服务端代码出发,TestServer.cppint main() { sp < ProcessState > proc(ProcessState::self()); sp < IServiceManager > sm = defaultServiceManager(); sm->addService(String16("service.testservice"), new
2016-05-15 15:30:10 4699
原创 Binder学习笔记(八)—— 客户端如何组织Test()请求 ?
还从客户端代码看起TestClient.cpp:14int main() { sp < IServiceManager > sm = defaultServiceManager(); // new BpServiceManager(new BpBinder(0)); sp < IBinder > binder = sm->getService(String16("service
2016-05-15 15:27:18 686
原创 Binder学习笔记(七)—— ServiceManager如何响应addService请求 ?
有了《ServiceManager如何响应checkService请求》的探索,研究addService就轻车熟路了,中间过程不再多说,仅把关键节点列出: frameworks/native/cmds/servicemanager/service_manager.c:347int main(int argc, char **argv){ …… binder_loop(bs, sv
2016-05-15 15:25:33 880
原创 Binder学习笔记(六)—— binder服务端是如何组织addService数据的?
在checkService的调查中我们知道客户端向ServiceManager请求服务名,ServiceManager根据服务名遍历本地链表,找到匹配的handle返回给客户端。这个handle显然是由服务端注册的,这个handle究竟是什么?要先搞清楚这个问题,必须研究服务端和ServiceManager是如何共同完成一次addService操作的。我们从服务端代码出发。TestService.c
2016-05-15 15:24:08 541
原创 Binder学习笔记(五)—— Parcel是怎么打包的?
前文中曾经遇到过Parcel,从命名上知道他负责数据打包。在checkService的请求/响应体系中,Parcel只打包了基本数据类型,如Int32、String16……后面还要用于打包抽象数据类型flat_binder_object,这会稍微复杂一些,因此有必要拿出来单独研究。我们从Parcel::writeInterfaceToken(…)追起,它的层层调用关系如下,这些函数都在framewo
2016-05-15 15:22:50 1036
原创 Binder学习笔记(四)—— ServiceManager如何响应checkService请求
这要从frameworks/native/cmds/servicemanager/service_manager.c:347的main函数说起,该文件编译后生成servicemanager。int main(int argc, char **argv){ struct binder_state *bs; bs = binder_open(128*1024); // 打开/dev/b
2016-05-15 15:20:45 5238
原创 inder学习笔记(三)—— binder客户端是如何组织checkService数据的 ?
起点从TestClient.cpp的main函数发起:int main() { sp < IServiceManager > sm = defaultServiceManager(); sp < IBinder > binder = sm->getService(String16("service.testservice")); sp<ITestService> cs = i
2016-05-15 15:15:46 1272
原创 使用hexo搭建博客并上传GitHub
之前在博客园、简书、CSDN等地儿都开过博,一篇文章写好了,我希望能在几个平台可以同步发布,可是操作起来成本不低。几个平台下的富文本编辑器比较起来还是博客园更顺手,看着更舒服,尤其是代码块的操作灵活、准确。而CSDN对代码块内的文字加粗、修改字色后就会出现html文无法解析的情况,混杂着代码和html文本实在太难看了,后来我知道原来是Markdown的代码块规则限制。而且CSDN刚刚才取消了提交文章
2016-05-14 20:23:39 1900
原创 Binder学习笔记(二)——defaultServiceManager()返回了什么?
不管是客户端还是服务端,头部都要先调用sp sm = defaultServiceManager();defaultServiceManager()都干了什么,它返回的是什么实例呢?该函数定义在frameworks/native/libs/binder/IserviceManager.cpp:33sp defaultServiceManager(){ if
2016-05-09 21:50:18 2021
原创 Binder学习笔记(一)
网上看了很多关于binder的文章,但我还是想把自己的心路历程记录下来,有些是跟着别人的脚步领略险峻风景,有些则是自己只身探入代码深处打捞出的收获。我不确定是否全部融会贯通,更担心一两个月后会完全不记得来时的路。最好的验证和留存的方法是把他们写成博文,几个月后回头再来读,看是否还能读得明白。如果可以,说明我两个担心已不复存在;如果又回到云里雾里,刚好可以带着新问题继续探索。文章很多地方会引用And
2016-05-08 23:47:43 1965
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人