USB调试的错误 device descriptor read/64, error -71 已解决

本文记录了在调试USBHOST过程中遇到-71错误的问题及解决过程。通过分析发现该错误与硬件走线时序有关,最终通过缩短USB端口线路成功解决问题。

今天调试USB HOST ,当插入U盘的时候发现了以下的错误

device descriptor read/64, error -71

源代码中的-71(/include/asm-generic/erro.h)代表的是协议的错误,百思不得其解

晚上睡觉的时候,想到,协议的错误应该就是时序的错误,时序的错误就代表了硬件走线应该是有问题,

把到USB端口的线做的很短,发现问题解决了。

在Linux系统中,`device descriptor read/64, error -71` 是一种常见的USB设备连接错误。该错误通常表示内核无法从设备读取设备描述符,可能是由于硬件兼容性、驱动问题或固件缺失导致的。 ### 错误分析 - **错误码解释** 根据Linux内核定义,错误码 `-71` 对应 `EREMOTEIO`,即“远程I/O错误”,通常用于表示与设备通信失败的情况[^2]。具体到USB子系统,这意味着主机控制器(如EHCI、XHCI)在尝试获取设备描述符时遇到了不可恢复的传输错误- **可能原因** 该错误可能由以下几种情况引发: - USB设备本身存在故障或不兼容 - 主机控制器驱动存在问题或版本过旧 - 内核模块(如 `xhci_hcd` 或 `ehci_hcd`)未能正确加载或出现异常 - 系统电源管理配置不当,导致设备供电不足 - BIOS/UEFI设置中USB支持被禁用或配置错误 ### 解决方法 - **重启系统并更换USB接口** 部分情况下,更换USB端口可以绕过暂时性的硬件握手问题。建议优先尝试将设备插入不同的物理端口,尤其是主板背面的原生USB接口。 - **更新或回滚内核版本** 如果问题是最近才出现的,可能是由于新内核引入了对某些设备的支持缺陷。可以通过升级到最新稳定版或回退到之前的内核版本进行测试。使用如下命令查看当前内核版本并安装其他版本: ```bash uname -r apt install linux-image-x.x.x-x-generic ``` - **禁用USB 3.0或切换主控模式** 某些老旧设备在USB 3.0接口上表现不稳定。可以在BIOS/UEFI中将USB主控器从XHCI切换为EHCI(即降级为USB 2.0模式),或者在启动参数中添加 `usbcore.quirks=0xXXXX:0xXXXX:0xX` 来启用特定设备的规避策略。 - **检查dmesg日志定位问题** 使用 `dmesg` 命令查看完整的USB相关日志,以帮助进一步诊断问题根源: ```bash dmesg | grep -i usb ``` 日志中可能会包含诸如 `device not accepting address` 或 `Device halted` 等提示信息,有助于判断是协议层还是物理层的问题。 - **加载或重新加载USB驱动模块** 可尝试手动卸载并重新加载USB控制器驱动模块: ```bash modprobe -r xhci_hcd modprobe xhci_hcd ``` 若使用的是较老的EHCI控制器,则替换为 `ehci_hcd`。 - **调整udev规则和权限设置** 创建自定义的 `udev` 规则文件,强制设置设备权限或应用特定的quirk标志。例如创建 `/etc/udev/rules.d/99-usb-fix.rules` 文件,内容如下: ```bash SUBSYSTEM=="usb", ATTR{idVendor}=="xxxx", ATTR{idProduct}=="xxxx", MODE="0666", RUN+="/bin/sh -c 'echo 0 > /sys/bus/usb/devices/usb%b/authorized'" ``` ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值