ubuntu系统无法连接识别到adb设备和fastboot设备解决方法

最近在使用adb连接安卓设备(mtk安卓设备)的时候出现一个问题:

问题一:adb无法识别到设备。

这种情况首先需要确认下你的安卓设备的usb口是不是配置成了OTG模式(看代码确认,一般在dts配置),OTG功能就是可以根据你接入的设备,本机自动切换成为host设备或者device设备,host设备通常是作为主机来用,比如你接入u盘的时候,我可以去读取你的u盘,你把usb口接入电脑的usb的时候,我可以成为device,也就是从设备,这时候你可以读取我设备的信息,或者操作我的设备等。

我这里usb OTG口和网络共用了一个usb口,需要手动切换一下usb的模式:现在的软件做了节点切换。
echo 0 > sys/class/device_ctrl/device_ctrl/val //对这个节点写0,就可以使用USB线连接ADB。写1就切换回网络

问题二:
在windows设备可以识别到adb设备和fastboot设备,但是在ubuntu系统却无法识别到设备,而且lsusb已经识别到设备的vid和pid了
如下所示,第一个是我的安卓设备,是一个MTK平台的设备:

root@ubuntu:~# lsusb
Bus 001 Device 060: ID 0e8d:2003 MediaTek Inc. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 003: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 002 Device 002: ID 0e0f:0003 VMware, Inc. Virtual Mouse
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

网上有说是权限的问题,也试过切换到root或者使用sudo来操作对应adb的命令,但是依然识别不到设备。

后来在网上查找资料才发现,原因是"adb内建有一个知名的厂商ID列表,对于列表内的设备,adb可以直接连接,而不在列表中的设备,它会直接返回,这也就是为什么android设备的驱动已经安装好了,
而adb连接不上的原因。"

解决办法:

  1. 首先使用lsusb命令查询usb设备id()
root@ubuntu:~# lsusb
Bus 001 Device 060: ID 0e8d:2003 MediaTek Inc. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 003: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 002 Device 002: ID 0e0f:0003 VMware, Inc. Virtual Mouse
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

上面的Device 060是我的安卓设备,usb设备的vid(也就是厂商的ID)为0e8d。

  1. cd进入~/.android/目录,创建adb_usb.ini文件;

  2. 编辑adb_usb.ini文件,将设备的vid添加到文件里(注意添加0x,表示16进制格式)

0x0e8d
  1. adb kill-server杀掉adb服务;

  2. 然后用adb devices重新查找设备,就可以找到了;

如果要查看所有 USB 设备的信息,可以这样做:先不插入设备然后查看一下有哪些设备,然后插入设备再查看一次就能确定当前 USB 设备的信息,包括 PID 和 VID。

cat /sys/kernel/debug/usb/devices 

问题三:lsusb可以识别到设备,但是fastboot识别不到设备
原因分析:很有可能跟fastboot工具有关,如果不行就换个工具,我当时在网上下载了几个工具也不行,后面找到对应fastboot源码,修改以下接口函数即可以识别fastboot设备,修改的内容也就是把你的设备的VID(厂商ID,这个一般是固定的)添加到match_fastboot_with_serial接口函数中

--- a/fastboot.c
+++ b/fastboot.c
@@ -209,7 +209,8 @@ int match_fastboot_with_serial(usb_ifc_info *info, const char *local_serial)
        (info->dev_vendor != 0x413c) &&  // DELL
        (info->dev_vendor != 0x2314) &&  // INQ Mobile
        (info->dev_vendor != 0x0b05) &&  // Asus
-       (info->dev_vendor != 0x0bb4))    // HTC
+       (info->dev_vendor != 0x0bb4) &&  // HTC
+       (info->dev_vendor != 0x0e8d))    // MTK
             return -1;
     if(info->ifc_class != 0xff) return -1;
     if(info->ifc_subclass != 0x42) return -1;

版权声明:本文为qq_30624591原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
THE END
< <上一篇
下一篇>>