adb分析

本文主要分析adb的通讯机制,包括adb的socketpair在不同平台的实现,fdevent系统在Linux和Windows下的多路复用策略,以及adb client、adb server和adbd之间的交互流程。adb client通过tcp连接到adb server,实现指令输入输出,adb server通过fdevent循环处理设备连接,而adbd则负责处理client命令并转发到相应服务。
摘要由CSDN通过智能技术生成

  基于4.4主要分析adb通讯


adb准备篇

一.socketpair (双向通讯的管道)

   1. Linux环境下使用socketpair函数创造一对未命名的、相互连接的UNIX域套接字。

   2. window平台模拟了一套socketpair。主要用到的结构如下

struct SocketPairRec

{

    BipBufferRec  a2b_bip;

    BipBufferRec  b2a_bip;

    ...

}

struct BipBufferRec,

{

    HANDLE             evt_write;   是否可以写

    HANDLE             evt_read;    是否有需要读数据

    unsigned char      buff[ BIP_BUFFER_SIZE ]; 读写的数据存放buffer

    ...

}

通过evt_write, evt_read表示是否有读写事件发生

 

二.  fdevent系统

     一套方便的跨平台io多路复用的接口。Adb模拟了一套

1. 主要接口

   fd加到fdevent系统中,当fd有信号后,会触发func回调

   typedef void (*fd_func)(intfd, unsigned events, void *userdata);

   void fdevent_install(intfd, fd_func func, void *arg);

 

   设置fd关心的事件(读写)

   void fdevent_add(intfd,unsigned events);

   void fdevent_del(intfd,unsigned events);

 

   fdevent循环

   void fdevent_loop();

 

2. fdevent_loop伪实现:

  (1.)填充需要等待的evntlist(是否关心这个fd的读写事件) 

  (2.)  Wait (eventlist) 等待事件触发 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值