【binder_node 】
binder_get_node 从binder_proc里面rbroot nodes这个树里面获得一个binder_node 节点。
binder_new_node 创建一个binder_node节点,并放到上面的树上。
binder_inc_node
binder_dec_node是对这个binder_node 进行强引用还是弱引用进行处理
【binder_ref】
binder_get_ref 从binder_proc里面rbroot nodes这个树里面获得一个binder_ref节点。
binder_get_ref_for_node 从binder_proc里面根据binder_node获取一个binder_ref节点。
这里根据传入的binder_node创建了一个binder_ref节点,并把它放到列表里面了。
binder_delete_ref 这个从字面理解,就是删除一个ref节点。
binder_inc_ref
binder_dec_ref 也是强引用和弱引用。
我怀疑这个ref里面的desc就是给那个handle值。
我们记得在IPCThreadState::transact里面写的时候,写的命令是BC_TRANSACTION。
binder_thread_write里面有关于BC_TRANSACTION的处理,
这里有个binder_transaction_data结构体,我们看说明,
/* The first two are only used for bcTRANSACTION and brTRANSACTION,
* identifying the target and contents of the transaction.
*/
前面的两个变量用于bcTRANSACTION 和brTRANSACTION,指明目标和transaction的内容。
我们在另外一端也是用的这个结构体写入的。
if (copy_from_user(&tr, ptr, sizeof(tr)))
return -EFAULT;
ptr += sizeof(tr);
binder_transaction(proc, thread, &tr, cmd == BC_REPLY);
从某个地方拷贝了一块数据到tr中,我们就认为从驱动读出来的传入的值。
然后就到了binder_transaction这个函数里面。
binder_transaction_log_add是增加一个log,
binder_stats_created 创建一个状态
binder_stats_deleted删除一个状态
这里就看到new了一个ref并保存下来,就完了