Android ADB 通信 你知道的

取之于网,用之于网。本为过路人,姑且搬运中。


一、名释

        Android: 嵌入式操作系统。截止发文,手机市场占有率第一的操作系统。基于Linux核。

        ADB:Android Debug Bridge。用于快速便捷获取系统信息和控制系统。

        AOSP:  Android Open-Source Project。安卓操作系统源码。


二、主题

        关于常规Android debug的通信方式(ADB)的流程浅析。


三、前奏

        模块共有 3 大块。

        x. adb client:客户端。提供命令集的输入窗口。

        y. adb server:服务端。与deamon保持连接并响应客户端指令并与daemon通信获取指令对应的执行结果。

        z. adb daemon:守护端。处理指令、交由系统对应部门执行并返回给server结果。也就是常说的adbd进程。

        

        通信方式共有 2 种。

        x. usb:通过usb与嵌入式设备连接后通信。

        y. socket:通过socket与系统通信。


        源码路径:AOSP:/system/core/adb/


        默认端口有 2 类。

        x.  client与server通过5037/5038端口连接交流。

        y.  daemon的socket方式默认5555/5554端口。


        宿主有 2 类。

        x. PC上运行着client和server。

        y. 嵌入式设备上运行着daemon。


        命令流转有 3 种。

        x. 在client端就可以直接返回结果。比如adb version 和adb help等。

        y. 在server端就可以直接获得结果。比如adb devices。

        z. 一定要经过daemon才可能获得结果。绝大多数命令就是这样。


四、HIGH

        DAO图走一波!(个人非常不喜欢做图,只有借用他人好图)

        图片来源 :https://blog.csdn.net/XING1716263268/article/details/8998192?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task


        

        图一非常简洁明了,说明了三者关系。

        图二描述了PC端的流程。



        图三描述server启动流程

        图四描述了daemon的启动。

                code: aosp/system/core/adb/daemon/

                主入口就在main.cpp中的main函数。

                然后调用adbd_main(DEFAULT_ADB_PORT)实体。

                在adbd_main中判断access(USB_FFS_ADB_EP0, F_OK)来确定是否要监听usb。

                如果上述返回为0则监听usb,并开始执行usb_init(),usb init不在此处展开。

                usb_init完后,adbd会检查service.adb.tcp.port是否有设置端口。如果有,则setup_port(port)此端口,也就转换为socket方式通信,local_init(port)。

                


                

        图五描述了server中local_init的初始化过程。扫描5555-5585,找到设备也可能是模拟器并连接。

        图六描述了daemon中local_init的初始化过程。也是标准的socket绑定监听的过程。无需多述。

        

        图七描述了linux pc下的usb通信初始化。另外两个主流的操作系统windows和darwin与上述逻辑基本一致,只是接口等和API方式的差别。

        图八描述的daemon中的流程。


五、收

        如不尽兴,还请移步如下好文。

        https://blog.csdn.net/Clovelegent/article/details/52515889?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

你可能感兴趣的:(Android ADB 通信 你知道的)