From: Steve Calfee <nospamcalfee@yahoo.com>
To: linux-hotplug@vger.kernel.org
Subject: USB driver assignment with udev
Date: Wed, 11 Mar 2009 23:20:53 +0000 [thread overview]
Message-ID: <loom.20090311T231825-449@post.gmane.org> (raw)
I am trying to understand how a USB driver gets assigned to a device.
Overview:
I have heard that the Apple OSX usb system does a probe and the probe
routine returns a "score", which is its rating of how close a match a
driver is to a device. This then lets the probing system decide which
driver is the best match and after all probing starts the binding of a
driver to a device.
Windows seems to assume that there is usually a specific driver for each
device, so it looks for a match in its registry for device allocation. It
only has storage and hid as class drivers which get devices if no special
driver is defined.
Linux assumes the opposite from windows, that there is a generic driver for
most devices. The first driver that matches a device grabs it.
Question:
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.
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.
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?
Regards, Steve
next reply other threads:[~2009-03-11 23:20 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-03-11 23:20 Steve Calfee [this message]
2009-03-11 23:37 ` USB driver assignment with udev Greg KH
2009-03-12 0:32 ` Steve Calfee
2009-03-12 0:35 ` Kay Sievers
2009-03-12 2:01 ` Greg KH
2009-03-12 10:21 ` Scott James Remnant
2009-03-12 23:01 ` Steve Calfee
2009-03-12 23:59 ` Kay Sievers
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=loom.20090311T231825-449@post.gmane.org \
--to=nospamcalfee@yahoo.com \
--cc=linux-hotplug@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).