Introduction to Troubleshooting USB Devices with dmesg on Linux

EcyberTekTrooper
4 min readApr 16, 2024

Configuring USB devices on Linux can sometimes be problematic, as I recently discovered when attempting to set up a new USB device on my system. From devices not being recognized to drivers failing to load or erratic device behavior, these challenges can disrupt daily operations and require effective troubleshooting to resolve.

One of the most effective tools for diagnosing and resolving these issues is the dmesg command. This command provides access to the kernel's message buffer, which logs crucial information from the operating system and hardware drivers, especially during the initial device setup phase. Understanding how to leverage dmesg to sift through these logs can be invaluable in pinpointing the underlying causes of USB device issues.

In this guide, we’ll explore how to use dmesg effectively, providing practical insights and examples to help you manage USB device configurations and troubleshoot common problems on Linux systems.

Detailed Example of Using dmesg for USB Device Troubleshooting

Scenario: USB Device Not Functioning Properly

Imagine you’ve connected a new USB hard drive to your Linux system, but the device is not showing up as expected, or you’re experiencing intermittent disconnections. Here’s how you can utilize dmesg to diagnose and possibly pinpoint the issue.

Initial Diagnosis with dmesg

  1. Check the Initial Connection Immediately after connecting the USB device, use dmesg to check the kernel messages related to USB:
dmesg | tail

This command will show you the last few lines of the kernel message buffer, typically including messages about the newly connected device.

[ 8756.123456] usb 2-1: new high-speed USB device number 6 using ehci-pci
[ 8756.256789] usb 2-1: New USB device found, idVendor=1058, idProduct=0748
[ 8756.256794] usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 8756.256796] usb 2-1: Product: My External HDD
[ 8756.256798] usb 2-1: Manufacturer: MyHDDManufacturer
[ 8756.256800] usb 2-1: SerialNumber: 123456789XYZ

Filter for USB-Specific Messages To see only USB-related messages and avoid unrelated log entries, you can filter the output more specifically:

dmesg | grep -i usb

This will include entries for device detection, driver loading, and any potential errors.

Identifying Errors and Warnings

Look for Error Codes If the device is malfunctioning, dmesg might show error messages such as:

[   8760.505404] usb 3-2: device descriptor read/64, error -71

Errors like -71 could indicate issues such as power fluctuations or bad USB ports.

Understanding Common USB Errors

Common USB error codes you might encounter include:

  • -110: Timeout errors, potentially due to cable issues.
  • -71: Power issues, possibly requiring a powered USB hub.

Advanced Filtering and Monitoring

Using dmesg with Advanced Options For ongoing issues, you might want to monitor dmesg in real-time as you connect and disconnect the device:

dmesg -wH

Output Example:

[Today, 14:45:02] usb 2-1: new high-speed USB device number 4 using ehci-pci
[Today, 14:45:02] usb 2-1: New USB device found, idVendor=1058, idProduct=0748, bcdDevice=10.12
[Today, 14:45:02] usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[Today, 14:45:02] usb 2-1: Product: External USB 3.0
[Today, 14:45:02] usb 2-1: Manufacturer: Western Digital
[Today, 14:45:02] usb 2-1: SerialNumber: 575833314537343231313739
[Today, 14:45:03] scsi host6: usb-storage 2-1:1.0

This output would dynamically update as more system events occur. It’s formatted for easier reading, showing the exact times at which each event is logged.

Be cautious with this command, as it clears all existing messages from the buffer.

Practical Troubleshooting Steps

Troubleshooting Common Issues

  • If encountering power issues (error -71), try:
  • Using a different USB port, preferably directly on the motherboard.
  • Employing a powered USB hub to ensure adequate power supply.
  • For timeout errors (error -110):
  • Check and possibly replace the USB cable.
  • Connect the device without using any extension cables or docks.

Documentation and Reporting

Documenting Issues Keep a log of dmesg outputs for persistent issues. You can redirect the output to a file for further analysis or for sharing with technical support:

dmesg | grep -i usb > usb_issues_log.txt

If you later view the contents of usb_issues_log.txt, you might see entries similar to these:

usb 2-1: new high-speed USB device number 4 using ehci-pci
usb 2-1: New USB device found, idVendor=1058, idProduct=0748
usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 2-1: Product: External USB 3.0
usb 2-1: Manufacturer: Western Digital
usb 2-1: SerialNumber: 575833314537343231313739
usbcore: registered new interface driver usb-storage

This file now contains a log of all USB-related kernel messages that were in the dmesgbuffer at the time of the command, useful for further analysis or troubleshooting steps.

Conclusion

By leveraging the dmesg command, you can gain valuable insights into the inner workings of your system’s interaction with USB devices. This tool provides a direct window into the kernel's view of hardware, helping diagnose complex issues that might not be apparent through user-level tools alone. Regular use of dmesg can help you become more familiar at recognizing and resolving hardware-related issues in your Linux environment.

--

--