温馨提示×

dmesg日志中的USB设备问题怎么办

小樊
44
2025-12-29 15:05:48
栏目: 编程语言

快速定位与通用排查流程

  • 抓取实时日志,聚焦最近插入时的输出:
    • 命令:sudo dmesg -T | tail -n 50(或 dmesg -H --follow | grep -i usb
    • 关注关键字:new high/full-speed USB device using xhci_hcd、驱动加载(如 usb-storage/scsiusbhid)、以及报错(如 I/O errorfailed to mountdevice descriptor read/64, error -110)。
  • 确认是否被系统识别:
    • 命令:lsusb(若能看到 Bus XXX Device XXX: ID xxxx:xxxx Vendor Product,说明物理层基本通)。
  • 查看块设备与分区:
    • 命令:lsblk -fsudo fdisk -l(正常应出现 /dev/sdX,分区如 /dev/sdX1)。
  • 若已识别但不可访问,检查权限与文件系统:
    • 临时:sudo chmod a+rw /dev/sdX;永久:写 udev 规则(见下文)。
    • 手动挂载:sudo mount /dev/sdX1 /mnt/usb;若失败,先 sudo fsck /dev/sdX1 修复文件系统。
  • 驱动与系统层面:
    • 检查模块:lsmod | grep usb;必要时 sudo modprobe usb_storagesudo modprobe usbhid
    • 更新系统/内核并重启:sudo apt update && sudo apt upgradesudo yum update
  • 物理与环境:更换端口(优先主板后置口或 USB 2.0 口)、避免前置口/劣质延长线/集线器带载过多,必要时直连主板测试。

常见错误与对应处理

现象或关键词 可能原因 处理要点
device descriptor read/64, error -71 线缆/接触不良、供电不足、设备固件异常 更换高质量短线、直连主板后置口、减少集线器负载、尝试其他电脑;若仍失败,考虑设备固件或硬件问题
device descriptor read/64, error -110 超时,常见于供电不足或硬件故障 更换端口/线缆、减少外设、使用带电源的USB HUB、排除设备本体问题
device not accepting address X, error -71 设备未响应设置地址(枚举失败) 同 -71 思路:检查线缆/供电/端口,换线换口;若多台主机均失败,多为设备端问题
I/O error 介质/分区损坏、文件系统不一致 备份数据后 sudo fsck /dev/sdX1,再挂载测试
failed to mount 未格式化/分区表损坏/无挂载点 lsblk/fdisk 确认分区;必要时格式化并创建挂载点后挂载
Device not ready 设备未就绪(识别但未初始化完成/介质未准备好) 重新插拔、检查设备状态与线缆、更新驱动/内核、必要时重启系统
Unknown USB Device (Device Descriptor Request Failed)(Windows 侧) 枚举早期失败 更换线缆/端口、检查供电;若仍失败,可能为设备固件/硬件问题或可疑设备,需进一步核验

权限与挂载的实用做法

  • 临时访问设备节点:
    • 示例:sudo chmod a+rw /dev/sdX(替换为实际设备,如 sdb)。
  • 永久按 VID/PID 授权(避免每次改权限):
    • 新建规则:sudo nano /etc/udev/rules.d/99-usb.rules
    • 内容(示例值 0951:1666):
      • ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="0951", ATTR{idProduct}=="1666", MODE="0666"
    • 使生效:sudo systemctl restart udev
  • 手动挂载与修复:
    • 挂载:sudo mount /dev/sdX1 /mnt/usb
    • 修复:sudo fsck /dev/sdX1(修复后再挂载)

驱动加载失败与内核更新的处理

  • 确认模块是否加载:lsmod | grep <module>(如 usb_storage/usbhid)。
  • 手动加载:sudo modprobe <module>
  • 查看系统日志获取上下文:/var/log/syslog/var/log/messages
  • 更新系统与内核以获取新驱动支持:
    • Debian/Ubuntu:sudo apt update && sudo apt upgrade
    • RHEL/CentOS:sudo yum update
  • 若为自编译内核,检查内核配置是否启用相关硬件支持。

仍未解决时的建议

  • 交叉验证:在另一台电脑测试设备,或用其他USB设备测试本机端口,区分是设备端还是主机端问题。
  • 最小化复现:仅保留必要外设,关闭 USB 节能/选择性挂起(如 usbcore.autosuspend=-1 内核参数),排除电源管理干扰。
  • 收集证据以便进一步分析:
    • 保存日志:dmesg > usb_log.txt
    • 提供 lsusb -v 输出与 lsblk -fsudo fdisk -l 的结果摘要。

0