【一文秒懂】Linux ADB调试环境搭建指南

[复制链接]
发表于 2026-2-25 08:53:29 | 显示全部楼层 |阅读模式
  我的圈子: 高级工程师聚集地   我是董哥,高级嵌入式软件开发工程师,从事嵌入式Linux驱动开发和体系开发,曾就职于天下500强公司!   创作理念:专注分享高质量嵌入式文章,让各人读有所得!  
  

【一文秒懂】Linux ADB调试环境搭建指南


1、ADB先容

ADB:Android Debug Bridge,安卓调试桥,是用的最多的一种下令行工具,它可以或许在电脑端和安卓支持的装备端举行通讯,其通讯方式有两种:USB大概TCP/IP。
它可以或许支持多种装备端的利用,包罗:网络,脚本,安装和调试应用,文件传输等,同时也支持访问unix shell。
adb下令行工具,随着安卓SDK平台工具一起发布,是安卓SDK的一个组件。
 
2、ADB架构及构成

它是一个C/S(client-server)架构的应用步伐,由三部门构成:


  • adb client:运行在PC上,你可以或许运行adb下令来实验它。
  • adb daemon:保卫历程,运行在装备端的配景
  • adb server:服务历程,运行在PC,管理adb client和adb daemon之间的通讯
 
server与client通讯的端口是5037,adb server与emulator交互时使用的端口有两个:


  • 5554:专门用于与Emulator实例的毗连
  • 5555:专门用于与daemon毗连

 
3、环境搭建

3.1 主机端安装



  • 假如你的主机端是linux,则
  1. sudo apt install adb
复制代码


  • 假如你的主机端为windows,则必要下载安装包:【adb】,安装完后,可以在当前路径下运行,也可以到场环境变量中,【安装文档
 
下文以linux体系为例,安装完毕后,可以检察版本信息:
  1. [donge@ubuntu ~/]$ adb version
  2. Android Debug Bridge version 1.0.39
  3. Version 1:8.1.0+r23-5~18.04
  4. Installed as /usr/lib/android-sdk/platform-tools/adb
复制代码
 
3.2 客户端安装

如上图所示,必要在客户端安装adbd的保卫历程,来与PC端的adb server通讯。
adbd的软件包获取:


  • buildroot构建工具:通过选择android tools->adbd来直接编译得到
  1. BR2_PACKAGE_ANDROID_TOOLS_ADBD=y
复制代码


  • 另有一种方式:精简版adbd软件包(放到软件堆栈了)
   编译完成之后,直接将该工具放到体系开发板上,保持配景运行即可。
   
3.3 内核支持

adbd支持两种通讯方式,一种是USB,一种是TCP,以是我们内核必须支持所需的通讯协议。
   差别的开发板,厂商驱动代码差别,设置多多少少也会有差异,以下仅作参考:
  USB设置如下:
  1. # 必选
  2. CONFIG_USB_GADGET=y                                                        # 作为USB从机,也就是设备端
  3. CONFIG_USB_XXX_UDC=y                                                # USB控制器驱动,根据厂商选择
  4. CONFIG_USB_CONFIGFS=y                                                # USB配置文件系统,通过文件来配置功能
  5. CONFIG_USB_CONFIGFS_F_FS=y                                        # USB功能文件系统,启用USB 功能文件系统支持
  6. # 可选的一些功能
  7. CONFIG_USB_CONFIGFS_ACM=y                                        # 一种USB设备模式,用于模拟串口设备的通信。
  8. CONFIG_USB_CONFIGFS_MASS_STORAGE=y                        # USB大容量存储功能
复制代码
  内核设置打开后,肯定不要忘了在dts装备树中打开USB设置。
   
4、怎样使用

我们想要使用adb,起首必要在开发板上启动adbd配景历程,adbd与主机端的adb通讯是通过USB大概Tcp/Ip的,以是就必要提前设置。
4.1 USB毗连

