From mboxrd@z Thu Jan 1 00:00:00 1970 From: Greg KH Date: Wed, 11 Mar 2009 23:37:30 +0000 Subject: Re: USB driver assignment with udev Message-Id: <20090311233730.GA22610@kroah.com> 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 Wed, Mar 11, 2009 at 11:20:53PM +0000, Steve Calfee wrote: > I am trying to understand how a USB driver gets assigned to a device. Have you read the documentation on how this happens in the book, Linux Device Drivers, third edition, which is free online? > It seems that a udev rule does a modprobe for a driver to handle a device. > In most cases the module is already in-kernel and this step does nothing. Not really true, lots of times the module is not present. > The module/driver probe routine is called by the kernel, only if there is a > match in its registered usb_device_id table. If more than one driver > matches, the first one installed gets called first. In 2.6.16, if the probe > "failed" (returned non-zero), no more modules were probed. I think this is > broken, and I am now trying 2.6.28, maybe it does the right thing and > continues looking for a driver that wants a device. > > I have a different situation, but a classic issue is if a user wants to > have ub handle one device and usb-storage handle others. How can this be > done? udev loads the driver, but the driver itself grabs the devices. The > first module loaded will hog all the devices. USBIP will also sooner or > later hit this problem, some devices might need to be local and some placed > remotely. Presumably separate drivers will be needed. See the libusual code for how this is handled. > So right now, a Linux USB driver will in-kernel determine if it wants to > bind to a particular device. This is weakly controlled by userspace by the > order of module registering (usually by order of insmod). But there is no > way for userspace to determine a mapping between devices and drivers. Is > there a udev solution for this? Not really, but I fail to see the problem that you are trying to solve here. What exactly are you trying to do? thanks, greg k-h