From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Stephen Morgan" Date: Fri, 13 May 2005 16:55:05 +0000 Subject: RE: Need persistent node to USB port naming Message-Id: List-Id: References: In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: linux-hotplug@vger.kernel.org On Fri, 2005-05-03 at 2:50 ocomber wrote: > On Thu, 2005-05-12 at 14:58 -0500, Stephen Morgan wrote: > > Hello all, > > > > I'm converting a driver for a USB device from Linux 2.4 to 2.6. > The device > > is embedded and the host is an embedded PC. There may be as many as 6 > > identical devices attached. The only way they are > differentiated is by the > > USB port they're plugged into - the cabling is fixed. So, when the user > > asks for 'foo_dev0' for instance, he wants the first USB device > - 'foo_dev1' > > should give him the 2nd device, etc. > > > > Under 2.4, I created six nodes, assigning them minors 192 thru > 197. In the > > driver's probe(), I used usb_make_path to create an index to the device. > > For file ops, I used (MINOR(inode_p->i_rdev) - 192) to get an > index from the > > node. > > > > So far, under 2.6, the best approach I can see is to create a > udev .rules > > file to make the nodes, like so: BUS="usb", PLACE="1-1", > NAME="usb/foo_dev0" > > > > Is this the best way to go, or have I overlooked something simpler? > > > > Thanks > > > > Stephen Morgan > > If your driver is aware of which usb port it is plugged into, it could > turn this into a sysfs attribute which can be picked up by udev: > > BUS="usb", KERNEL="foo", NAME="%k", SYMLINK="%s{USBPORT}" > > It may be that the USB port already exists as a sysfs attribute without > you having to explicitly code this - I can't check this at the mo. It does - it's called PLACE :-) (or, more recently, ID) and it works - I just want to make sure this is the best way to get the nodes I need. One problem I've run into is trying to create a dummy node that allows me to communicate with the driver thru ioctl's even when no device is plugged in. In 2.4, I just created a node with a minor I knew would never be used, and in the driver, I filtered for that minor. Do I to use udev? It's obviously working, but can I turn it off and make nodes the way I did in 2.4? If so, how would I turn it off? What kinds of havoc would that wreak in 2.6? > > You can find what sysfs attributes exist for your devices with something > like: > udevinfo -a -p /class/usb/(DEVICE) > > Hope this helps :0) > > -Oli ------------------------------------------------------- This SF.Net email is sponsored by Oracle Space Sweepstakes Want to be the first software developer in space? Enter now for the Oracle Space Sweepstakes! http://ads.osdn.com/?ad_ids93&alloc_id281&op=click _______________________________________________ Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net Linux-hotplug-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel