adb 源码分析(1)

adb 分为三部分  一部分是adb-server 一部分是adb_command 这两部分运行在电脑主机上,通过socket通信,adb-server监听在127.0.0.1:5037端口(注意adb-server和adb_command对应同一个可执行文件adb),另外一部分是adbd,运行在手机端

下面分三个情景去描述adb的电脑端的源码

1.首次使用adb命令触发adb-server启动

adb 源码分析(1)_第1张图片
首次使用adb命令触发adb-server启动


2 adb-server启动以及初始化通信环境

adb 源码分析(1)_第2张图片
 初始化通信环境

device_poll_thread里面调用了两个函数find_usb_devices, kick_dsconnected_devices,这些都和操作usb驱动相关,find_device应该是在usb总线上寻找手机的usb链接

,注意这里注册的时候action=1,写入之前打开的socket对,另外一端就可读了,就会调用transport_registration_func回调。transport_registration_func又创建socket对,

创建两个线程,分别执行write_transport_thread 和read_transport_thread,将transport添加到transport_list。 这两个函数用于关注usb设备的可读写事件,并做出处理。

注意读取和写入的逻辑在atransport中注册了回调函数,为什么在这里注册?因为有可能是通过usb读写,也可能是通过socket读写,在这里进行解耦。

这样就形成了五个函数进行通信处理,这五个函数运行在三个线程之中:分别功能见下图

adb 源码分析(1)_第3张图片
通信组件

你可能感兴趣的:(adb 源码分析(1))