专栏名称: 嵌入式微处理器
关注这个时代最火的嵌入式微处理器,你想知道的都在这里。
目录
相关文章推荐
科学家庭育儿  ·  小学,请尽量不择手段去搞好英语 ·  16 小时前  
常青藤爸爸  ·  晒一下小小常新学期都上哪些培训班 ·  昨天  
育学园  ·  尿里有泡沫,是因为肾不好吗? ·  2 天前  
掌上铜山  ·  一地明确:生三孩奖3万! ·  2 天前  
掌上铜山  ·  一地明确:生三孩奖3万! ·  2 天前  
科学家庭育儿  ·  性价比儿童卫衣、卫裤,69.9元/2件!纯棉 ... ·  3 天前  
51好读  ›  专栏  ›  嵌入式微处理器

Linux ADB调试环境搭建指南

嵌入式微处理器  · 公众号  ·  · 2024-06-11 10:20

正文

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 ,则
sudo apt install adb
  • 如果你的主机端为 windows ,则需要下载安装包:【adb】,安装完后,可以在当前路径下运行,也可以加入环境变量中,【安装文档】

下文以 linux 系统为例,安装完毕后,可以查看版本信息:

[donge@ubuntu ~/]$ adb version
Android Debug Bridge version 1.0.39
Version 1:8.1.0+r23-5~18.04
Installed as /usr/lib/android-sdk/platform-tools/adb

3.2 客户端安装

如上图所示,需要在客户端安装 adbd 的守护进程,来与 PC 端的 adb server 通信。

adbd 的软件包获取:

  • buildroot 构建工具:通过选择 android tools->adbd 来直接编译得到
BR2_PACKAGE_ANDROID_TOOLS_ADBD=y
  • 还有一种方式:精简版 adbd 软件包(放到软件仓库了)

编译完成之后,直接将该工具放到系统开发板上,保持后台运行即可。

3.3 内核支持

adbd 支持两种通信方式,一种是 USB ,一种是 TCP ,所以我们内核必须支持所需的通信协议。

不同的开发板,厂商驱动代码不同,配置多多少少也会有差异,以下仅作参考:

USB 配置如下:

# 必选
CONFIG_USB_GADGET=y       # 作为USB从机,也就是设备端
CONFIG_USB_XXX_UDC=y      # USB控制器驱动,根据厂商选择
CONFIG_USB_CONFIGFS=y      # USB配置文件系统,通过文件来配置功能
CONFIG_USB_CONFIGFS_F_FS=y     # USB功能文件系统,启用USB 功能文件系统支持

# 可选的一些功能
CONFIG_USB_CONFIGFS_ACM=y     # 一种USB设备模式,用于模拟串口设备的通信。
CONFIG_USB_CONFIGFS_MASS_STORAGE=y   # USB大容量存储功能

内核配置打开后,一定不要忘了在 dts 设备树中打开 USB 配置。

4、如何使用

我们想要使用 adb ,首先需要在开发板上启动 adbd 后台进程, adbd 与主机端的 adb 通信是通过 USB 或者 Tcp/Ip 的,所以就需要提前配置。

4.1 USB连接

USB 通常是通过 configfs 来配置 USB 各种功能的,以下为一个示例:

#!/bin/sh

