结局: 为了修好一部 Redmi 3S 和 Pixel 3XL 花费了一天多的时间进行查询资料和维修,Redmi 3S 很快就好了,Pixel 3XL 以失败告终
如果你是搜索
USB 设备无法识别 - 跟这台计算机连接的前一个USB设备工作不正常,Windows 无法识别它。
一问而点进来的话,你可以跳转到后面一篇描述 Microsoft Message Analyzer 的教程,那会教你如何解决这个问题,在使用那个方法前你可以尝试重启一下你的电脑或重新插拔一下你的 USB 设备
Redmi 3S 问题介绍
源于高中搞机时出的问题,作死在 Twrp 的终端输入了 rm -rf /
后变砖,重新刷了 Bootloader 和官方线刷包后恢复,但是 WiFi 和蓝牙都不可用,直到最近想起来这回事(大概有两三年了)然后于是乎就开修了,物理操作栏(我也不记得这玩意叫啥了,就是物理的返回、主页和多任务键)是很久之前就坏了,这次维修计划没有这玩意
- 驱动掉了,蓝牙、WiFi 均无法使用,物理操作栏无法使用
Redmi 3S 维修历程
ADB 和 Google 高通驱动作为 Android 开发者肯定是有的,所以这步忽略,我附上下载链接
USB 的驱动一切正常,接上 ADB 就能连上,只要开了调试就一定能连上,对于后面修 Pixel 来说这简直就是小儿科
驱动掉了的原因是 persist
分区里对硬件的信息没有了,因为 rm -rf /
了自然而然就没了这些信息,解决方案很简单,从官方线刷包里找到 persist.img
然后通过 twrp 或者在 fastboot 模式下连接电脑然后 fastboot flash persist ./persist.img
fastboot flash persist ./persist.img
中,fastboot
代表运行 adb 组件中的 fastboot 程序,flash
代表刷入,persist
代表 persist 分区,./persist.img
代表你提取出来的 persist.img 的文件路径我不是很想用 fastboot (因为线松) 所以用了 twrp,但是呢,twrp 刷不了这个分区,没有这个选项,我去网上找了wzsx150大佬做的分支 twrp 能支持刷写 persist 分区,先把文件用 adb 传进 Download 文件夹,然后重启进入 recovery(twrp) 点 安装
,点右下角按钮 刷入镜像
,找到 persist.img
的路径,点击打开,选择刷入的分区为 persist,然后滑动刷入就好啦~
下面是用到的文件的下载链接
Redmi 3S 进阶尝试
好巧不巧,我在 Pixel Experience 找到了 Redmi 3S/3X 的包,居然支持到了 Android 11!可惜的是 Android 11 和他们的改进版都在初始化的时候卡在 Google 开屏动画了将近一小时,最后放弃还是换了 Mokke(魔趣) 的包,他们也支持到了 Android 9!
而后尝试刷入 OpenGApps 来补全 Google 套件,注意一下选项
选项应该是: ARM64,如果你装了魔趣的 A9 包则是 Android 9,程序包最高只能选到 stock
或 full
,往后装不下,应该是要对 System 分区扩容,我是懒狗没弄
stock / full
OpenGApps 包,这会导致延缓你的手机运行速度,并且耗电量剧增,如果只是要使用常规的 Google 套件请选择 pico
版或根据 OpenGApps 程序包对比 来按需选择你想刷入的程序包,通过 软件/root 安装 Google 套件也可以,但是本人认为不太稳妥并且有些麻烦干脆就选择了刷入 OpenGApps ,这些方法以及是否安装并非必须,自行选择即可
至此 Redmi 3S 的捣鼓就结束了,我估计接下来的 Pixel 3XL 的捣鼓可能会更长
Pixel 3XL 的问题介绍
第一: Type-C 口损坏,几乎只有充电功能,在 C-C (Type-C to Type-C 线,就是两头都是Type-C口) 上能够正常运行文件传输、使用 ADB,无法使用 Type-C 外设:如 Type-C 耳机、U盘等设备,你说它是坏了,它在 C-C 上一切正常,只有 C-A 和 Type-C 设备无法使用,没坏吧,这表现也像坏了似的
其二是蓝牙和 WiFi 模块无法启动,和上面一样,量子态的可用,就是偶尔能开偶尔不能开,有可能是模块虚焊什么的吗,我也不知道,我对 Pixel 3XL 的内部硬件没有任何头绪,也不指望通过软件修复,我只是想尝试刷入 Pixel Experience Plus 来规避一些小问题
其三,内存爆满后持续满载无法正常使用,具体表现卡出屎,哪怕清出空间也依旧如此,所以我准备刷入 Pixel Experience
Pixel 3XL 维修历程
下载 ROM 包,Pixel Experience 链接在上方已给出,就不做超链了
没有 bootloader 的 Pixel 居然有 twrp 支持,应该是替换掉 fastbootb,所以我也弄了一个
已知了 C-A (USB-C to USB-A 线,就是普通USB口接Type-C口) 线无法正常工作,因此拿出了我那台笔记本,上面有一个雷电3还是4口,C-C 连接成功识别 ADB,adb reboot fastboot
进 Fastboot 后 fastboot device
无法识别设备,重启进入bootloader,戳啦!Pixel 没有 Bootloader,是 fastbootb 啦,我都不知道这个 fastbootb 是个什么屌东西,C-C 情况下能够正常识别 fastbootb 模式,可以执行一部分刷入操作不能执行 boot 操作
切换回套着 bootloader皮 的 "fastbootb" 进入 adb sideload 准备在试试侧载 PE(Pixel Experience) ,结果不出意外的 adb sideload failed
了,原因我不知道是什么,在 sideload 过程中貌似是手机主动放弃的,传不上去,不记得报错是什么了,基本找到的解决方案都是让我检查 Type-C 口和线,我换了2根 C-C 线测试,用过 4根 C-A 线(更惨,直接认不出设备),因此我只能放弃 sideload,sideload 官方的包没问题,但是启动后依旧卡的不行,也可能是验证原因,我已经不记得具体细节了,所以只能更换其它方案了
回到 fastboot 我尝试了很多方法去尝试让设备牵手认证,改注册表,用 Microsoft Message Analyzer 分析工具来抓握手去改注册表,甚至为此特地去临载了一个特殊的 Linux 版本来检查问题,这个 Linux 是 XDA 一位大佬自制的专为搞机玩家设计的 Linux 系统,叫 FWUL 我在下面把 XDA 论坛链接贴出来
[LIVE-ISO][FWUL]adb/fastboot without any installation and driver issues [v3.2]
哦,对啦,那么久都还没说到底是为什么不认,我给大伙介绍一下:
USB 设备无法识别 - 跟这台计算机连接的前一个USB设备工作不正常,Windows无法识别它。
设备管理器错误代码是 42 ,这个我也找过了,解决方案尝试过了
看了大家应该会很奇怪这不是电脑的问题吗,或者重启就能解决亦或者驱动什么的,当然这些我都排除了,两台电脑用 C-A 都报错,C-C 只在笔记本上有所以不知道 PC 有没有问题,重启也肯定做过了,驱动也是 Google 的驱动,ADB 和驱动手动引入都试过了,都没有用,太过特殊了,不然我也不会为此写一篇文章
Microsoft Message Analyzer 分析设备
我觉得这是我踩到的最有用和最特殊的东西,虽然用的机会很少,但是非常有用
这是原教程USB Device not recognized - fix
首先安装一个 MMA(Microsoft Message Analyzer),微软官方已经把软件下了,不知道为什么,SB微软
我随便 Google 的一个下载地址 Netzwelt 我还是建议自己去找一下,我也不能确定来源可信
OK,装好后打开 Microsoft Message Analyzer ,按照下面的步骤来监听 USB 口信息
1 点击左上角 New Session
按钮,Start Page 那个大大的 New Session
按钮也可以。
2 在 Add Data Source 中选择 Live Trace
3 然后在 ETW Providers 里按下 Select Scenario
,根据你线连接的USB口来选择是使用 USB2 还是 USB3,如果是 Type-C 或者 USB 口是蓝色的就选择 USB3
4 准备好插入,点击右下角 Start
后立刻插入设备,直到出现 USB 设备无法识别
的报错后,点击上方一个正方型的停止按钮
5 在数据列标题中右键,点击 Add Columns
,上面 Add Columns
的按钮也可以,在右侧出来的 Field Chooser 窗口中搜索 usbdevice
,然后右键 Global properites 的 UsbDevice 选择 Add as Grouping
6 接下来你有两个选择方法来过滤
6.1.1 在上方的过滤器中输入 GetDeviceDescriptor.DeviceDescriptor.bcdUSB > 0x0200
后点击 Apply 按照原教程你应该去选择第一个分组中 Summary 一行是 Get Full Device Descriptor
的结果,但是微软不知道为什么把这玩意翻译了,所以应该是 Summary 一行叫做 设备信息
或 USB 设备信息
的结果,它应该是各个分组中的第一个结果(USB 设备信息不会是第一个)
6.2.1 在上方过滤器输入 Summary = "USB 设备信息" 来过滤掉非USB 设备的信息
6.2.2 依照 6.1.2 和 6.1.3 对所有分组命名符合
VID_0x****&PID_0x****
的分组结果中的 idVendor、idProduct和bcdDevice 数据进行拼接6.2.3 打开注册表: Windows 键 + R 键,输入
regedit
后回车,找到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\usbflags
这个路径(在上方的计算机直接输入跳转就行)6.2.4 对 usbflags 下所有目录名称进行对比,看你在 MMA 中拼接出来的数据这里面有没有,没有的右键 usbflags,点击新建,选择项,命名为你在 MMA 拼接的数据,然后在右侧窗口右键,新建,选择
DWORD (32位)值
,命名为 SkipBOSDescriptorQuery
后双击名称打开,在数值数据中输入 1
后点击确定,全部添加后可以关掉注册表编辑器VID_0x****&PID_0x****
的格式,出错的设备有可能会叫做 VID_0x0000&PID_0x0000
这种大概率没救,但是也可以一试
6.1.2 选中后在下方的 Details 1 窗口找到 Name 一列名字为
Fid_USBPORT_Devices_Descriptor
的分组,将它展开,你能找到 Fid_idVendor
、Fid_idProduct
和 Fid_bcdDevice
三个数据,他们所对应的 Value 列应该是类似 0x04CA
、0x7078
和 0x0007
之类的值,就是以 0x
开头随机数字大写字母为后四位的值6.1.3 将这些值前的0x去掉,然后以 idVender idProduct bcdDevice 的顺序进行拼接
例如我的三个值是
Fid_idVendor
:0x04CA
Fid_idProduct
:0x7078
Fid_bcdDevice
:0x0007
那么它们拼接起来应该是
04CA70780007
6.1.4 打开注册表编辑器: Windows 键 + R 键,输入
regedit
后回车,找到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\usbflags
这个路径(在上方的计算机直接输入跳转就行)6.1.5 在 usbflags 目录右键,点击新建,选择项,命名为你在 MMA 拼接的数据,然后在右侧窗口右键,新建,选择
DWORD (32位)值
,命名为 SkipBOSDescriptorQuery
后双击名称打开,在数值数据中输入 1
后点击确定7 重新连接设备,理论上应该可以工作了
对啦,这个方法很有用,因为它不局限与和 Android 设备连接出问题时使用,或许你和任何 USB 设备出现了这个问题你都可以用这个方法得到解决,当然建议你重启或者重新插拔一下设备可能更有效果
很不幸,我的设备插入后值是0000,完全没用,我只能放弃了,改用 另一个方案 FWUL
关于使用 FWUL 得到的结果
通过 Ventoy 加载了 FWUL 的 ISO,进入系统后用 C-C 连接手机,第一次没有任何反应,重启后使用纯命令行模式,连接后报错usbip: error: attach request for 7-1 failed - device in error state usbipd: error: failed to attach device with busid '7-1'.
和 usb3-1 device descriptor read/64 error -71
也不用说 Google 的方法,全都搜过了,特别是后面的 read/64 error -71
有重点检查,没有
Google后的大部分结果我都看过了,不是和我不符就是和我无关,要不然就是某一软件或设备出问题,属实没办法,只能宣告失败
现在还有一张 usb3-1 device descriptor read/64 error -71
的报错
终于写完了,好久没更新了(其实也就一两个月) 随便写一下