How to obtain sysfs-path from bus_info
A message that is not in the archive (sent off-list or not yet received): 20090115184133.724d1d70@tuvok
A message that is not in the archive (sent off-list or not yet received): [email protected]
A message that is not in the archive (sent off-list or not yet received): 20090122012111.00634e0b@tuvok
A message that is not in the archive (sent off-list or not yet received): [email protected]
Am Thu, 22 Jan 2009 16:57:36 +0100
schrieb Laurent Pinchart <[email protected]>:
Quoted 75 lines · Carsten Meier
Quoted 33 lines
Am Thu, 22 Jan 2009 00:20:00 +0100
schrieb Laurent Pinchart <[email protected]>:
Quoted 30 lines
Hi Carsten,
Quoted 5 lines · Carsten Meier
now I want to translate
bus_infointo a sysfs-path to obtain device-info like serial numbers. Given a device reports "usb-0000:00:1d.2-2" asbus_info, then the device-info is located under "/sys/bus/usb/devices/2-2", which is a symlink to the appropriate/sys/devices/directory, right?I'm afraid not. In the above
bus_infovalue, 0000:00:1d.2 is the PCI bus path of your USB controller, and the last digit after the dash is the USB device path.Quoted 6 lines
All I have to do is to compare the first 4 chars of
bus_infoagainst "usb-", get the chars after "." and append it to "/sys/bus/usb/devices/" to obatin a sysfs-path, right?Is there a more elegant solution or already a function for this? Can the "." appear more than once before the last one?
Probably not before, but definitely after.
Root hubs get a USB device path set to '0'. Every other device is numbered according to the hub port number it is connected to. If you have an external hub connected on port 2 of your root hub, and have a webcam connected to port 3 of the external hub,
usb_make_path()will return "usb-0000:00:1d.2-2.3".Cheers,
Quoted 7 lines
Quoted 1 line
Laurent Pinchart
Hi,
On my machine, my pvrusb2 (connected directly to my mini-pc) shows up under "
/sys/bus/usb/devices/7-2/" which is a symbolic link to "../../../devices/pci0000:00/0000:00:1d.7/usb7/7-2"You're just lucky that USB bus 7 (usb7/7) is connected to the 7th function of your USB host controller (1d.7).
Here's an example of what I get on my computer:
/sys/bus/usb/devices/4-2
-> ../../../devices/pci0000:00/0000:00:1d.2/usb4/4-2Quoted 3 lines
I can't test for the new bus_info-string, because it's not fixed yet in the driver. But if I got it correctly it should be "usb-0000:00:1d.7-7.2" ?
I think you will get usb-0000:00:1d.7-2
Quoted 3 lines
Then I've to simply take the string after the last dash, replace "." by "-" and append it to "
/sys/bus/usb/devices/" for a sysfs-path?Unfortunately the mapping is not that direct. The part before the last dash identifies the USB host controller. The part after the last dash identifies the device path related to the controller, expressed as a combination of port numbers.
The sysfs device path
/sys/bus/usb/devices/7-2/includes a USB bus number (in this case 7) that is not present in usb_make_path()'s output.To find the sysfs path of your USB peripheral, you will have to find out which bus number the bus name (0000:00:1d.7) corresponds to. You might be able to find that by checking each usb[0-9]+ links in
/sys/bus/usb/devicesand comparing the link's target with the bus name.
Quoted 3 lines
Best regards,
Laurent Pinchart
Hi,
I'll scan the link-targets of /sys/bus/usb/devices/usb[0-9] and compare them against the bus name. Now I've the problem of extracting the right path component of the link-target to compare with.
E.g. /sys/bus/usb/devices/usb7 points
to ../../../devices/pci0000:00/0000:00:1d.7/usb7 .
My plan is to check the bus name against the component before last and then extract the bus num from the last component's digit. Now again a question: Does this always work or is there probably another parent directory for usb7 in the global devices-directory?
Thanks again...
Regards,
Carsten
A message that is not in the archive (sent off-list or not yet received): [email protected]
Am Thu, 22 Jan 2009 22:12:08 +0100
schrieb Thierry Merle <[email protected]>:
Quoted 73 lines
Quoted 66 lines · Laurent Pinchart
Quoted 29 lines · Carsten Meier
Am Thu, 22 Jan 2009 00:20:00 +0100
schrieb Laurent Pinchart <[email protected]>:
Quoted 26 lines
Hi Carsten,
Quoted 5 lines · Carsten Meier
now I want to translate
bus_infointo a sysfs-path to obtain device-info like serial numbers. Given a device reports "usb-0000:00:1d.2-2" asbus_info, then the device-info is located under "/sys/bus/usb/devices/2-2", which is a symlink to the appropriate/sys/devices/directory, right?I'm afraid not. In the above
bus_infovalue, 0000:00:1d.2 is the PCI bus path of your USB controller, and the last digit after the dash is the USB device path.Quoted 6 lines
All I have to do is to compare the first 4 chars of
bus_infoagainst "usb-", get the chars after "." and append it to "/sys/bus/usb/devices/" to obatin a sysfs-path, right?Is there a more elegant solution or already a function for this? Can the "." appear more than once before the last one?
Probably not before, but definitely after.
Root hubs get a USB device path set to '0'. Every other device is numbered according to the hub port number it is connected to. If you have an external hub connected on port 2 of your root hub, and have a webcam connected to port 3 of the external hub,
usb_make_path()will return "usb-0000:00:1d.2-2.3".Quoted 8 lines
Quoted 3 lines
Cheers,
Laurent Pinchart
Hi,
On my machine, my pvrusb2 (connected directly to my mini-pc) shows up under "
/sys/bus/usb/devices/7-2/" which is a symbolic link to "../../../devices/pci0000:00/0000:00:1d.7/usb7/7-2"You're just lucky that USB bus 7 (usb7/7) is connected to the 7th function of your USB host controller (1d.7).
Here's an example of what I get on my computer:
/sys/bus/usb/devices/4-2
-> ../../../devices/pci0000:00/0000:00:1d.2/usb4/4-2Quoted 3 lines
I can't test for the new bus_info-string, because it's not fixed yet in the driver. But if I got it correctly it should be "usb-0000:00:1d.7-7.2" ?
I think you will get usb-0000:00:1d.7-2
Quoted 3 lines
Then I've to simply take the string after the last dash, replace "." by "-" and append it to "
/sys/bus/usb/devices/" for a sysfs-path?Unfortunately the mapping is not that direct. The part before the last dash identifies the USB host controller. The part after the last dash identifies the device path related to the controller, expressed as a combination of port numbers.
The sysfs device path
/sys/bus/usb/devices/7-2/includes a USB bus number (in this case 7) that is not present in usb_make_path()'s output.Quoted 6 lines
To find the sysfs path of your USB peripheral, you will have to find out which bus number the bus name (0000:00:1d.7) corresponds to. You might be able to find that by checking each usb[0-9]+ links in
/sys/bus/usb/devicesand comparing the link's target with the bus name.
Quoted 5 lines
To ease this processing, using libsysfs can be a good idea... On my system, the documentation of libsysfs is here:
/usr/doc/sysfsutils-2.1.0/libsysfs.txt
Knowing the bus-id, it won't be hard to look at it in data structures. Just my 2 cents.
Hi,
I already looked at it, but it doesn't help very much if you don't know how sysfs is organized in detail. The sysfs-reference at
http://www.kernel.org/pub/linux/kernel/people/mochel/doc/papers/ols-2005/
also doesn't help very much as it only gives a brief overview.
Regards,
Carsten