case "$1" in
  start)

    test -d /sys/kernel/config || mkdir /sys/kernel/config
    mount -t configfs none /sys/kernel/config
    mkdir /sys/kernel/config/usb_gadget/g1
    cd /sys/kernel/config/usb_gadget/g1

    echo 0x2207 > idVendor
    echo 0x0006 > idProduct

    mkdir strings/0x409
    echo 0123456789ABCDEF > strings/0x409/serialnumber

    echo "rockchip" > strings/0x409/manufacturer
    echo "rk30xx" > strings/0x409/product

    mkdir configs/b.1
    mkdir configs/b.1/strings/0x409
    echo "adb" > configs/b.1/strings/0x409/configuration
    #echo "Conf 1" > configs/b.1/strings/0x409/configuration
    #echo 120 > configs/b.1/MaxPower

    cur_path=`pwd`
    mkdir -p $cur_path'/functions/ffs.adb'
    ln -s /sys/kernel/config/usb_gadget/g1/functions/ffs.adb /sys/kernel/config/usb_gadget/g1/configs/b.1/ffs.adb

    mkdir -p /dev/usb-ffs/adb
    mount -o uid=2000,gid=2000 -t functionfs adb /dev/usb-ffs/adb

    cd /

    adbd &

    UDC=`ls /sys/class/udc/| awk '{print $1}'`
    sleep 1 && echo $UDC > /sys/kernel/config/usb_gadget/g1/UDC &
    ;;
  stop)
    echo none > /sys/kernel/config/usb_gadget/g1/UDC
    ;;
  restart|reload|force-reload)
    echo "Error: argument '$1' not supported" >&2
    exit 3
    ;;
  *)
    echo "Usage: adbd start|stop" >&2
    exit 3
    ;;
esac

上面是一个示例,如果调起来比较困难,也可以在资料库中直接获取最简单的 adb 配置。

后台 USB 配置成功后,可以直接启动 adbd 服务。

# adbd &

# 下面是打印信息
install_listener('tcp:5037','*smartsocket*')
[  215.019821] read descriptors
cannot bind 'tcp:5037'
warnning! use usb only
[  215.026174] read strings
adbd may crash
Using USB

表示不能够绑定到 tcp ,指定用 usb

4.2 无线连接

image-20240418110639772

这种方式,需要你的设备端连接到网络,通常使用 WiFi 来连接,连接成功后查看服务器和设备端的 IP 地址,如下:

  • 设备端
# ifconfig
wlan0     Link encap:Ethernet  HWaddr 9C:84:B6:62:9F:54  
          inet addr:192.168.50.136  Bcast:192.168.50.255  Mask:255.255.255.0
          inet6 addr: fe80::9e84:b6ff:fe62:9f54/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3247 errors:0 dropped:286 overruns:0 frame:0
          TX packets:320 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:409353 (399.7 KiB)  TX bytes:31375 (30.6 KiB)
  • 主机端尝试 ping 设备端的 IP 地址, ping 通即可保证链路正常。
dong@ubuntu:~$ ping 192.168.50.136
PING 192.168.50.136 (192.168.50.136) 56(84) bytes of data.
64 bytes from 192.168.50.136: icmp_seq=1 ttl=128 time=18.5 ms
64 bytes from 192.168.50.136: icmp_seq=2 ttl=128 time=8.04 ms
  • 查看设备端监听的端口
# netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       
tcp        0      0 0.0.0.0:5555            0.0.0.0:*               LISTEN      
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node Path
unix  3      [ ]         DGRAM                        50 /dev/log
unix  2      [ ]         DGRAM                     17723 /var/run/wpa_supplicant/wlan0
unix  2      [ ACC ]     SEQPACKET  LISTENING      11722 /run/udev/control
unix  2      [ ACC ]     STREAM     LISTENING      11023 @jdwp-control
unix  3      [ ]         STREAM     CONNECTED      11020 
unix  3      [ ]         DGRAM                     10422 
unix  3      [ ]         DGRAM                     10421 
unix  3      [ ]         STREAM     CONNECTED      11024 
unix  3      [ ]         STREAM     CONNECTED      11025 
unix  3      [ ]         STREAM     CONNECTED      11021 
unix  3      [ ]         STREAM     CONNECTED        838 
unix  2      [ ]         DGRAM                        53 
unix  3      [ ]         STREAM     CONNECTED        837 
  • 主机端连接
dong@ubuntu:~$ adb connect 192.168.50.136:5555
connected to 192.168.50.136:5555
  • 查看 adb 设备
dong@ubuntu:~$ adb devices
List of devices attached
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 调试选项已启用。

  2. 连接设备的 Shell:

    adb shell

    该命令允许你在设备上运行交互式 shell。

  3. 推送文件到设备:

    adb push local_file_path /device/path

    将本地文件推送到设备上指定路径。替换 local_file_path 为本地文件路径, /device/path 为设备上的目标路径。







请到「今天看啥」查看全文