linux-hotplug.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Anthony Wright <anthony@communitymesh.com>
To: linux-hotplug@vger.kernel.org
Subject: The DRIVER rule doesn't seem to work
Date: Sun, 30 Jul 2006 12:58:33 +0000	[thread overview]
Message-ID: <44CCAD5F.9010407@communitymesh.com> (raw)

I have a monolithic 2.6.16 linux kernel with udev-096 - mainly LFS 
6.1.1, with the udev rules take from LFS-6.2-pre2 (LFS = 
www.linuxfromscratch.org). The current udev rules with LFS 6.2-pre2 are 
designed for use with a modular kernel, and get confused when presented 
with a monolithic kernel, creating excessive entries in the 
/dev/.udev/failed directory.

The problem arises from the use of modprobe to determine whether a 
device has a driver. The rules assume that if modprobe fails, the device 
doesn't have a driver and therefore there is an error. However on a 
monolithic if the driver is compiled into the kernel, even if the device 
has a driver, the modprobe will fail and an entry ends up in 
/dev/.udev/failed.

Current rule.....

ACTION="add", ENV{MODALIAS}="?*", RUN+="/sbin/modprobe $env{MODALIAS}"
# <other modprobe rules>

The way to fix would seem to be to explicitly check whether the device 
has a driver and only do the modprobe if it doesn't already have a 
driver. There would seem to be three ways to do this:

1)
ENV{PHYSDEVDRIVER}="?*", GOTO="driver_already_loaded"
ACTION="add", ENV{MODALIAS}="?*", RUN+="/sbin/modprobe $env{MODALIAS}"
# <other modprobe rules>
LABEL="driver_already_loaded"

2)
PROGRAM="/bin/sh -c '[ -e /sys$$DEVPATH/driver -o -e 
/sys$$DEVPATH/device/driver ]'", GOTO="driver_already_loaded"
ACTION="add", ENV{MODALIAS}="?*", RUN+="/sbin/modprobe $env{MODALIAS}"
# <other modprobe rules>
LABEL="driver_already_loaded"

3)
DRIVER="?*", GOTO="driver_already_loaded"
ACTION="add", ENV{MODALIAS}="?*", RUN+="/sbin/modprobe $env{MODALIAS}"
# <other modprobe rules>
LABEL="driver_already_loaded"

Of these (1) I understand uses an obsolete variable that will be removed 
in kernel 2.6.18, (2) is ugly and (3) seems perfect but doesn't work.

(1) and (2) give identical results on my machine, and are the results I 
expect (some of my devices don't have drivers). (3) gives different 
results, returning no driver for devices which I know have drivers, and 
drivers for devices which I know do not have drivers.

What I believe is happening is that DRIVER is looking at the device's 
ancestor's drivers (parent, grandparent etc, but not the device itself), 
and returning their driver if they have one.

For example I have an internal bluetooth card connected to an internal 
usb hub. The usb hub has a driver, the bluetooth card does not. For the 
bluetooth card, DRIVER returns the driver of the usb hub (the hub is the 
bluetooth card's parent). For the usb hub, DRIVER returns nothing 
because the usb hub does not have a parent.

I believe DRIVER should return only the driver of the device, and not 
its ancestors.

I notice that this functionality is mirrored in udevinfo and wondered if 
the current DEVICE functionality is intentional. I can't see what use 
the current functionality is (and I can't find any documentation about 
it). If the current functionality is intentional, would it be possible 
to implement a new rule that implements the functionality I describe?

Thanks,

Tony Wright.


-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys -- and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CIDÞVDEV
_______________________________________________
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

             reply	other threads:[~2006-07-30 12:58 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-07-30 12:58 Anthony Wright [this message]
2006-07-30 14:20 ` The DRIVER rule doesn't seem to work Kay Sievers
2006-08-03  8:40 ` Anthony Wright
2006-08-03  8:44 ` Kay Sievers
2006-08-03  9:45 ` Anthony Wright
2006-08-03 18:12 ` Kay Sievers
2006-08-11 21:59 ` Anthony Wright
2006-08-13  3:23 ` Kay Sievers
2006-08-14  7:29 ` Anthony Wright
2006-08-14 10:59 ` Kay Sievers
2006-08-23  0:05 ` Kay Sievers
2006-08-23  0:16 ` Kay Sievers
2006-08-24 14:34 ` Anthony Wright

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=44CCAD5F.9010407@communitymesh.com \
    --to=anthony@communitymesh.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).