资讯动态

安卓USB驱动安装与ADB/Fastboot/9008排障指南

发布时间:2026/10/27 19:20:40 来源:尧图企业网站定制
简介这份压缩包是面向 Windows 系统下连接与管理小米手机、平板及其他 USB 设备的驱动程序集合适合设备无法识别、数据传输异常、刷机或固件升级受阻时备用也可供日常维护人员了解驱动包结构。包内共 15 个文件主要由 DLL 驱动运行库、INF 安装信息文件、CAT 数字签名文件构成并附带 NOTICE、README 说明及 properties 配置信息压缩包约 8.28MB体量轻便便于按系统架构取用对应组件。目前已有 5524 人学习下载在小米设备连接场景中具有一定参考价值。资源将驱动运行库、安装描述与签名信息集中归档读者可据此核对适用系统、驱动版本与设备识别条件在排查兼容性、安装失败或签名异常时获得较明确的文件依据也能了解 USB 驱动包的典型组成、文件分工和用途。1. 一个黄色感叹号背后的东西这份 USB 驱动包解决什么问题手机插上电脑设备管理器里多出一个带黄色感叹号的「未知设备」adb devices列表空空如也fastboot devices也认不到——这是调试机架上最常撞见的一幕八成不是数据线的问题而是 USB 驱动没有安装到正确的接口上。这份厂商出品的安卓 USB 驱动包作用就是在 Windows 上把 ADB 调试口、Fastboot 引导口、以及 9008 紧急下载口这几种工作模式补齐成系统能够枚举的合法设备节点。它最适合刷机调试、产线烧录、售后维修、自动化测试机架这几类人手上有不止一台机器、需要反复插拔、需要脚本无人值守跑通。新手照着装一遍能通熟手真正该关心的是 INF 里声明了哪些 VID/PID、数字签名怎么通过以及为什么同一根线换一台电脑就会识别失败。2. 解压先别急着装INF、CAT、SYS 三件套与三类接口拿到压缩包很多人的第一反应是找里面的setup.exe双击。这个动作在干净系统上大概率能成在装过其他厂商驱动的机器上就是灾难的开始——旧 INF 优先级更高新驱动装进去了但没生效你会在设备管理器里看到一个「已安装最新驱动」却依然报错的设备。所以先花十分钟搞清楚包里有什么。2.1 压缩包中每类文件的职责解开压缩包真正参与驱动安装的其实只有三种文件其余的要么是安装器要么是给安装器读的配置文件。扩展名作用装错了会怎样.inf驱动安装说明书声明匹配哪些硬件 ID、装哪个 SYS、注册什么设备接口匹配不到硬件 ID设备管理器直接不认.cat数字签名目录记录 INF 和 SYS 的哈希供系统校验64 位系统拒绝加载报「无法验证发布者」.sys内核态驱动本体真正跟 USB 端点打交道的那一层缺失或版本不匹配设备能枚举但一通信就断开.dll/.exe安装器、诊断工具、辅助库不影响驱动加载但装错版本的安装器会覆盖 INF.ini部分包里的额外配置比如 ADB 的厂商白名单忽略它adb devices会显示no permissions.inf文件值得单独打开看一眼。里面几个段落是核心[Version]声明驱动类别和签名信息[Manufacturer]把厂商名映射到具体的模型段[Device.NTamd64]下面那一串%DeviceName% USB_Install, USB\VID_xxxxPID_xxxx才是真正的匹配规则。你后面所有的排查本质上都是在比对「设备报上来的硬件 ID」和「这一行里写的 ID」是否一致。.cat文件是绕不过去的一关。64 位 Windows 从 Vista 之后就不再允许加载没有签名的内核驱动测试签名模式下能临时绕过但那只适合实验室机器产线和客户机器上开测试签名等于给自己埋雷。所以拿到包的第一件事是确认.cat在不在、有没有被解压工具破坏——用某些国产解压软件解出来.cat会被改掉时间戳甚至截断装的时候报「哈希值不匹配」其实文件本身就是坏的。2.2 ADB、Fastboot、9008 是三个不同的设备这是新手最容易混淆、也是驱动装不上时最该先想明白的一点一台安卓手机在不同的工作模式下对电脑来说是完全不同的三个 USB 设备硬件 ID 不一样需要的驱动也不一样。工作模式进入方式设备管理器里通常显示为驱动来源ADB 调试开机状态 打开 USB 调试Android ADB Interface / 复合设备下的一个接口驱动包里的 WinUSB 或厂商自签驱动Fastboot关机后按组合键进引导模式Android Bootloader Interface同一份 INF 里的另一个模型段9008 紧急下载短接测试点或用命令切到 EDLQDLoader 9008 串口设备带 COM 号INF 里的 USB\VID_xxxxPID_9008 段MTP/PTP 文件传输开机状态 选择文件传输便携设备系统自带不需要这个包一个驱动包里往往同时写了好几个模型段分别对应上面这几种模式。问题就出在这里Windows 的驱动匹配是「一个设备对一个 INF 段」你在 ADB 模式下装好了驱动切到 Fastboot 模式后系统看到的是一个全新的、硬件 ID 不同的设备又变成黄色感叹号了。很多人以为「驱动装失败了」其实是切模式之后没重新指定。提示装驱动之前先确认手机当前处在哪个模式。设备管理器里右键设备 → 属性 → 详细信息 → 硬件 ID把那一行抄下来后面所有操作都围绕这行 ID 展开。2.3 装之前先做一次只读检查在动手改系统之前先摸清现状。下面这段 PowerShell 只读不写跑完你就知道机器上到底装了几份同类驱动、有没有旧版本在抢位置。# 需要管理员权限的 PowerShell # 1) 列出系统里已有的第三方驱动包oem*.inf 是后装的系统自带的不会出现在这里 pnputil /enum-drivers | Select-String -Pattern oem\d\.inf|Provider|Class -Context 0,2 # 2) 只看当前在线的 USB 设备重点看 Status 不是 OK 的那些 Get-PnpDevice -Class USB -PresentOnly | Select-Object FriendlyName, Status, InstanceId | Sort-Object Status # 3) 把硬件 ID 单独捞出来方便和 INF 里的行做比对 Get-PnpDevice -PresentOnly | Where-Object { $_.InstanceId -like USB\VID_* } | ForEach-Object { $id (Get-PnpDeviceProperty -InstanceId $_.InstanceId -KeyName DEVPKEY_Device_HardwareIds).Data [PSCustomObject]{ Name $_.FriendlyName; Status $_.Status; HardwareIds ($id -join ; ) } } | Format-List第一段命令列出的是所有通过 INF 安装的第三方驱动包oemXX.inf是系统给它们分配的编号。如果你看到同一个 Provider 下面挂着三四个oem编号说明历史上装过好几个版本这时候不要急着装新的先想清楚要保留哪一个——多个版本的 INF 同时存在Windows 会挑「匹配度最高」的那个而匹配度的计算规则并不总是符合直觉。第二段和第三段是排查的主力。Status字段出现Error、Unknown、Degraded都意味着设备没正常起来InstanceId里那串VID_和PID_就是你跟 INF 比对时的关键字。把这段输出存成文本文件装完驱动再跑一遍做 diff比凭记忆判断靠谱得多。3. 三种装法手动指定、命令行批量、以及为什么不碰第三方工具同一个驱动包装法有好几种适用场景完全不同。单台机器调试用手动指定最直观一次要处理十几台机器的产线就得靠命令行而第三方「一键驱动」工具我是坚决不用的——原因放在 3.4 讲。3.1 设备管理器「从磁盘安装」的正确顺序这是最原始也最可控的方式适合第一次接触这个包、想看清楚每一步发生了什么的人。手机进入目标模式先装 ADB 就开机开调试先装 Fastboot 就进引导模式用数据线直连主机后置 USB 口不要经过 Hub。打开设备管理器找到带黄色感叹号的那个设备右键 → 更新驱动程序。选「浏览我的电脑以查找驱动程序」再选「让我从计算机上的可用驱动程序列表中选取」。点「从磁盘安装」浏览到解压目录里的.inf文件确定。列表里会出现若干条型号不要直接点下一步先看清楚每一条后面的硬件 ID 注释挑跟你抄下来的那行 ID 对得上的。下一步忽略「不推荐安装此驱动程序」的警告等进度条走完。断开重连数据线再看设备管理器感叹号消失且设备名变成正常名称才算成功。第 5 步是整个流程里最容易出错的地方。一个 INF 里往往写了七八个型号名字看起来都差不多全都是「Android Composite ADB Interface」这类。选错了也能装上设备管理器也不报错但adb devices就是没有设备——因为装到了另一个接口的驱动上USB 复合设备的其他接口仍然是裸的。判断依据只有一个硬件 ID。另外第 7 步的「断开重连」不是可有可无的仪式。Windows 对已经枚举过的设备会缓存描述符驱动换了之后不重新枚举有些字段不会刷新表现为「设备管理器显示正常但工具认不到」。3.2 pnputil 与 devcon能写进脚本的装法手动点七步在一台机器上可以接受十台机器就是折磨。命令行安装的核心是两步先把驱动包加进系统的驱动仓库再把它绑到具体设备上。# 管理员 PowerShell # 第一步把整个目录下的 INF 加入驱动仓库/install 表示同时尝试安装到匹配的设备 # /subdirs 会递归子目录很多驱动包按平台分了 x64/、arm64/ 子目录 pnputil /add-driver D:\xiaomi_usb_driver\*.inf /subdirs /install # 第二步查看刚加进去的驱动包被分配了哪个 oem 编号 pnputil /enum-drivers | Select-String -Pattern android|adb|bootloader -Context 2,4 # 第三步强制把某个设备绑到指定 INF设备没插着也能预注册 # 硬件 ID 用你从设备管理器抄下来的那一行注意反斜杠需要转义 pnputil /add-driver D:\xiaomi_usb_driver\android_winusb.inf /installpnputil是系统自带的从 Windows 8 开始功能就够用了不需要额外下载任何东西。/add-driver只入仓不绑定/install会在入仓后立刻尝试匹配当前在线的设备。真正麻烦的是「设备已经用一个错误的驱动起来了」这种情况pnputil不会主动去抢得先把旧设备卸掉再重扫。这时候devcon更好用它能直接对某个实例做 update# devcon 需要单独获取放在系统 PATH 里 # 用法devcon update INF 路径 硬件 ID # 这条命令会把匹配该硬件 ID 的设备强制更新到指定 INF不需要先卸载 devcon update D:\xiaomi_usb_driver\android_winusb.inf USB\VID_1A2BPID_0C01MI_01 # 更新完重启设备节点等于帮你做了一次拔插 devcon restart USB\VID_1A2BPID_0C01MI_01 # 想确认到底绑上了没查设备状态 devcon status USB\VID_1A2BPID_0C01MI_01参数说明update后面第一个参数是 INF 的完整路径第二个是硬件 ID注意是硬件 ID 不是实例 ID。实例 ID 长这样USB\VID_1A2BPID_0C01\52F3A1B401末尾多了一段devcon update不接受会报「无匹配设备」。如果你手上只有实例 ID从设备管理器属性里往上翻一行就能看到硬件 ID。MI_01这个后缀是复合设备的接口号很多 ADB 接口挂在MI_01或MI_02上而不是MI_00。这一点在写批量脚本时特别关键少写这个后缀命令匹配不到任何设备还会静默成功返回 0让你以为装好了。3.3 驱动签名这道坎什么时候该关什么时候不该关装到最后一步弹出「Windows 无法验证此驱动程序的发布者」说明.cat签名校验没过。三种可能签名过期、签名被解压破坏、或者这压根就是个开发版未签名 INF。临时对策是开测试签名模式# 管理员命令行开启测试签名仅限实验机产线和客户机不要开 bcdedit /set testsigning on # 重启后生效桌面右下角会出现「测试模式」水印 # 装完想关掉 bcdedit /set testsigning off这个开关一开系统会接受任何自签名驱动同时也会接受任何别的没签名的东西。放在实验室调试机上无所谓放到对外交付的机器上就是安全隐患。我的习惯是能用带正规签名的.cat就走正规流程只有在自己一个人用的调试机上且确认过包来源可靠才会临时开。如果开完测试签名还是装不上看C:\Windows\INF\setupapi.dev.log搜你的硬件 ID日志里会明确写「签名校验失败」还是「INF 段落解析失败」。这个日志是纯文本从下往上翻找最后一次时间戳比任何工具的报错都详细。3.4 第三方「一键驱动」工具的问题这类工具的问题是它改的东西你看不见。它会往系统里塞一堆来源不明的 INF改注册表里的设备安装优先级甚至替换系统的 USB 类驱动。装好之后确实能用了但下次换一台设备、换一个模式冲突就开始了而且冲突现场你根本不知道怎么还原。更实际的问题是版本漂移。厂商的驱动包是跟具体机型、具体芯片平台绑定的第三方工具给你匹配的往往是「通用 ADB 驱动」ADB 能通Fastboot 和 9008 就未必。而对于刷机和烧录场景Fastboot 和 9008 恰恰才是真正需要驱动的那两个模式。所以路径很清楚单机手动指定多机走pnputildevcon脚本第三方工具只在一种情况下考虑——你手上这台机器已经乱到无法判断装了什么用它做一次全量清理然后立刻回到手动流程重新装一遍。4. 驱动装上了还是认不到VID、白名单与物理链路设备管理器里显示正常黄色感叹号也没了但adb devices依然输出空列表。这种情况下驱动的锅只占一半另一半在别的地方。4.1 用硬件 ID 反查 INF 里到底有没有你第一步永远是确认 INF 支持你的设备。不要相信「通用驱动」这四个字打开 INF 文件搜你抄下来的 VID# 从 INF 里把所有声明的硬件 ID 抽出来 Select-String -Path D:\xiaomi_usb_driver\*.inf -Pattern USB\\VID_[0-9A-Fa-f]{4}PID_[0-9A-Fa-f]{4} -AllMatches | ForEach-Object { $_.Matches.Value } | Sort-Object -Unique # 和你设备的实际硬件 ID 做比对 Get-PnpDevice -PresentOnly | Where-Object { $_.InstanceId -like USB\VID_* } | Select-Object -ExpandProperty InstanceId如果 INF 里压根没出现你的 VID那装一百遍也没用这个包不支持你的机型。这种情况在跨平台混用的时候很常见同品牌不同芯片平台的机器VID 一样但 PID 段完全不同INF 里只写了其中一部分。4.2 adb 的厂商白名单与用户目录配置adb在 Windows 上认设备还有一层逻辑它会读用户目录下的.android\adb_usb.ini老版本或者在%USERPROFILE%\.android\下找设备信息。如果这个文件里明确列了白名单而你的设备不在其中adb devices会显示no permissions或者干脆不列出来。# 位置C:\Users\你的用户名\.android\adb_usb.ini # 内容格式是一行一个 0x 开头的 VID只写 VID 不写 PID 0x1A2B 0x1A2C新版 adb 对这个文件的依赖已经弱化了很多但如果你用的是随驱动包一起分发的旧版 adb这仍然是必查项。判断方法很简单adb devices输出里出现no permissions就是权限/白名单问题完全空白则是设备根本没被识别成 ADB 接口。4.3 端口、线材、Hub 这些不涉及驱动的问题驱动层面全对物理层面照样能让你调一下午。几个血泪经验USB 3.0 的蓝色口在 ADB 和 Fastboot 模式下兼容性问题明显多于 2.0 口尤其是老平台设备。遇到设备间歇性掉线第一件事是换到主板后置的 USB 2.0 口上试。前面板口和 Hub 一律排除。前面板走的是机箱内部延长线供电和信号质量都不稳定Hub 会把设备挂到一个共享控制器下多个设备同时枚举时容易超时。产线上我见过最离谱的一次是整条线的机器都用一个带电源的工业 Hub某几台永远识别不到换了三个驱动版本之后才发现是 Hub 的固件问题。数据线本身也有讲究。能充电的线不一定有数据线芯尤其是短途配送附赠的那些。判断方法插上线之后看设备管理器里设备有没有出现如果连「未知设备」都不出现电脑压根没检测到 D 上拉那就是线的问题跟驱动一点关系都没有。4.4 一条链路验证清单每次接手一台新机器我会按顺序跑下面这段五个检查点全过才算环境 OK任何一步失败就停在那一层排查不要跳步。# 1. 系统层面设备是否被枚举应能看到带 VID 的实例 ID # Windows: 设备管理器查看或 Get-PnpDevice -PresentOnly | Where-Object { $_.InstanceId -like USB\VID_* } # 2. 驱动层面设备状态是否 OK绑的是哪个 INF devcon status USB\VID_1A2BPID_0C01MI_01 # 3. 服务层面adb 服务是否正常运行先杀掉重启避免缓存 adb kill-server adb start-server # 4. 设备层面adb 能否列出带详细信息看 transport id 和产品名 adb devices -l # 5. 模式层面切到引导模式后单独验证一次 adb reboot bootloader fastboot devices第 3 步的kill-server经常被跳过但 adb 服务会缓存设备列表上一次连接失败的状态可能一直留着表现是新插的设备不出现。养成习惯任何「认不到」的问题先杀服务重启一次能省掉大量误判。第 5 步是验证三个模式各自独立的最后一环。ADB 通了不代表 Fastboot 通两者用的是不同的 USB 配置和不同的 INF 段。产线上烧录机必须两个都验只验 ADB 的话等进了引导模式才发现问题那批货已经卡在工位上了。5. 五个现场翻车记录从现象到根因5.1 装完显示「设备运转正常」工具却认不到现象设备管理器里没有任何黄色感叹号设备名称显示为正常的 ADB 接口但adb devices一直是空列表重启电脑、重插线都没用。原因驱动装到了复合设备的错误接口上。安卓设备在 ADB 模式下是一个 USB 复合设备同时暴露 ADB 接口、MTP 接口、以及可能的串口。INF 里针对每个接口都有独立的模型段靠MI_xx后缀区分。手动从磁盘安装时如果挑了一个不带MI后缀的通用段Windows 会把整个设备绑上去ADB 那个具体的接口反而没人管。解决卸载设备时勾选「删除此设备的驱动程序软件」拔线重新插上在硬件 ID 里找到带MI_01或MI_02的那一行devcon update时把完整后缀带上。判断装对没装对看设备管理器里是否出现一个复合设备下面挂着 ADB Interface 子节点而不是单个平铺的设备。5.2 换一台电脑就装不上报「哈希值不匹配」现象同一份压缩包在 A 机器上装得好好的拷到 B 机器上解压后安装报「文件的哈希值不在指定的目录文件中」。原因.cat文件在拷贝或解压过程中被破坏。常见的触发点是用了带「智能解压」功能的工具它会自动识别并转换文件格式或者压缩包经过了某些即时通信工具的传输附件被重新编码。.cat里存的是 INF 和 SYS 的哈希任何一个字节变了校验就过不去。解决重新从原始来源获取压缩包解压时用系统自带的资源管理器或者 7-Zip 的「提取到当前文件夹」不要用「双击打开再拖出来」的方式。解压完核对一下文件大小和修改时间.cat的时间戳被改成解压当天基本就是被重写过了。5.3 装完 ADB 驱动Fastboot 模式变成未知设备现象开机状态下调试一切正常adb reboot bootloader之后设备管理器立刻多出一个未知设备fastboot devices无输出。原因这是最典型的一种误解——以为「驱动装好了」是一个全局状态。实际上每个工作模式对应一套独立的硬件 IDADB 装好了跟 Fastboot 一点关系没有。Fastboot 模式下的设备是另一套描述符系统重新枚举自然又是裸设备。解决进引导模式后重复一遍手动指定的流程这次挑 INF 里对应 Bootloader 的模型段。装好之后这个模式也会被记住下次进来自动匹配。产线机器的标准做法是三个模式各装一遍装机验收清单里写死这一条。5.4 9008 模式端口号一直在跳烧录工具连不上现象设备进入紧急下载模式后设备管理器里出现QDLoader 9008 (COM7)但烧录工具打开时提示端口被占用或者干脆找不到刷新一下端口号变成 COM9 了。原因驱动没装对设备被当成通用串口而非专用下载口每次重新枚举系统重新分配端口号。另一个常见原因是别的串口工具调试助手、虚拟串口软件占着这个端口没释放。解决先在设备管理器里把这个 COM 设备的驱动换成 INF 里对应的下载口段装对之后端口号会稳定下来。然后检查有没有后台程序占端口用Get-Process配合串口监视工具排查。烧录工具的配置文件里如果写死了 COM 号改成按 VID/PID 自动查找别写死。5.5 多台设备同时插只有第一台能被识别现象机架上插了八台设备adb devices只列出第一台或者随机列出两三台。原因USB 控制器带宽和枚举超时。八台设备挂在同一个根 Hub 下同时上电枚举时控制器处理不过来后面的设备枚举超时被丢弃。另一个隐藏原因是 adb 服务本身的并发连接限制旧版本在设备数超过一定量时会拒绝新连接。解决分物理控制器。主板上的 USB 口通常分属两到三个不同的根 Hub把设备分散插到不同控制器下别全堆在一个扩展卡上。同时把 adb 升级到较新的版本服务端的并发处理能力差别很大。实在要接十几台用带独立控制器的多口工业 USB 卡比堆 Hub 靠谱得多。6. 把驱动塞进流水线一份可复用的装机验收脚本单台机器装驱动靠手几十台机器靠脚本但脚本要解决的从来不只是「装」这一件事而是「装完怎么证明它是对的」。我见过太多产线脚本跑完返回 0操作员点一下确认就放行等到下游发现一半机器连不上回头查日志发现驱动根本没绑上——pnputil在匹配不到设备时也会静默成功。所以我的做法是把「安装」和「验收」拆成两个独立步骤验收失败就阻断流程。核心思路是先把设备按硬件 ID 分类逐个模式检查是否存在且状态为 OK再跑一次真实的工具通信两条都过才算合格。# 装机验收脚本骨架管理员权限运行 $ErrorActionPreference Stop $report () # 三个模式期望出现的设备特征用正则匹配 InstanceId $targets ( { Mode ADB; Pattern USB\\VID_\wPID_\wMI_0[12] ; Cmd { adb devices } }, { Mode Fastboot; Pattern USB\\VID_\wPID_\w ; Cmd { fastboot devices } }, { Mode EDL; Pattern USB\\VID_\wPID_9008 ; Cmd { Get-PnpDevice -Class Ports } } ) foreach ($t in $targets) { $dev Get-PnpDevice -PresentOnly | Where-Object { $_.InstanceId -match $t.Pattern } if (-not $dev) { $report [PSCustomObject]{ Mode $t.Mode; Found $false; Status MISSING; Detail 未枚举到设备 } continue } # 状态必须是 OKError/Unknown/Degraded 一律判失败 $bad $dev | Where-Object { $_.Status -ne OK } $report [PSCustomObject]{ Mode $t.Mode Found $true Status if ($bad) { DRIVER_FAIL } else { OK } Detail ($dev.InstanceId -join ; ) } } $report | Format-Table -AutoSize # 有任何一行不是 OK返回非零退出码让上层流水线中断 if ($report.Status -contains MISSING -or $report.Status -contains DRIVER_FAIL) { exit 1 }这段脚本真正的价值在最后两行把判定结果转成退出码。上层的烧录流程、测试流程全部依赖这个退出码决定要不要继续人不需要盯屏幕。参数上唯一需要按现场改的是$targets里的正则不同芯片平台的 PID 段不一样MI_0[12]也可能变成MI_00第一次部署时用 4.1 那段命令把实际硬件 ID 抓出来再调整。还有两个细节脚本第一行$ErrorActionPreference Stop不能省否则某台设备的查询失败会被静默吞掉报告里少一行你根本不会注意adb devices那段应该先跑adb kill-server再跑避免读到上一次的缓存。这套东西我在三个不同批次的机架上用过唯一一次翻车是忘了在脚本开头杀服务导致十台机器里有三台报 OK 但实际连不上排查了两个小时才发现是缓存。从那以后我每次改这类脚本都会先在两台机器上手动跑一遍完整流程把每一步的中间输出打印出来确认脚本逻辑和手动逻辑能对上再铺到整条线上。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