简介面向 Windows 环境下连接与调试小米手机、平板等设备的 USB 驱动程序包适合需要完成数据传输、固件升级或刷机的普通用户与玩机爱好者使用。压缩包共 15 个文件约 8.28MB以 dll 动态链接库、inf 安装信息文件、cat 数字签名目录文件为主另有说明文档与许可声明分别承担驱动运行、系统识别安装及签名校验等职责同时区分 32 位与 64 位两套安装目录便于按系统版本选取。已有 5524 人学习下载属于使用频率较高的常用工具。包内提供完整的驱动安装信息与配套说明读者可据此在设备管理器中手动指定驱动路径解决设备无法识别、驱动不兼容等常见问题保留的签名文件与更新组件也有助于排查安装失败原因并方便后续对照系统版本进行更新维护。1. 一块板子插上去设备管理器里只多出个黄色感叹号上周帮人看一台调试机手机插上 USB 线设备管理器里冒出一个带黄色感叹号的未知设备adb devices列表空空如也。换线、换口、换电脑折腾一小时最后发现问题出在 USB 驱动上——系统认出了“有个设备插进来了”却没认出“这是个 ADB 接口”。这份 xiaomi_usb_driver.zip 就是干这件事的它把安卓设备在 Windows 下需要的几类 USB 驱动ADB 调试接口、bootloader 下载接口、紧急下载模式的串口打包在一起附带 INF 安装信息让你不用满世界找单个驱动文件。适合三类人经常刷机、做自动化测试的给产线写烧录脚本的以及被“代码 43”“代码 10”折磨过的。需要说清楚的是它不是什么万能药装错了接口照样不认设备下面按匹配链一层层拆。2. 拆开驱动包看匹配链VID/PID、MI_ 接口与 .inf 的三段式对应很多人对驱动的理解停在“双击安装下一步下一步”。这套流程在打印机上能用在安卓调试设备上经常翻车原因是安卓设备是复合 USB 设备一根线插上去主机枚举出来的是好几个接口每个接口功能不同需要分别匹配驱动。驱动包干的活就是给每个接口准备一份“身份证对照表”。2.1 三类驱动分别对应设备的哪一面先把概念理清。安卓设备在不同状态下USB 描述符完全不一样正常开机 打开 USB 调试设备暴露 MTP媒体传输 ADB调试桥等多个接口。ADB 接口需要一份 WinUSB 或厂商自定义驱动装对了adb devices才有输出。进 bootloader / fastboot 模式设备重新枚举VID 一般不变PID 变了接口也变成单一 vendor-specific 接口。这时候靠的是另一条 INF 记录装错了fastboot devices就是空白。进紧急下载模式EDL圈内常叫 9008 模式设备变成一个串口/诊断端口走的是 USB 转串口那套驱动模型在设备管理器里表现为 COM 口。这三类驱动在压缩包里通常是分开的 INF或者同一份 INF 里的不同[DeviceList.NTamd64]段落。之所以要打包在一起是因为维修和测试场景经常要在三种状态之间来回切切一次枚举一次缺一份就得重新找驱动。提示判断自己卡在哪一层就看设备管理器里“端口COM 和 LPT”有没有新条目、“通用串行总线设备”里有没有带感叹号的未知项。这两个位置的信息量比任何日志都直接。2.2 解包之后先看文件构成别急着双击 exe拿到压缩包我的习惯是先解包看结构再决定用哪种装法。包里一般有这么几类文件.inf安装信息核心、.cat数字签名目录文件、.sys真正的驱动二进制、.dll协安装器负责 64 位系统的注册动作、以及一个可选的setup.exe一键安装器。# 解包到一个干净目录避免路径里有中文和空格导致 INF 解析异常 Expand-Archive -Path .\android_usb_driver.zip -DestinationPath C:\drv\android -Force # 列出驱动相关的关键文件先看清楚再动手 Get-ChildItem C:\drv\android -Recurse -Include *.inf,*.cat,*.sys,*.dll | Select-Object FullName, Length | Sort-Object FullName这段命令做两件事Expand-Archive的-Force会覆盖同名目录方便反复试验-Include只筛出四类关键文件避免被 readme 和一堆 32 位兼容目录干扰视线。执行完你会看到类似android_usb.inf、android_usb.cat、WinUSBCoInstaller2.dll这样的组合。重点看.cat在不在——它决定了这份 INF 能不能在默认签名策略下被系统接受。参数上有一个容易忽略的点解包路径不要带中文、不要带空格、不要放在C:\Program Files下面。INF 里的CatalogFile是相对路径路径异常时安装会报“找不到指定的文件”但报错信息完全不提路径问题非常误导。2.3 装上驱动和认出设备是两件独立的事这是整篇最该记住的一句。系统要完成一次成功的设备识别至少过三关驱动被系统接受INF 语法合法、.cat签名有效、架构匹配x64 系统装 x64 段落。这一关不过安装阶段就报错。设备被 INF 匹配到设备上报的VID_xxxxPID_xxxx加上接口号MI_0x必须和 INF 里某一条硬件 ID 完全对上。差一个字符都不行而 INF 不会告诉你“差在哪”。接口被正确选中复合设备有多个接口手动安装时如果系统默认勾选了“显示兼容硬件”很可能给你匹配到 MTP 那一份结果设备管理器里一切正常adb devices依然空白。第一关失败的表现是安装报错第二关失败的表现是“未知设备”一直挂着第三关失败最阴险——看起来全装好了就是不工作。三条链路里第三关是新手翻车最集中的地方因为系统给的反馈全是正向的。还有一个隐藏变量枚举顺序。同一台设备插在 USB 3.x 口和 USB 2.0 口上主机拿到的描述符可能不同经过无源 HUB 时供电不足也会导致部分接口枚举失败。所以排查时永远先直连主板后置口这一步能排掉相当一部分“玄学”问题。3. 三种装法对比设备管理器手动指定、pnputil 批装与命令行校验驱动包给了怎么装是下一个问题。市面上的教程基本是三种路子图形界面手动指定、命令行批量注入、以及第三方工具硬替换。三者的适用场景差别很大选错了不是装不上而是装上之后状态不可控。3.1 设备管理器手动指定 INF最稳但有两个必点选项这是我最推荐给首次使用的方式因为每一步的反馈你都能看见。步骤不长但有两处必须刻意操作设备管理器里找到带感叹号的设备右键 → 更新驱动程序 →浏览我的电脑以查找驱动程序→让我从计算机上的可用驱动程序列表中选取。注意不要走“自动搜索”自动搜索会去连系统更新库可能给你装一个版本更旧但签名更“正规”的驱动把刚装好的覆盖掉。点“从磁盘安装”指向解包目录里的.inf文件。取消勾选“显示兼容硬件”。这一勾默认是开的勾着的时候列表里只显示和当前设备硬件 ID 匹配的条目但很多打包驱动用的是通用硬件 ID 或者厂商自定义 ID系统判定“不兼容”就把条目藏了你看到的列表是空的以为驱动包坏了。在列表里挑名字里带ADB、Bootloader、Fastboot的那一条别选MTP或Composite。第 4 步的判断依据是条目名称不是顺序。有些包的 INF 里条目顺序是 MTP 在前照着第一行点下去装完设备管理器干干净净adb devices依旧空白——这就是 2.3 里说的第三关。装完立刻验证不要等下一步再验# 重启 adb 服务避免旧的服务进程缓存了之前的设备状态 adb kill-server adb start-server # -l 会输出设备型号、传输类型和产品名比裸 devices 信息量大 adb devices -ladb kill-server不是可选项。adb 服务是常驻进程端口 5037设备状态在服务启动时就缓存了只插拔线不重启服务有时候列表不会刷新。-l参数会多打印usb:xxx和product:字段能直接看出走的是 USB 还是 TCP 连接。3.2 pnputil 批量注入适合产线和多机部署要给十几台机器装同一套驱动图形界面就是折磨。Windows 自带的pnputil能干这件事而且不需要额外工具# 必须以管理员身份运行 PowerShell否则会报拒绝访问 # /add-driver 把驱动加入驱动仓库/install 同时对已存在的匹配设备执行安装 pnputil /add-driver C:\drv\android\android_usb.inf /install # 确认驱动确实进了仓库输出里会有 oemXX.inf 这样的发布名称 pnputil /enum-drivers | Select-String -Pattern android_usb -Context 0,4/add-driver和/install的区别值得说清楚前者只把 INF 和配套文件复制进系统驱动仓库C:\Windows\INF后者才会对当前已连接的匹配设备触发安装。如果设备还没插上只加不装等插上时系统会自动匹配——这也是产线批量的常用姿势镜像里预注入设备上线即识别。/enum-drivers那条命令的-Context 0,4是为了多看几行上下文输出里能拿到oemXX.inf的发布名称。这个名称在后面卸载时会用到记下来比事后翻目录强。如果手上有devcon.exe驱动开发工具集里的命令行工具还能做到按硬件 ID 精确更新这比按 INF 批量装更保险# 只更新指定硬件 ID 的设备不影响同 INF 下的其他接口 devcon update C:\drv\android\android_usb.inf USB\VID_1A2BPID_2C3DMI_01update子命令的语义是“强制把这份驱动绑到这个设备上”比install更具侵入性好处是不会牵连其他接口。硬件 ID 字符串要写全MI_01这种接口后缀不能省省了会匹配失败但退出码不一定报错属于典型的静默失败。3.3 装完必须验证的三层状态驱动装没装上不能靠“感觉设备管理器变干净了”判断。三层验证逐层往下层级检查手段正常表现异常指向系统层Get-PnpDevice查设备状态Status 为 OKProblem 为空驱动未加载或签名被拒接口层设备管理器查看设备属性 → 详细信息 → 硬件 ID出现MI_0x接口号复合设备未正确枚举工具层adb devices -l/fastboot devices列出序列号驱动装到了错误接口# 按厂商 VID 过滤当前在位设备看 Status 和 Problem 两列 # 把 1A2B 换成你自己的 VID十六进制不区分大小写 Get-PnpDevice -PresentOnly | Where-Object { $_.InstanceId -like *VID_1A2B* } | Select-Object FriendlyName, Status, Problem, InstanceId-PresentOnly很关键不加的话会把历史上所有插过的设备包括早就拔掉的全列出来输出长到没法看。Problem列是十六进制错误码空表示正常10一般是设备无法启动43是设备描述符请求失败多半是线或供电52是签名验证不通过。这三个码的处理路径完全不同别混着试。4. 参数怎么改VID/PID 替换、复合设备接口选择与跨平台边界驱动包里的 INF 是照着某几个型号写的手上设备不在列表里怎么办改 INF 是最直接的路子但改完之后签名会失效这条链上每一步都有代价得算清楚再动手。4.1 改 INF 里的硬件 ID三条规则和一次签名代价INF 里真正决定匹配关系的是这几行结构长这样[Version] Signature$WINDOWS NT$ ClassUSBDevice ClassGuid{88BAE032-5A81-49f0-BC3D-A4FF138216D6} Provider%ProviderName% CatalogFileandroid_usb.cat DriverVer06/12/2024,2.1.0.0 [Manufacturer] %ProviderName%DeviceList,NTamd64 [DeviceList.NTamd64] ; 调试接口必须带 MI_ 接口号否则复合设备匹配不上 %ADB.DeviceDesc%ADB_Install, USB\VID_1A2BPID_2C3DMI_01 ; 下载模式接口单接口设备不带 MI_ %FB.DeviceDesc%FB_Install, USB\VID_1A2BPID_2C3E三条规则第一VID和PID都是四位十六进制必须补满四位VID_1A2B不能写成VID_1A2B0或者省略前导零第二复合设备的接口条目必须带MI_0x不带的话系统只会匹配第一个接口其余接口全部变成未知设备第三[Manufacturer]里的段落名后缀要和系统架构对应x64 系统找NTamd64ARM 设备找NTarm64写错段落等于没写。改完 INF.cat的签名就对不上了——签名覆盖的是文件内容哈希改一个字节就失效。这时候有两种选择一是重新签名需要代码签名证书个人场景基本不现实二是临时进入测试签名模式。后者能用但要在管理员的 PowerShell 里执行bcdedit /set testsigning on再重启且桌面右下角会常驻水印用完记得bcdedit /set testsigning off关掉。这不是可以长期留着不关的状态调试完就恢复。提示改 INF 之前先复制一份原始文件做对照。多数“改了之后装不上”的情况都是改动过程中顺手删了个逗号或者把段落名改了回头用原文件一比就出来了。4.2 复合设备的接口号为什么你只看到 MTP一台开了调试的安卓设备插上去USB 描述符里常见的接口分配是这样的接口号典型功能该装哪类驱动不装的后果MI_00MTP / 文件传输系统自带 MTP 驱动手机能当 U 盘用但与调试无关MI_01ADB 调试桥厂商 USB 驱动 / WinUSBadb devices空白MI_02串口 / 诊断口串口驱动抓不到底层日志MI_03音频 / 其他系统自带一般不影响调试“驱动装了但adb devices没设备”九成是 MI_01 这个接口没绑上驱动。判断方法很直接设备管理器 → 设备属性 → 详细信息 → 硬件 ID看那个未知设备报的是MI_00还是MI_01。如果是MI_01且带感叹号那就是 ADB 接口缺驱动跟 MTP 一点关系都没有。反过来的情况也有有人为了“干净”把 MTP 驱动卸了结果某些工具尤其是需要读设备存储的直接报错。这两个接口是并列的不是替代关系别互相牵连。4.3 跨平台的边界Linux 要写规则macOS 基本免驱同一份驱动包在三个平台上的价值完全不同这点必须说清楚否则容易白折腾# Linux 下不需要 Windows 驱动但要给 USB 设备授权 # 写入 /etc/udev/rules.d/51-android.rules把 1a2b 换成实际 VID小写 SUBSYSTEMusb, ATTR{idVendor}1a2b, MODE0666, GROUPplugdev # 重新加载规则并触发两条命令都要执行 sudo udevadm control --reload-rules sudo udevadm triggerLinux 上的机制是权限而非驱动内核自带 usbfs 支持普通用户默认没有读写 USB 设备的权限adb devices会显示no permissions。MODE0666是给所有用户读写权限团队共享机器上更稳妥的写法是绑GROUPplugdev再把用户加进组。udevadm control --reload-rules只重载规则文件不重新匹配已有设备所以必须跟一条trigger才会对当前插着的设备生效。macOS 上 ADB 和 fastboot 都是免驱的插上就能用装了 Windows 驱动包反而没用武之地。唯一可能需要额外处理的是串口类接口这属于另一套驱动模型。所以拿到这类压缩包先确认自己是哪个平台——三平台通用的期待是不现实的。5. 避坑与排查五条把机器搞到想重装的记录这一章全是我自己或身边人踩过的按发生阶段分两组。每条都按“现象 → 原因 → 解决”写症状对得上就直接跳到对应条目。5.1 识别阶段设备根本认不出来坑一设备管理器里一直挂着“未知 USB 设备设备描述符请求失败”错误代码 43。现象很典型插上就有提示音但设备管理器里那个条目反复刷新属性里显示代码 43。第一反应都是驱动问题实际上这一步系统还没走到加载驱动是在读 USB 描述符阶段就失败了。原因基本集中在物理层和供电劣质数据线只有充电线芯没有数据线芯、USB 3.x 口兼容性问题、无源 HUB 供电不足、接口氧化。代码 43 出现时操作系统拿到的描述符是残缺的它连设备是什么都不知道自然谈不上匹配驱动。解决顺序换一根确认能传数据的线 → 直连主板后置 USB 2.0 口 → 换一台机器验证。三步做完还是 43才考虑设备端硬件问题。千万不要在这个阶段反复装卸驱动纯属浪费时间。坑二INF 装上了设备也“正常”了但硬件 ID 报的是 MI_00。这是最容易被“设备管理器看起来正常”骗过去的一种。设备管理器里没有任何感叹号adb devices却始终空白。原因是手动安装时系统默认勾选了“显示兼容硬件”自动挑了一条匹配MI_00的记录装成了 MTP 驱动。系统认为任务完成了你看到的状态也是正常的唯独调试接口根本没被绑定。这类问题不会自己暴露只能靠主动查硬件 ID。解决右键设备 → 属性 → 详细信息 → 硬件 ID逐条看MI_后面的数字。发现是MI_00就去卸载设备勾选“删除此设备的驱动程序软件”重新走 3.1 的流程取消勾选“显示兼容硬件”手动选带ADB字样、且硬件 ID 里是MI_01的那条。坑三昨天好好的今天插上就不认了。没有任何操作变更设备突然不识别。这种“自己坏掉”的情况八成是 Windows 自动更新在后台把驱动替换成了它认为更合适的通用版本或者把厂商驱动标记成了可选更新。判断依据设备属性里驱动提供程序变成了系统内置的那个驱动日期是最近的。pnputil /enum-drivers里会同时存在两个版本的oemXX.inf一个是你装的一个是系统塞的。解决先从驱动仓库里删掉多余的那份再重新安装。注意pnputil /delete-driver要用oemXX.inf那个发布名不是原始文件名。# 以管理员身份运行/uninstall 会同时卸载正在使用该驱动的设备 pnputil /delete-driver oem42.inf /uninstall /force # 卸载后重新注入避免系统再次自动匹配到旧版本 pnputil /add-driver C:\drv\android\android_usb.inf /install/force用于驱动仍被占用时强制删除代价是可能需要重启才能彻底释放文件句柄。删完最好重启一次再装不然可能出现“文件正在使用中”的假成功。5.2 安装阶段装不上或者装完状态是乱的坑四报错“第三方 INF 不包含数字签名信息”换成测试模式后仍然失败。签名相关的报错分两种一种是.cat缺失或签名无效另一种是 INF 改过之后签名哈希对不上。前者换包或换安装方式后者只能重新签名或进测试签名模式。还有一种更隐蔽的签名本身有效但系统架构不匹配。x64 系统读到的是[DeviceList.NTamd64]段如果那份 INF 只写了NT或NTx86系统找不到对应段落报的错却是签名问题非常误导。解决先确认 INF 里有NTamd64段且条目完整再考虑签名的事。测试签名模式只解决签名问题解决不了段落缺失。改 INF 后一定要把CatalogFile那一行清掉或者同步更新留着旧的.cat引用会让系统去校验一个必然不匹配的哈希。坑五卸载重装几十次越装越乱最后一插上就蓝屏。这台机器被我反复折腾过表现是设备管理器里同一个设备出现了四五个灰色副本插上新设备时会短暂蓝屏重启。问题根源是驱动仓库里堆了多个版本的oemXX.inf加上系统里残留的设备实例互相打架。原因在于“卸载设备”和“删除驱动包”是两件事。大多数教程只教了前者设备删了驱动文件还留在仓库里下次插上系统又匹配到旧版本新旧交替就出问题。解决彻底清理一遍。先列出所有和这个 VID 相关的oemXX.inf逐个删掉然后重启再从干净的包重新注入。整套流程做完大概十五分钟比反复试错快得多。清理之后第一件事是插设备验证硬件 ID确认是MI_01之后再装驱动顺序别反。6. 把验收做成一条命令驱动自检脚本与上线前的三道闸装完驱动只是第一步能不能长期稳定才是问题。我现在的做法是把验收固化成一个脚本每次换机器、换系统版本、批量部署之后都跑一遍比靠肉眼判断可靠得多。# 驱动自检脚本三段检查任一段失败即输出提示 # 把 1A2B 换成实际 VID按需调整接口号 $vid 1A2B $want (MI_00, MI_01) $devs Get-PnpDevice -PresentOnly -Class USB, USBDevice -ErrorAction SilentlyContinue | Where-Object { $_.InstanceId -like *VID_$vid* } if (-not $devs) { Write-Host [FAIL] 未枚举到 VID_$vid 设备先查线材和端口; return } foreach ($d in $devs) { $status if ($d.Problem -eq CM_PROB_NONE -or -not $d.Problem) { OK } else { PROBLEM:$($d.Problem) } $hwids (Get-PnpDeviceProperty -InstanceId $d.InstanceId -KeyName DEVPKEY_Device_HardwareIds).Data $iface ($hwids -match MI_\d{2}) -join , Write-Host ([{0}] {1,-28} 接口: {2} -f $status, $d.FriendlyName, $iface) }脚本的三段逻辑是这样先按 VID 过滤出当前在位设备排除历史残留再逐个读Problem字段判断驱动是否真正加载没有错误码才算通过最后拉硬件 ID 提取MI_接口号确认该出现的接口都在。-Class USB, USBDevice缩小搜索范围比全量扫设备快一个量级。-ErrorAction SilentlyContinue是为了跳过某些不支持属性查询的虚拟设备不加会刷一屏红色报错。配三道闸一起看验收标准就完整了闸口判定命令通过标准常见失败指向驱动闸上面的 PowerShell 脚本全部 OK接口号齐全INF 未匹配或签名被拒枚举闸设备管理器看硬件 ID出现期望的MI_0x复合设备接口缺失工具闸adb devices -l/fastboot devices输出序列号端口占用或服务未重启第三道闸有个隐藏坑adb服务端口 5037 被别的工具占了表现是设备正常但命令一直卡住不返回。这时候netstat -ano | findstr 5037查出占用进程杀掉重来别怀疑驱动。表里这三道闸最好按顺序走。跳过前两道直接跑第三道遇到问题就只能靠猜而驱动问题的排查最忌讳猜。从那以后我每碰一台新机器都是先跑脚本、再看表、最后才插设备刷机宁可多花两分钟走一遍。很多看起来“玄学”的识别失败其实是在第二道闸就已经断了只是没人回头看。希望帮到你。本文还有配套的精品资源点击获取