linux系统不认终端adb端口有两种情况,一是终端的vID和pID在udev的rules里面没有对应项,在
http://blog.youkuaiyun.com/yang_hui1986527/article/details/7665989#comments
的文章提到了怎么解决这个问题。
另外一种情况是,终端映射出来的vID和pID不是adb interface的vID/pID:目前的手机或者数据卡连接PC的时候会首先映射出一个U盘或者光驱,里面会包含驱动或拨号工具等等必需软件,windows在碰到这样的设备的时候会自动切换(mode switch)终端的功能(所谓的ZeroCD功能,厂商可省掉驱动光盘的成本)。
在linux界自然也有对应的办法来处理这种情况,这就是usb_modeswitch工具。我机器上安装的是“老迈”的ubuntu 10.04,默认连usb_modeswitch也没有,于是C8812连接之后使用lsusb看到的ID是12d1:1031,adb不可用;在别人11.10系统上lsusb看到的是12d1:1035,必然是没有进行切换了。用apt-get install安装之后发现自动安装的是2010年的版本,里面的切换规则也不全。谷歌了一通发现usb_modeswitch的最新版本已经到了1.2.3,支持的设备列表也更新到了2012-05-19,遂决定安装最新版,操作过程如下:
1,下载usb-modeswitch-1.2.3.tar.bz2和usb-modeswitch-data(这俩好基友好最好下同一版本的)和device_reference.txt
2,sudo apt-get install libusb-dev安装usb-modeswitch所需的库libusb
3,解压usb-modeswitch-1.2.3.tar.bz2后,进入该目录make install(如果之前安装过旧版本,先make uninstall)
4,解压usb-modeswitch-data后,进入该目录make install
整完这4步之后,C8812连PC之后adb已经可以用了,lsusb看到切换到了12d1:1035。
如果以后有新设备linux认不出来,可以下载最新的device_reference.txt,使用命令usb_modeswitch -C device_reference.txt导入新的规则来支持新设备。
(其实之前2010版的usb_modeswitch也可以通过这种方式更新规则,不需重新安装)
简单看下/usr/share/usb_modeswitch(应该是根据usb-modeswitch-data里的usb_modeswitch.d生成的)里有一个名字是12d1:1031的文件,内容如下:
1 # Huawei U8110 / Joy, Vodafone 845 (Android smartphone)
2
3 TargetVendor= 0x12d1
4 TargetProduct= 0x1035
5
6 MessageContent="55534243123456780600000080010a11060000000000000000000000000000"
7
8 # for Android SDK
9 NoDriverLoading=1
可以看到这个就是切换的规则。
usb_modeswitch相关参考以及下载链接: