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连接不上的原因。"
解决办法:
- 首先使用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。
-
cd进入~/.android/目录,创建adb_usb.ini文件;
-
编辑adb_usb.ini文件,将设备的vid添加到文件里(注意添加0x,表示16进制格式)
0x0e8d
-
adb kill-server杀掉adb服务;
-
然后用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;