adb 源码学习

在设备里运行了一个adbd。

trinket:/ # ps -efl | grep adbd
root          1753     1 0 14:18:53 ?     00:00:14 adbd --root_seclabel=u:r:su:s0

adbd 的入口

tcp 通信中的 server 创建的大致流程 
tcp 编程的 server 端 

  • 1) 调用 socket()函数来创建 socket 
  • 2) 调用 setsockopt()函数来设置相关属性 
  • 3) 调用 bind()函数绑定 IP 和端口信息到 socket 上 
  • 4) 调用 listen()函数来开启监听 
  • 5) 调用 accept()函数来接受 client 端的通信请求
  • 6) 调用 send()/write()函数来发送数据;调用 reve()/read()函数来接受数据 
  • 7) 调用 close()/shutdown()函数来关闭通信 

Cross Reference: /system/core/adb/Android.mk (androidxref.com)

LOCAL_SRC_FILES := \
    daemon/main.cpp \
    daemon/mdns.cpp \
    services.cpp \
    file_sync_service.cpp \
    framebuffer_service.cpp \
    remount_service.cpp \
    set_verity_enable_state_service.cpp \
    shell_service.cpp \
    shell_service_protocol.cpp 

这几个文件编译出来的adbd. 

adbd 的入口在

system/core/adb/daemon/main.cpp 

 

 

 

 server_socket_thread()函数主要就是处理 tcp 通信中 server 端的初始化,
先概括一下函数内部的处理逻辑: 
 
a) 首先函数进入一个大的死循环中,然后通过调用 network_inaddr_any_server()函数来
创建 server 端的 socket. 
b) 调用 adb_socket_accept()来接受 client 端的请求信息,然后 fd.用于 tcp 的通信 
c) 最后就调用 register_socket_transport()函数来注册 TCP 传输事件. 

adbd 登录添加密码

--- core/adbd/services.c
+++ core/adbd/services.c

-#define SHELL_COMMAND "/bin/sh"
+#define SHELL_COMMAND "/bin/login"

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值