05.Binder系统:第6课第6节_Binder系统_驱动情景分析_服务使用过程

前面的小节我们已经讲解了服务的注册以及获取过程,该小节我们讲解服务的使用过程。

在服务获取过程中,test_client进程的内核态会创建一个binder_proc结构体,其中包含两个红黑树成员refs_by_desc与refs_by_node,上面挂载着都是binder_ref(对服务的引用,如对hello服务的引用)节点,可以通过desc或者node查找,简单框图如下:
在这里插入图片描述
其中的挂载的binder_ref,有成员desc=1,node(指向test_server中的hello服务),根据前面的小节,我们已经知道test_client如何获得hello服务,那么他怎么使用服务呢?
test_client流程如下

用户态:
	    1.已经获得了"hello"服务,其handle=1.
	    2.构造数据:
	    		a. code:调用哪个函数
	    		b. 参数
	    3.通过ioctrl发送数据(先写。后读)
	    15.取出返回值,执行完毕。
	    
内核态(binder_iotcl):
		4.根据handlr找出目的进程(根据node或者handlr,在test_client的红黑树上找到binder_ref结构体),
		5.把数据放入目的进程test_server的todo链表
		6.唤醒test_server进程,然后在binder_thread_read中休眠。
		14.被唤醒,把数据返回给用户空间,

下面就轮到test_server执行了,下面是他的一个简单流程图:
在这里插入图片描述
从内核态开始

用户态:
		8.取出数据,根据code调用函数,及传递参数
		9.用返回值构造数据,
		10.调用ioctl发送(REPLY)
内核态:
		7.被唤醒,返回数据到到用户空间
		11.找出要回复的进程(test_client)
		12.把数据放入test_client的todo链表,
		13.唤醒test_client进程。
  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江南才尽,年少无知!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值