USB通常是通过configfs来设置USB各种功能的,以下为一个示例:
  1. #!/bin/sh
  2. case "$1" in
  3.   start)
  4.     test -d /sys/kernel/config || mkdir /sys/kernel/config
  5.     mount -t configfs none /sys/kernel/config
  6.     mkdir /sys/kernel/config/usb_gadget/g1
  7.     cd /sys/kernel/config/usb_gadget/g1
  8.     echo 0x2207 > idVendor
  9.     echo 0x0006 > idProduct
  10.     mkdir strings/0x409
  11.     echo 0123456789ABCDEF > strings/0x409/serialnumber
  12.     echo "rockchip" > strings/0x409/manufacturer
  13.     echo "rk30xx" > strings/0x409/product
  14.     mkdir configs/b.1
  15.     mkdir configs/b.1/strings/0x409
  16.     echo "adb" > configs/b.1/strings/0x409/configuration
  17.     #echo "Conf 1" > configs/b.1/strings/0x409/configuration
  18.     #echo 120 > configs/b.1/MaxPower
  19.     cur_path=`pwd`
  20.     mkdir -p $cur_path'/functions/ffs.adb'
  21.     ln -s /sys/kernel/config/usb_gadget/g1/functions/ffs.adb /sys/kernel/config/usb_gadget/g1/configs/b.1/ffs.adb
  22.     mkdir -p /dev/usb-ffs/adb
  23.     mount -o uid=2000,gid=2000 -t functionfs adb /dev/usb-ffs/adb
  24.     cd /
  25.     adbd &
  26.     UDC=`ls /sys/class/udc/| awk '{print $1}'`
  27.     sleep 1 && echo $UDC > /sys/kernel/config/usb_gadget/g1/UDC &
  28.     ;;
  29.   stop)
  30.     echo none > /sys/kernel/config/usb_gadget/g1/UDC
  31.     ;;
  32.   restart|reload|force-reload)
  33.     echo "Error: argument '$1' not supported" >&2
  34.     exit 3
  35.     ;;
  36.   *)
  37.     echo "Usage: adbd start|stop" >&2
  38.     exit 3
  39.     ;;
  40. esac
复制代码
  上面是一个示例,假如调起来比力困难,也可以在资料库中直接获取最简朴的adb设置。
   
   更多干货可见:高级工程师聚集地,助力各人更上一层楼!
   
配景USB设置乐成后,可以直接启动adbd服务。
  1. # adbd &
  2. # 下面是打印信息
  3. install_listener('tcp:5037','*smartsocket*')
  4. [  215.019821] read descriptors
  5. cannot bind 'tcp:5037'
  6. warnning! use usb only
  7. [  215.026174] read strings
  8. adbd may crash
  9. Using USB
复制代码
  表现不可以或许绑定到tcp,指定用usb
   
4.2 无线毗连


这种方式,必要你的装备端毗连到网络,通常使用WiFi来毗连,毗连乐成后检察服务器和装备端的IP地点,如下:


  • 装备端
  1. # ifconfig
  2. wlan0     Link encap:Ethernet  HWaddr 9C:84:B6:62:9F:54  
  3.           inet addr:192.168.50.136  Bcast:192.168.50.255  Mask:255.255.255.0
  4.           inet6 addr: fe80::9e84:b6ff:fe62:9f54/64 Scope:Link
  5.           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
  6.           RX packets:3247 errors:0 dropped:286 overruns:0 frame:0
  7.           TX packets:320 errors:0 dropped:0 overruns:0 carrier:0
  8.           collisions:0 txqueuelen:1000
  9.           RX bytes:409353 (399.7 KiB)  TX bytes:31375 (30.6 KiB)
复制代码


  • 主机端实验ping装备端的IP地点,ping通即可包管链路正常。
  1. dong@ubuntu:~$ ping 192.168.50.136
  2. PING 192.168.50.136 (192.168.50.136) 56(84) bytes of data.
  3. 64 bytes from 192.168.50.136: icmp_seq=1 ttl=128 time=18.5 ms
  4. 64 bytes from 192.168.50.136: icmp_seq=2 ttl=128 time=8.04 ms
