Android USB VID PID 及 ADB

在 android 设备的 Linux 内核中把 USB 驱动的 PID VID 修改以后,也许之前的 adb 工具就不能识别设备了,会打印出 "device not found" 的提示,特别是 windows ,adb 驱动也不能用了。

这个时候该怎么办呢?

一,先搞清现在的 PID ,VID 为多少,例如分别为 aaaa、bbbb(十六进制)

      对于 linux 如 ubuntu, 插入 设备,再查询 /sys/bus/usb/devices/ 下的相应设备,如 "1-1" 下的 idVender, idProduct 获得。另一种快速的方法是,执行 lsusb 命令, "Bus 008 Device 003: ID04b3:310d IBM Corp. ", 这是我的鼠标的 usb 信息, 蓝色数字部分分别是 PID, VID。

      对于 windows, 可从相应设备的属性中获得。


二,对于windows:

1. 修改 adb 驱动中的 android_winusb.inf 文件。对照着别的项目加就可以了。

例如:

; My product
%CompositeAdbInterface% = USB_Install, USB\VID_AAAA&PID_BBBB

%SingleBootLoaderInterface% = USB_Install, USB\VID_AAAA&PID_BBBB&MI_01

2. 右击我的电脑->属性->高级->环境变量,添加 ANROID_SDK_HOME 环境变量。如果你有 android SDK, 就设成 SDK 的路径;如果没有,那也没关系,设为你觉得方便的任何路径。

3. 在前面设置的 ANDROID_SDK_HOME 对应的路径下,寻找 .android 目录,如果没有就创建一个;在 .android 目录下新建一个文件,叫adb_usb.ini, 记住,后缀是 "ini" 哦;添加前面获得的 VID 到 adb_usb.ini 中,如 0xAAAA。

4. 然后安装 adb 驱动

5. 进入 DOS cmd, 分别输入 adb kill-server, adb start-server, adb devices;若能看到 devices 列出,那么就成功了。


补充:步骤 2 和 3 也可以用另一种办法代替:

首先,运行 cmd 命令进入控制终端,这个时候控制终端是在当前用户的 ”home“ 目录(见注释)下,输入命令 “mkdir .android” 建立 .android 目录(直接用鼠标控制是建立不了以 '.' 开头的文件的 );

然后,打开 .android 目录(在home 目录下),创建文件 "adb_usb.ini" 文件,往里面写入 VID (如,0xAAAA)便可。

注释:当前用户home 目录: 比如登录用户名是 fsysky,那么 fsysky 用户的 home 目录就是 “/Documents and Settings/fsysky”。一般用 windows 的人是以 Administrator 登录的,那么,home 目录是 “/Documents and Settings/Administrator”。


三,对于linux

1. 在用户的 home 目录下,寻找 .android 目录,如果没有就创建。在 .android 目录下新建一个文件,叫 adb_usb.ini, 记住,后缀是 "ini" 哦;添加前面获得的 VID 到 adb_usb.ini 中,如 0xAAAA。

2. 在 shell 中 分别输入 adb kill-server, adb start-server, adb devices;若能看到 devices 列出,那么就成功了。

这里 kill-server,是 kill 掉 adb 的 daemon,否则,adb 还是保留着先前的 Vender 信息。start-server 就加载了新的 Vender 信息。


注意:有些人可能用 adb 需要超级用户权限(sudo),这时第一步中的home 目录应该为 /root,不想麻烦,直接两个 Home 目录都加上。


根据USB规范的规定,所有的USB设备都有供应商ID(VID)和产品识别码(PID),主机通过不同的VID和PID来区别不同的设备,VID和PID都是两个字节长,其中,供应商ID(VID)由供应商向USB执行论坛申请,每个供应商的VID是唯一的,PID由供应商自行决定。

   VID和PID通常情况下有两种存储方式,第一种是主控生产商的VID和PID,存储在主控的bootcode中;第二种是设备生产商的VID和PID,该VID和PID存储在主控外部的非易失性存储设备中(EEPROMFlash)的设备固件中,当USB设备连接主机时,如果固件中有设备生产商的VID和PID,会将该VID和PID报告给主机,而忽略主控生产商的VID和PID。所以理论上一个USB存储设备的VID应该是设备生产商的VID,而不是主控生产商的VID,这两个VID应该是不同的(主控生产商自己生产的设备除外)。

   由于VID和PID重复并不会对产品的使用带来严重影响,很多USB设备生产商(山寨厂居多)为了方便,并不会向USB执行论坛申请自己的VID,而

是依然沿用主控生产商的VID或随便向产品写入VID和PID;同时,正规厂家只需要申请VIDPID由厂家自行确定,所以存在相同型号的产品,可能采用了不同的主控(商业需要,很正常),而他们的PID是一样的,基于上述原因通过VID和PID就不能准确识别USB设备的主控型号,这个问题大家在使用USB设备的过程中需要注意。

有专门的软件可以检测:如腾楼庄园usb工具箱等。


首先需要下载adb for linux的工具包 下载地址

解压到任何地方,不要删除掉就是了

然后新建并编辑一个文件

sudo vi /etc/udev/rules.d/70-android.rules

在里面写入:

如果你的系统是10.10,或者11.04(11.10没有测试),则写入下面这句

SUBSYSTEM==”usb”, ATTR{idVendor}==”04e8“, MODE=”0666〃

如果你的系统版本是10.04 就改为下面一句

SUBSYSTEM==”usb”, SYSFS{idVendor}==”04e8“, MODE=”0666〃

其中红色字体未设别标识,不同厂商的标识不一样,请按照自己的手机更改,参照表如下

ManufacturerUSB Vendor ID
Acer0502
Dell413c
Foxconn0489
Garmin-Asus091E
HTC (Older Phones)0bb4
HTC (Newer phones)18d1
Huawei12d1
Kyocera0482
LG1004
Motorola22b8
Nexus One/S18d1
Nvidia0955
Pantech10A9
Samsung04e8
Sharp04dd
Sony Ericsson0fce
ZTE19D2

然后保存退出,再设置一下权限

sudo chmod a+rx /etc/udev/rules.d/70-android.rules

这时候还需要编辑一下 ~/.bashrc 文件加入adb tool的路径

vi ~/.bashrc

在末尾加入,其中红色部分就是刚下载的工具包解压的路径

export PATH=${PATH}:/home/rabbit/Documents/platform-tools

现在需要重启一下你的Ubuntu,然后USB连接手机,确保usb调试已打开,在终端下输入

adb start-server 打开服务
如果一切正常的话
输入
adb devices
就能显示出当前连接到电脑的android设备 ^_^

试试这个命令
adb shell
就能在 Ubuntu上的终端执行android的 shell命令了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值