欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Binder系统_c++实现_内部机制

程序员文章站 2024-03-23 23:28:58
...

一、test_server提供hello服务

test_serer为每一个服务提供一个flag_binder_object结构体这个结构体里边的binder成员不同对于每个服务。

调用ioctl发送数据。flag_binder_object+服务名字,handle(0)。

调用进入内核驱动程序对每一个flag_binder_object构造binder_ node节点里的ptr等于flag_binder_object的binder成员。


驱动程序根据handle找到SM把数据发给SM并且创建binder_ref结构体。这个结构体中有desc和binder_node指针

sm记录服务的名字和desc值。。应用层有一个链表每项对应一个名字和handle值

二、test_client

构造数据调用ioctl进入驱动

驱动程序根据handle找到SM把数据就给它

SM从链表里找到对应的项找到handle返回数据,数据里有flag_binder_object结构体中的联合体成员

	union {
		void		*binder;	/* local object */
		signed long	handle;		/* remote object */
	};

返回handle。驱动发现数据含有这个结构体type是handle然后根据handle找到binder_ref然后找到node最后为test_client也建立binder_ref 链表desc=1 node=前边的node。

test_client怎么使用HelloService服务

构造数据进入驱动根据handle找到ref现在是在client进程刚才不是已经分析了client的ref怎么来的吗。然后找到server并且在数据中设置ptr cookie这两个东西等于binder_node的ptrcookie

server根据ptr cookie知道你想调用哪个服务再根据code值找到到底调用哪个函数。


Binder系统_c++实现_内部机制




相关标签: 安卓 binder驱动