• RK平台ADB不识别问题排查


    简介

    ADB是Android系统的调试工具,一般用USB线连接开发板和PC,可以抓取开发板的调试日志,执行shell指令,传输文件等功能。为了调试方便,RK平台的Linux系统也默认支持ADB,其源码是从Android移植过来的。
    本文档主要用于新开的项目中遇到ADB不识别,可以按下面步骤来排查问题。

    基本问题排查步骤

    RK发布的大部分SDK默认是支持通过ADB连接PC的,如果板子通过USB线连接PC后,PC识别不到ADB设备,需要先确认几个问题:

    1. 硬件连接是否正常?
      板子通过USB线连接PC,进入loader模式或者maskrom模式,是否能正常识别?如果能正常识别说明USB接口的数据线部分硬件连接是正常的。
    2. 板子是否有正常开机?
      可以通过开发板的调试串口看开机log,开机后调试串口能执行shell指令说明系统已经正常开机,如果板子不能正常开机,请先排查系统问题,再来调试USB
    3. 硬件连接是否正确?
      ADB需要连接到开发板的OTG口,即烧录固件的USB口。
    4. PC是否有安装USB驱动和ADB工具?
      PC如果是第一次连接RK开发板,请正确安装RK的USB驱动,Windows PC的USB驱动在SDK中可以找到,Android SDK在RKTools目录下面,Linux SDK在tools目录下面,驱动安装包名字为DriverAssitant_vx.x.zip,Linux PC不需要单独安装USB驱动。Windows PC的ADB工具请上网找安装教程,Linux PC如果是ubuntu系统可以用: sudo apt-get install android-tools-adb安装,请确保能正常执行ADB指令。
    5. 确认ADB连接状态?
      RK的烧录工具可以显示ADB设备的连接状态,但是如果是复合设备(如把板子做成ADB+UVC),由于改了VID/PID,RK的烧录工具无法正确显示ADB设备的连接状态,因此最好是通过PC的设备管理器或者通过执行ADB指令(如:adb devices)来确认ADB连接状态。

    如果以上确认没问题,可能是板子配置或者应用软件问题,需要进一步排查。

    底层驱动排查

    软件配置需要根据板子的硬件设计来适配,因此需要根据硬件原理图来检查USB配置。

    1. 确认USB接口类型。
      常用的USB接口类型有Type-A,Type-C,Micro-USB等,不同的接口类型的配置有差异,这个在SDK提供的文档中都可以找到对应的章节。
    2. 根据USB接口类型找对应的DTS配置。
      以RK3588 Android12为例,RK3588的USB文档是RKDocs/common/usb/Rockchip_RK3588_Developer_Guide_USB_CN.pdf,该文档的《RK3588 USB DTS 配置》章节列举了三种USB接口类型的配置,其中还包括了USB2.0和USB3.0两种类型。
      三种USB接口类型的配置
    3. Type-C芯片的选择。
      如果需要支持全功能的Type-C口,需要配合Type-C芯片,Type-C芯片需要适配驱动,如果驱动没有正常工作也会导致USB连接异常,因此建议选用SDK默认支持的Type-C芯片,在文档的《Type-C 控制器芯片支持列表》章节有列出来,如果选用SDK默认没支持的Type-C芯片,需要自己调试。

    Android系统相关问题

    1. 开发者选项的USB调试功能
      在userdebug模式下,需要默认关闭ADB,可以加下面补丁修复:
    diff --git a/device.mk b/device.mk
    index b666b84..d6047d3 100644
    --- a/device.mk
    +++ b/device.mk
    @@ -904,7 +904,7 @@ endif
    ### in AOSP-system image (user firmware) ###
    ifneq (,$(filter userdebug eng,$(TARGET_BUILD_VARIANT)))
    PRODUCT_DEFAULT_PROPERTY_OVERRIDES += \
    -    ro.adb.secure=0
    +    ro.adb.secure=1
    PRODUCT_COPY_FILES += \
         device/rockchip/common/zmodem/rz:$(TARGET_COPY_OUT_VENDOR)/bin/rz \
         device/rockchip/common/zmodem/sz:$(TARGET_COPY_OUT_VENDOR)/bin/sz
    --
    2.7.4
    

    Linux系统相关问题

    部分buildroot系统默认不支持ADB,在添加ADB过程如果遇到启动ADB报错,可以检查以下几个问题:

    1. 打开环回网络
    # ifconfig lo up
    # ifconfig 
    lo        Link encap:Local Loopback  
              inet addr:127.0.0.1  Mask:255.0.0.0
              UP LOOPBACK RUNNING  MTU:65536  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
    
    1. 挂载pts
    mkdir -p /dev/pts
    mount -vt devpts -o gid=4,mode=620 none /dev/pts
    

    网络ADB相关问题

    如果要开启网络ADB,请确认是否有设置端口号,设置端口号的指令(Android):

    # setprop service.adb.tcp.port 5555
    # stop adbd
    # start adbd
    

    ADB Host端

    buildroot不支持Host端用ADB,Debian或者ubuntu可以自己用: sudo apt-get install android-tools-adb安装ADB工具来支持Host端用ADB,Android可以通过添加可执行文件来支持Host端的ADB。

  • 相关阅读:
    【JAVA】Scanner的next()、nextInt()、nextLine()读取机制
    一个月速刷leetcodeHOT100 day13 二叉树结构 以及相关简单题
    【软件逆向-分析工具】反汇编和反编译工具
    谁在滋养你,谁在消耗你
    常用应届生Java开发笔试面试题(更新中)
    餐饮软件开发价格受到需求的影响!
    4 年 Java 程序员十面阿里终拿下 offer,评级 P6+ 年薪 30-40w 无股票
    【Docker】Linux网桥连接多个命名空间
    Mysql数据库管理员入门指南
    three.js场景三元素
  • 原文地址:https://blog.csdn.net/jacolin/article/details/139254373