复制代码


  • 检察装备端监听的端口
  1. # netstat -an
  2. Active Internet connections (servers and established)
  3. Proto Recv-Q Send-Q Local Address           Foreign Address         State      
  4. tcp        0      0 0.0.0.0:5555            0.0.0.0:*               LISTEN      
  5. Active UNIX domain sockets (servers and established)
  6. Proto RefCnt Flags       Type       State         I-Node Path
  7. unix  3      [ ]         DGRAM                        50 /dev/log
  8. unix  2      [ ]         DGRAM                     17723 /var/run/wpa_supplicant/wlan0
  9. unix  2      [ ACC ]     SEQPACKET  LISTENING      11722 /run/udev/control
  10. unix  2      [ ACC ]     STREAM     LISTENING      11023 @jdwp-control
  11. unix  3      [ ]         STREAM     CONNECTED      11020
  12. unix  3      [ ]         DGRAM                     10422
  13. unix  3      [ ]         DGRAM                     10421
  14. unix  3      [ ]         STREAM     CONNECTED      11024
  15. unix  3      [ ]         STREAM     CONNECTED      11025
  16. unix  3      [ ]         STREAM     CONNECTED      11021
  17. unix  3      [ ]         STREAM     CONNECTED        838
  18. unix  2      [ ]         DGRAM                        53
  19. unix  3      [ ]         STREAM     CONNECTED        837
复制代码


  • 主机端毗连
  1. dong@ubuntu:~$ adb connect 192.168.50.136:5555
  2. connected to 192.168.50.136:5555
复制代码


  • 检察adb装备
  1. dong@ubuntu:~$ adb devices
  2. List of devices attached
  3. 192.168.50.136:5555     device
复制代码
  到此即为毗连乐成。
   
5、常用下令

下令阐明adb device检察毗连装备adb push [local] [remote]向装备端中推送文件adb pull [remote] [local]从装备端拉取文件adb install < apk name >安装应用adb uninstall < pak name >卸载应用adb shell
pm list packages列脱手机装的全部 app 的包名adb shell
pm list packages -3列出除了体系应用的第三方应用包名adb shell
pm clear < pak name >打扫应用数据与缓存adb shell
pm disable-user < pak name >禁用应用adb shell
pm enable < pak name >启用应用

  • 毗连装备:
    1. adb devices
    复制代码
    该下令列出毗连到盘算机的全部 Android 装备。确保你的装备通过 USB 毗连,而且 USB 调试选项已启用。
  • 毗连装备的 Shell:
    1. adb shell
    复制代码
    该下令允许你在装备上运行交互式 shell。
  • 推送文件到装备:
    1. adb push local_file_path /device/path
    复制代码
    将当地文件推送到装备上指定路径。更换 local_file_path 为当地文件路径,/device/path 为装备上的目标路径。
  • 拉取文件从装备:
    1. adb pull /device/path local_file_path
    复制代码
    从装备上拉取文件到当地。更换 /device/path 为装备上的文件路径,local_file_path 为当地目标路径。
  • 安装应用:
    1. adb install app.apk
    复制代码
    安装应用到装备。更换 app.apk 为你要安装的应用的 APK 文件。
  • 卸载应用:
    1. adb uninstall package_name
    复制代码
    卸载装备上的应用。更换 package_name 为应用的包名。
  • 检察装备日记:
    1. adb logcat
    复制代码
    检察装备上的及时日记。
  • 重启装备:
    1. adb reboot
    复制代码
    重启毗连的装备。
  • 检察装备信息:
    1. adb devices
    2. -l
    复制代码
    以详细格式列出毗连的装备信息。
  • 检察装备状态:
    1. adb get-state
    复制代码
    表现装备的毗连状态,比方 device、offline 等。
这只是一小部门 ADB 下令,另有更多功能和选项可供使用。你可以通过运行 adb 下令来检察全部可用的选项和子下令。比方:
  1. adb --help
复制代码
请留意,有些下令大概必要装备处于开发者模式下,并启用 USB 调试。
   假如不是android装备,一样寻常我们最常用的就是前3条指令了~
   
   更多文章,可关·注·公·号:【嵌入式艺术】,同时也为各人预备了学习福利,可免费领取。
   
6、总结

以上,这篇文章重要先容了ADB工具的架构以及怎样摆设,怎样使用,渴望对各人有所资助。
 
  
    欢迎关注 公号&星球【嵌入式艺术】,董哥原创!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表