usb-kernel-debug — Linux kernel dynamic debug for USB
SkillDev toolsHelps your agent diagnose why the Linux kernel mishandles USB devices, like reset storms or descriptor read errors.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the usb-kernel-debug — Linux kernel dynamic debug for USB skill
About this capability
Use when USB enumeration fails or misbehaves and packet/URB capture can't explain WHY the Linux kernel acted — port reset storms, repeated re-enumeration, address errors, xHCI ring/command errors, "device descriptor read error", babble — on whichever end of the link runs Linux: the PC host when test
What this skill tells your AI
The instructions your AI receives, as published by hathach/tinyusb in .claude/skills/usb-kernel-debug/SKILL.md and read by ahel’s review.
Kernel dynamic debug shows the Linux side's reasoning that packet
capture can't: port resets and their causes, enumeration retries, address
(re)assignment, EP halts, xHCI ring/command errors. It applies wherever Linux
sits in the link — the rig PC when it is the host, or a Linux gadget peer
(dwc2/UDC + gadget modules) when TinyUSB is the host. It cannot see inside
the TinyUSB MCU — that is the target-debug skill.
Run this skill's scripts/usb_dyndbg.sh with sudo. It flips the dynamic-debug
print flag for an allowlisted set of USB modules only:
# all examples below abbreviate: sudo .claude/skills/usb-kernel-debug/scripts/usb_dyndbg.sh
sudo usb_dyndbg.sh on usbcore xhci_hcd # enable +p; pick modules from `lsusb -t` Driver=
sudo usb_dyndbg.sh status [module] # list enabled print sites
sudo usb_dyndbg.sh off usbcore xhci_hcd # ALWAYS turn off when done — very noisy
Allowlisted modules: usbcore xhci_hcd xhci_pci xhci_pci_renesas ehci_hcd ehci_pci ohci_hcd ohci_pci uhci_hcd dwc2 dwc3 cdc_acm usb_storage uas libcomposite udc_core (dwc2/dwc3 + the last two cover a Linux gadget
peer's device side).
Workflow
sudo usb_dyndbg.sh on usbcore <hcd-module>—usbcorefor enumeration/hub logic, plus the controller module (lsusb -tshows the driver per bus). On a gadget peer:dwc2(ordwc3) +udc_core+libcompositeinstead — run on the peer itself (its SSH/serial console); the script is self-contained, copy it over or use the rawdynamic_debug/controlwrites from theusbmonskill.- Reproduce (replug / re-enumerate / rerun the failing test) while following
sudo dmesg -w(or grabsudo dmesg | tailafterwards). sudo usb_dyndbg.sh off ...— leaving it on floods the log and skews timing.
On a Linux-PC-host link, pair with the usbmon skill: usbmon for what crossed
the bus, dynamic debug for why the kernel reacted. A gadget peer's UDC has no
usbmon — pair with usb-sniffer on the wire instead. For a wedged device/bus
on the rig PC use the usb-kernel-recover skill.
Requires CONFIG_DYNAMIC_DEBUG and mounted debugfs (standard on distro kernels).
Signals
- GitHub stars
- 7k
- Forks
- 2k
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
usb-kernel-debug- Source
- github.com/hathach/tinyusb