5. 服务使用过程

test_client进程:

用户态:

(1)已结获得了“hello”服务,handle=1;

(2)构造数据:code(那个函数)和函数参数

(3)发送ioctl后进入内核态,先写后读

(15)取出返回值

内核态:

(4)binder_ioctl被调用,根据handle在binder_proc中根据refs_by_desc找到binder_ref,在根据node找到服务的binder_node结构体,在根据proc找到目的进程test_server

(5)把数据放入test_server的todo链表

(6)唤醒test_server进程,然后在binder_thread_read中休眠

(17)被唤醒后把数据返回给用户空间

test_server进程:

用户态:

(8)取出数据,根据code调用哪个函数,并把参数给函数

(9)把返回值构造为数据

(10)调用ioctl来发送返回数据

内核态:

(7):被唤醒后把数据返回用户空间

(11)找到要回复的进程test_client

(12)把数据放入test_client的todo链表

(13)唤醒test_client进程

使用服务

构造数据(参数),格式:四字节全零+四字节字符串长度+字符串("weidongshan")

txn.code 表示的是哪个函数,就是个整数,为双方约定其代表某个函数

接着调用ioctl先写后读,把数据放入test_server的todo结构体,接着唤醒test_server,然后自身休眠
[ 1580.379989] test_client (1381, 1381), binder_thread_write : BC_TRANSACTION
[ 1580.386741] binder: 1381:1381 BC_TRANSACTION 9 -> 1373 - node 3, data beb20a5c-beb20a4c size 32-0
[ 1580.395634] test_client (1381, 1381), binder_transaction , print data :
[ 1580.402184] 0000: 00 . 00 . 00 . 00 . 0b . 00 . 00 . 00 . 77 w 00 . 65 e 00 . 69 i 00 . 64 d 00 .
[ 1580.411029] 0016: 6f o 00 . 6e n 00 . 67 g 00 . 73 s 00 . 68 h 00 . 61 a 00 . 6e n 00 . 00 . 00 .

[ 1580.419888] test_client (1381, 1381), binder_thread_read : BR_NOOP

test_server被唤醒后返回用户控件,取出code和参数后调用函数执行,得到返回值后构造BC_REPLY类型数据调用ioctl回复给test_client,
[ 1580.426103] test_server (1373, 1373), binder_thread_read : BR_TRANSACTION
[ 1580.432828] test_server (1373, 1373), binder_thread_read , print data :
[ 1580.439419] 0000: 00 . 00 . 00 . 00 . 0b . 00 . 00 . 00 . 77 w 00 . 65 e 00 . 69 i 00 . 64 d 00 .
[ 1580.448263] 0016: 6f o 00 . 6e n 00 . 67 g 00 . 73 s 00 . 68 h 00 . 61 a 00 . 6e n 00 . 00 . 00 .
[ 1580.457129] test_client (1381, 1381), binder_thread_read : BR_TRANSACTION_COMPLETE

//用户空间处理完数据后,把内核态保存数据的buffer释放掉
[ 1580.464710] test_server (1373, 1373), binder_thread_write : BC_FREE_BUFFER
[ 1580.471541] test_server (1373, 1373), binder_thread_write : BC_REPLY
[ 1580.477877] binder: 1373:1373 BC_REPLY 10 -> 1381:1381, data be857a5c-be857a4c size 4-0
[ 1580.485859] test_server (1373, 1373), binder_transaction , print data :
[ 1580.492455] 0000: 01 . 00 . 00 . 00 .
[ 1580.496109] test_client (1381, 1381), binder_thread_read : BR_NOOP
[ 1580.502282] test_server (1373, 1373), binder_thread_read : BR_NOOP

test_client收到BR_REPLY类型数据,返回数据1
[ 1580.508436] test_client (1381, 1381), binder_thread_read : BR_REPLY
[ 1580.514684] test_client (1381, 1381), binder_thread_read , print data :
[ 1580.521301] 0000: 01 . 00 . 00 . 00 .
[ 1580.524929] test_server (1373, 1373), binder_thread_read : BR_TRANSACTION_COMPLETE
[ 1580.532489] test_client (1381, 1381), binder_thread_write : BC_FREE_BUFFER
[ 1580.539345] test_server (1373, 1373), binder_thread_read : BR_NOOP
[ 1580.545510] test_client (1381, 1381), binder_thread_write : BC_RELEASE

