响应外部请求,创建服务。服务对外表现形式是套接字(asocket)。
设备端程序拥有的服务在create_local_service_socket中创建,主机端程序还有一些特有的服务在create_host_service_socket中创建。初次之外,轻型套接字处理的立即完成的请求,虽然没有创建套接字,也是一种逻辑上的服务。
在create_local_service_socket中创建的服务有下面这些,除了jdwp和track-jdwp直接创建定制的套接字外,其他服务都是创建服务对应的文件句柄,再通过本地套接字包装。
主机和设备都有的服务:
服务名 |
参数 |
创建方式 |
说明 |
tcp |
port[:host] |
socket_loopback_client(port) socket_network_client(host,port) |
基于TCP的服务 Daemon不支持host |
local |
name |
socket_local_client(name) |
连接UNIX套接字 |
localreserved |
name |
socket_local_client(name) |
|
localabstract |
name |
socket_local_client(name) |
|
localfilesystem |
name |
socket_local_client(name) |
只于设备上存在的服务:
服务名 |
参数 |
创建方式 |
说明 |
jdwp |
无 |
create_jdwp_service_socket |
|
track-jdwp |
无 |
create_jdwp_tracker_service_socket |
|
dev |
path |
unix_open(path) |
打开设备文件读写 |
framebuffer |
空 |
create_service_thread (framebuffer_service) |
屏幕截图 |
jdwp |
pid |
create_jdwp_connection_fd(pid) |
|
shell |
name |
create_subproc_thread(name) |
交互控制台 /dev/ptmx oom_adj=0 |
sync |
空 |
create_service_thread (file_sync_service) |
上传下载文件 |
remount |
空 |
create_service_thread (remount_service) |
/system 可写 |
reboot |
arg |
create_service_thread (reboot_service, arg) |
重启、关机 |
root |
空 |
create_service_thread (restart_root_service) |
切换到root权限 |
backup |
arg |
backup_service(BACKUP, arg) |
系统备份到本地文件(bu) |
restore |
arg |
backup_service(RESTORE, arg) |
系统恢复(bu) |
tcpip |
[port] |
create_service_thread (restart_tcp_service, port) |
启动tcp连接模式 |
usb |
空 |
create_service_thread (restart_usb_service) |
启动usb连接模式 |
oom_adj:低内存杀进程策略配置。
Ø 理解和配置 Linux 下的 OOM Killer
/dev/ptmx:伪终端
Ø 浅析terminal创建时ptmx和pts关系
Ø Linux下tty/pty/pts/ptmx详解
Ø Pseudoterminal - Wikipedia, the free encyclopedia
Ø pts(4) -Linux manual page - man7.org
backup:备份工具,源代码位于frameworks/base/cmds/bu。
jdwp:java调试体系
Ø 深入 Java 调试体系: 第 1 部分,JPDA 体系概览
Ø 深入 Java 调试体系,第 4 部分: Java 调试接口(JDI)
Ø 深入 Java 调试体系,第 3 部分: JDWP 协议及实现
Ø 深入 Java 调试体系,第 2 部分: JVMTI 和 Agent 实现
下面的服务只在主机端存在。
立即完成的请求在handle_host_request中处理,有下列服务:
host开头的:
服务名 |
参数 |
处理方法 |
说明 |
kill |
|
exit |
Adb server退出 |
transport |
<serial-number> |
acquire_one_transport |
切换到远程链路 |
transport (|-usb|-local|-any) |
|
acquire_one_transport |
切换到远程链路 |
devices |
|
list_transports |
列出连接设备 |
devices-l |
|
list_transports |
列出连接设备 |
disconnect |
[serial] |
unregister_transport |
断开设备连接 |
emulator |
port |
local_connect |
模拟器连接,反向创建一个Tcp链路 |
version |
|
ADB_SERVER_VERSION |
|
host-prefix开头的:(host-prefix表示host-serial:<serial-number>、host-usb、host-local、host,其中host相对于host-any),处理的时候都要获取链路(acquire_one_transport)。
服务名 |
参数 |
处理方法 |
说明 |
get-serialno |
|
transport->serial |
获取设备序列号 |
get-devpath |
|
transport->devpath |
获取USB设备连接安装路径 |
list-forward |
|
format_listeners |
列出转发端口 |
killforward-all |
|
remove_all_listeners |
删除所有转发端口 |
forward
|
[norebind:] <local>;<remote> |
install_listener |
创建转发端口 |
killforward |
<local> |
remove_listener |
删除转发端口 |
get-state |
|
connection_state_name |
设备连接状态 |
在create_host_service_socket中创建的主机服务有(host开头):
服务名 |
参数 |
创建方式 |
说明 |
track-devices |
|
create_device_tracker |
侦听设备连接变化 |
wait-for-(local|usb|any) |
无 |
create_service_thread (wait_for_state, sinfo) |
等待设备连接上 |
connect |
host |
create_service_thread (connect_service, host) |
连接设备(TCP) |