Android USB VID PID 及 ADB

本文介绍了解决Android设备因修改Linux内核中的USB驱动PIDVID而导致ADB无法识别的问题。提供了针对Windows和Linux系统的详细步骤,包括修改驱动配置、环境变量设置、更新adb_usb.ini文件等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在 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命令了

<think>好的,我需要回答用户关于在Android设备上配置ADBPIDVID的问题。首先,我需要理解PIDVIDADB中的作用。根据提供的引用,PID(Product ID)和VID(Vendor ID)是用于唯一标识USB设备的参数。不过用户提到的引用[1]指出,不同设备可能共享相同的PID/VID,导致识别问题。引用[2]提到了通过写入系统文件来设置PID的方法。 接下来,我需要整理配置PIDVID的步骤。可能的方法包括修改系统文件,例如/sys/class/android_usb/android0/idProduct和idVendor,或者通过内核配置和设备树覆盖(DTO)。需要注意权限问题,可能需要root权限,并且不同Android版本可能有不同的路径或方法。 然后,要确保回答结构清晰,分步骤说明。同时,用户可能需要了解如何验证配置是否生效,比如通过adb devices或lsusb命令检查。还要提醒用户注意硬件差异和系统限制,比如某些设备可能无法修改这些参数。 最后,生成相关问题,涵盖PID/VID的作用、冲突解决、系统文件修改限制、设备树覆盖的应用,以及ADB识别设备的过程。</think>### 如何在Android设备上配置ADBPIDVID? #### 1. **PID/VID的作用与原理** - **PID(Product ID)** 和 **VID(Vendor ID)** 是USB设备的核心标识符,用于操作系统识别设备类型和厂商[^1]。 - 在ADB场景中,PID/VID帮助PC端区分不同Android设备,尤其在多设备连接时。 #### 2. **配置方法** ##### (1) **通过系统文件直接修改(需root权限)** - **步骤**: 1. 进入Android设备的终端(如通过`adb shell`)。 2. 挂载系统分区为可写: ```bash mount -o remount,rw /system ``` 3. 修改PID/VID文件: ```bash echo "902D" > /sys/class/android_usb/android0/idProduct # 设置PID echo "18D1" > /sys/class/android_usb/android0/idVendor # 设置VID(例如Google的VID) ``` 4. 重启USB服务或设备使配置生效[^2]。 ##### (2) **通过内核配置或设备树覆盖(需内核源码权限)** - 在设备内核的`android_usb.c`或设备树(Device Tree Overlay)中定义PID/VID: ```c static struct android_usb_platform_data android_usb_pdata = { .vendor_id = 0x18D1, // VID .product_id = 0x902D, // PID }; ``` ##### (3) **通过系统属性(部分设备支持)** - 在`/system/build.prop`中添加属性(需验证设备兼容性): ```properties persist.sys.usb.config=adb ro.usb.vid=18D1 ro.usb.pid=902D ``` #### 3. **验证配置** - **PC端命令**: ```bash adb devices # 查看设备是否被识别 lsusb # 检查USB设备的PID/VIDLinux/macOS) ``` - **设备端命令**: ```bash cat /sys/class/android_usb/android0/id{Product,Vendor} # 查看当前PID/VID ``` #### 4. **注意事项** - **权限限制**:修改系统文件通常需要root权限或自定义固件。 - **兼容性问题**:不同Android版本路径可能不同(如Android 4.0+使用`/sys/class/android_usb/android0/`)。 - **硬件依赖性**:部分设备PID/VID固化在硬件层,无法通过软件修改。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值