9.4 Binder系统_驱动情景分析_服务使用过程的更多相关文章

  1. 9.2 Binder系统_驱动情景分析_服务注册过程

    1. 几个重要结构体的引入给test_server添加一个goodbye服务, 由此引入以下概念: 进程间通信其实质也是需要三要素:源.目的.数据,源是自己,目的用handle表示:通讯的过程是源向实 ...

  2. 9.3 Binder系统_驱动情景分析_服务获取过程

    4. 服务获取过程 test_client客户端: (1)在用户态先构造name=“hello”的数据(服务的名字是hello),调用ioctl发送数据给service_manager(handle= ...

  3. 9.5 Binder系统_驱动情景分析_transaction_stack机制

    参考文章:http://www.cnblogs.com/samchen2009/p/3316001.html test_server服务进程可能有多个线程,而在发送数据的时候handle只表示了那个进 ...

  4. 9.6 Binder系统_驱动情景分析_server的多线程实现

    当多个client对server发出请求的时候,如果server忙不过来的时候会创建多线程来处理请求 那么忙不过来由谁来判断? server进程有个binder_proc结构体,其里面有todo链表( ...

  5. Android系统--Binder系统具体框架分析(二)Binder驱动情景分析

    Android系统--Binder系统具体框架分析(二)Binder驱动情景分析 1. Binder驱动情景分析 1.1 进程间通信三要素 源 目的:handle表示"服务",即向 ...

  6. Android : 跟我学Binder --- (4) 驱动情景分析

    目录: Android : 跟我学Binder --- (1) 什么是Binder IPC?为何要使用Binder机制? Android : 跟我学Binder --- (2) AIDL分析及手动实现 ...

  7. 10.7 android输入系统_Dispatcher线程情景分析_Reader线程传递事件和dispatch前处理

    android输入系统C++最上层文件是com_android_serve_input_InputManagerService.cpp global key:按下按键,启动某个APP可以自己指定,修改 ...

  8. [RK3288][Android6.0] 系统按键驱动流程分析【转】

    本文转载自:http://blog.csdn.net/kris_fei/article/details/77894406 Rockchip的按键驱动位于 kernel/drivers/input/ke ...

  9. 一个简单web系统的接口性能分析及调优过程

    在测试一个简单系统接口性能压力时,压到一定数量,程序总是崩溃,查看相关机器相关数据时,CPU.内存.IO占用均不高,问题自然出现在其它地方先介绍下系统部件架构 Resin版本为:[root@local ...

随机推荐

  1. actionMode-theme中修改actionmode中more下拉框的背景颜色

    今天在做图库修改是,需要修改图库的actionbar某个按钮弹出来的下拉框的背景颜色,在网上找了个方法尝试下,没有打到自己的要求,不过阴差阳错的却修改了more下拉框的背景,再次记录下,也许以后能用的 ...

  2. git --- ! [rejected] master -> master (non-fast-forward)

    如何解决failed to push some refs to git Administrator@PC-20150110FGWU /K/cocos2d/yc (master) $ git push ...

  3. 深入理解Android(1)——理解Android中的JNI(上)

    我参加了CSDN博客之星评选,如果在过去的一段时间里阳光小强的博客对你有所帮助,在这里希望能投上您宝贵的一票,每天都可以投一次:http://vote.blog.csdn.net/blogstar20 ...

  4. 通过PXE安装Linux实况

    通过PXE安装Linux实况 网卡引导操作系统的过程我们可以把它称为PXE(Pre-bootExecutionEnvironment),十几年前,在搞无盘NT时候,我们为了使网卡支持PXE引导要特意购 ...

  5. Kinect 开发 —— Kinect Interaction 交互控件

    Kinect Interactions 提供了一些新的带有姿势识别的控件如 push-to-press 按钮, grip-to-pan 列表控件, 而且支持多用户,同时二个人进行的交互,这些新添加的控 ...

  6. 洛谷 P2242 公路维修问题

    P2242 公路维修问题 题目描述 由于长期没有得到维修,A国的高速公路上出现了N个坑.为了尽快填补好这N个坑,A国决定对M处地段采取交通管制.为了求解方便,假设A国的高速公路只有一条,而且是笔直的. ...

  7. web显示winform,web打开winform,IE打开winform

    前言:为什么要用ie打开winform 个人觉得,winform部署client太麻烦如金蝶··用友,winfrom打补丁太麻烦,加入新功能再部署很费时间:于是就想为什么不能用IE打开呢?这样就不须要 ...

  8. 写了个去重复文件的 PHP 脚本,

    写了个去重复文件的 PHP 脚本点击打开链接 把各个零散网盘.邮箱和服务器上的文件,三台电脑上的文件收集在新硬盘里,然后清空了网络和电脑上的文件.才发现这个文件不能这里放点,那里存点,到时候不知道在哪 ...

  9. Android开发经验一判断当前屏幕是全屏还是非全屏

    public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView ...

  10. holder.js如何使用

    holder.js的使用 一.总结 一句话总结:使用:holder.js后面接图片宽高 <img src="holder.js/300x200" /> 1.holder ...