From: Alan S. <st...@ro...> - 2012-10-28 20:53:15
|
On Sun, 28 Oct 2012, sdaau wrote: > > Another thing worth trying is to check the system log for the time when > > the scope was plugged in. Problems parsing the descriptors are likely > > to show up there. > > > > Thanks Alan; I'm not really sure as to which system log to check - earlier in Ubuntu it was /var/log/messages and /var/log/syslog; in 11.04 there is only /var/log/syslog; so here is the output I got from /var/log/syslog when connecting the device: > > $ tail -f /var/log/syslog > ... > Oct 28 17:50:16 mypc kernel: [64596.368132] usb 2-2: new full speed USB device using uhci_hcd and address 11 > Oct 28 17:50:17 mypc kernel: [64596.536139] usb 2-2: config 1 has an invalid descriptor of length 24, skipping remainder of the config > > ^C > > These are the only two lines generated during hotplugging - and indeed, there is a problem with the descriptor parsing... > > > > You may also try if this works (replace "2-1" with the current value): > > hexdump -C /sys/bus/usb/devices/2-1/descriptors > > > > Thanks Tormod; wasn't sure what I should replace "2-1" with; lsusb gives me "Bus 002 Device 011: ID f4ec:ee38" - I tried "2-11" but there is "No such file or directory". Then I try: > > $ ls /sys/bus/usb/devices/ | grep 2- > 2-0:1.0 > 2-2 > 2-2:1.0 > > ... and I can see this "2-2" is the same as the "usb 2-2" in the kernel log, so I'm trying that: > > $ hexdump -C /sys/bus/usb/devices/2-2/descriptors > 00000000 12 01 10 01 00 00 00 40 ec f4 38 ee 00 01 01 02 |.......@..8.....| > 00000010 00 01 09 02 31 00 01 01 00 c0 01 09 04 00 00 04 |....1...........| > 00000020 dc a1 b5 00 07 05 84 02 40 00 00 07 05 03 02 40 |........@......@| > 00000030 00 00 07 05 86 02 40 00 00 07 05 05 02 40 00 00 |......@......@..| > 00000040 Alas, the descriptors file doesn't always include _all_ the data sent by the device. If the kernel sees an invalid descriptor it will truncate the data in the file. (An invalid descriptor is one that is less than 2 bytes long or that claims to be longer than the remaining amount of data.) In this case there was no warning about the config descriptor being too short, so the device really did send 49 bytes. The descriptor shown above is only 46 bytes (the first 18 bytes in the file are the device descriptor and the remaining 46 are the config descriptor), so most likely the unknown last 3 bytes contained a header with bLength set to 24, as indicated by the warning in the system log. It could be that the 24 is wrong, or it could be that the 49 is wrong (perhaps it ought to be 46 or perhaps it ought to be 46 + 24 = 70), or maybe both are wrong. There's no way to tell from the information given here. Alan Stern |