Adb通讯协议
adb通信分为两部分:adb client和adb server,以及adb server和adb daemon。
client和server之间的通信协议
adb server对本地的tcp 5037号端口进行监听,等待adb client的命令。client的每个命令都会包含两个部分,前一部分固定4个字节,以十六进制方式指定命令部分的长度。后一部分是真正的内容。发送命令的接口为writex,并最终调用_fh_socket_write,通过send发送出去。因此这两部分至少需要发送两个tcp包。
例如想要获取adb server的版本号,client首先连接本机的tcp 5037端口,然后发送“000C”和“host:version”。
server对client回复,分为如下情况
1、 成功,回复四字节串“OKAY”,后面跟的内容根据不同的命令而不同。
2、 失败,回复四字节串“FAIL”,然后跟四字节的十六进制长度,以及失败原因。
3、 对于host:version,回复4个字节的十六进制字串,代表server的内部版本号。
具体的命令如下。
命令
解释
host:version
host:kill
停止server
host:devices
host:track-devies
host:emulator:<port>
host:transport:<serial-number>
连接指定serial-number的设备或者模拟器
host:transport-usb
连接usb上的设备,如果usb上有不止一个设备,会失败。
host:transport-local
通过tcp方式连接模拟器,如果有多个模拟器在运行,会失败。
host:transport-any
连接usb设备或者模拟器都可以,但是如果有超过一个设备或模拟器,会失败。
host-serial:<serial-number>:<request>
host-usb:<request>
host-local:<request>
向指定的设备发送特定的请求。同样如果存在多个设备的冲突,会失败。
host:<request>
向当前连接的设备发送请求
<host-prefix>:get-serialno
获取设备的serial-number
<host-prefix>:get-state
获取设备状态
<host-prefix>:forward:<local>;<remote>
下面这些命令仅仅用于已经连接到某个设备,即在上面命令使用成功,连接到特定设备后,向特定设备发送命令,操作特定设备。
命令
解释
shell:command arg1 arg2 ...
在设备上执行命令行操作
shell:
参见commandline.c中的interactive_shell()
remount:
以读/写模式加载设备的文件系统
dev:<path>
为client打开设备上的特定路径,用于读写问题。有可能由于权限问题而失败。
tcp:<port>
尝试从设备连接本主机的某个tcp端口
tcp:<port>:<server-name>
尝试从设备连接特定主机名的某个tcp端口
local:<path>
尝试连接设备上的特定路径,路径是UNIX域名形式
localreserved:<path>
localabstract:<path>
localfilesystem:<path>
尝试连接设备上的特定路径。
log:<name>
打开设备上的特定日志文件,以便读取日志
framebuffer:
尝试获取framebuffer的快照。即涉笔的屏幕快照
dns:<server-name>
由serer执行来解析特定设备名
recover:<size>
更新设备的恢复镜像
jdwp:<pid>
连接特定VM进程上面的JDWP线程
track-jdwp
sync:
同步设备和主机上的文件
关于命令内容以及回复信息的更详细说明,参见adb源码文件夹下的SERVICES.TXT。
Transports
这个名词用于代表server和设备或者模拟器之间的通信协议。包含如下两种情况:
1、 USB transports。通过USB方式和物理设备通信。
2、 Local transports。通过本机的TCP连接方式和模拟器通信。
由此可以想到,其实可以通过TCP方式和其他机器上面的模拟器或者设备进行通信,但是这点还没有实现。
transport层用于处理消息,每个消息包含24个字节的头部,定义如下。
struct message {
unsigned command;
unsigned arg0;
unsigned arg1;
unsigned data_length;
unsigned data_crc32;
unsigned magic;
};
此部分具体内容参见protocol.txt。
参考文献:
1、 adb源码文件夹下OVERVIEW.TXT
2、 adb源码文件夹下SERVICES.TXT
3、 adb源码文件夹下protocol.txt
- 上一篇: Fastboot通讯协议
- 下一篇: MTK Scatter 结构
呃 本文暂时没人评论 来添加一个吧