Am Sat, 17 Jan 2009 16:57:29 +0100 schrieb Carsten Meier <[email protected]>:
> Am Fri, 16 Jan 2009 22:30:21 -0600 (CST) > schrieb Mike Isely <[email protected]>: > > > > > Carsten: > > > > I just learned something interesting that you'll want to know. The > > serial number *is* in fact already available in the USB > > configuration data. Thus you can do what Mauro is suggesting to > > identify the device: Use the bus_info field to find the > > udev-populated device node in /sys and then walk that to find the > > serial number. > > > > The reason I had never considered this is because the device's > > serial number is stored in its ROM, encoded in a format that is > > specific to Hauppauge and has nothing to do with USB. The pvrusb2 > > driver reads this by using the tveeprom module to parse the data. > > Since the pvrusb2 driver then never does anything with the result > > except to use it as the root node in its own sysfs interface, I had > > concluded that it wasn't available any other way. > > > > However it is in fact present in the USB configuration data. Just > > run the usbview generic tool and you'll see it. You'll see a field > > labeled "Serial Number:" and its value will be of the form > > "mmmm-xx-yyyyyyyy". The "mmmm" appears to match the model type, but > > the "yyyyyyyy" is an 8 digit hex number that when converted to > > decimal will match the number that the pvrusb2 driver puts in its > > sysfs interface. (The "xx" part appears to just be a pair of > > constant zeroes.) > > > > Why is this? Well I can't prove it, but I can think of two > > possibilities for how the serial number could have found its way > > into the USB configuration data without any help from the pvrusb2 > > driver: > > > > First the USB config data is also in that ROM - this is where the > > manufacturer and device ID are initially coded of course. But > > that's a different part of the ROM, formatted in a manner that the > > FX2 processor's factory ROM initialization can directly read, i.e. > > this part is not specific to Hauppauge. So it's possible that the > > serial number is actually written in two places. > > > > A second possibility is that the FX2 is able to directly > > reinitialize its USB interface as it comes up. It can write its > > own configuration data. So it's theoretically possible that the > > Hauppauge-supplied FX2 firmware is itself accessing the nearby > > Hauppauge ROM, extracting the serial number, and then stuffing it > > in to the USB configuration data. However until now I've never seen > > any actual evidence that the FX2 firmware will directly read that > > ROM (rather, the host driver reads it). > > > > But either way that would explain things. > > > > -Mike > > > > Hi, > > I'm now diving into sysfs and found the info you mentioned in > "/sys/bus/usb/devices/7-2/" for a bus_info-string of "usb 7-2 address > 6" The "address 6" part is found in "/sys/bus/usb/devices/7-2/devnum" > and is the part which causes the trouble with my simple > bus_info-approach because it always changes. Some questions about now > two possible approaches:: > > Approach #1: Direct mapping of card and bus_info to config data (my > original idea): > > - To make the simple bus_info approach work, just the address 6 has to > be removed from the bus_info-string. Is it neccessary to identify the > device in sysfs? (should it really be there?) > > Approach #2: Use bus_info-string to locate device-information in sysfs > and read infos like serial from there: > > - How does the canonical usb-bus_info-string look like which has > been suggested by Mauro on the linux-media-list? > - How to make my app work with PCI-devices? (because I have to look > in "/sys/bus/usb/" for USB-devices) How to distingish USB- and > PCI-devices from v4l2? > > Of course, both approaches could be combined if bus_info would return > something like "USB-7-2" which doesn't change and is suitable for > finding the serial via sysfs. > > Sorry for all those questions. I know you are a > driver-developer, not my personal teacher, but you know about the > problem I have ;) I already read the sysfs-reference at > http://www.kernel.org/pub/linux/kernel/people/mochel/doc/papers/ols-2005/ > but it doesn't contain much information for my case. I just looked at the impl. of usb_make_path() in the kernel-sources. It constructs names with the format-string "usb-%s-%s", which, if used by pvrusb2's bus_info-generator, would solve my problems. bus_info won't change here on reconnect. Could you *please* change the bus_info-generation to use this function? Thanks, Carsten _______________________________________________ pvrusb2 mailing list [email protected] http://www.isely.net/cgi-bin/mailman/listinfo/pvrusb2
