Udev USB device class links

Dan Nicholson dbn.lists at gmail.com
Thu Jul 26 10:02:50 PDT 2007

On 7/26/07, Matthew Burgess <matthew at linuxfromscratch.org> wrote:
> On Thu, 26 Jul 2007 09:17:52 -0700, "Dan Nicholson" <dbn.lists at gmail.com> wrote:
> > On 7/26/07, Dan Nicholson <dbn.lists at gmail.com> wrote:
> >> The 2.6.22 kernel (maybe 2.6.21 too, didn't check) has an option
> >> CONFIG_USB_DEVICE_CLASS that's marked as deprecated. The help text
> >> states that it is unnecessary if the following udev rule is used:
> >>
> >> SUBSYSTEM=="usb", ACTION=="add", ENV{DEVTYPE}=="usb_device", \
> >>     NAME="bus/usb/$env{BUSNUM}/$env{DEVNUM}"
> >>
> >> I checked the SuSE rules in udev-111, and this is in addition to the
> >> existing usb_device rule:
> >>
> >> SUBSYSTEM=="usb_device", PROGRAM="/bin/sh -c 'X=%k; X=$${X#usbdev};
> >> B=$${X%%%%.*} D=$${X#*.}; echo bus/usb/$$B/$$D'", NAME="%c"
> >>
> >> Does anyone have a problem if I add that to our rules?
> >
> > Actually, it seems that they're the same rule, but the kernel no
> > longer supplies the usb_device subsystem is removed in 2.6.22. Here's
> > a relevant bug:
> >
> > https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=248916#c10
> >
> > So, the new rule can replace the old one depending on whether
> > CONFIG_USB_DEVICE_CLASS is set. I think both rules should be there so
> > that our rules stay compatible whether this setting is Y or N. Also,
> > leaving the older rule there means you get /dev/bus/usb nodes if you
> > run an older kernel.
> I'm not sure we need both rules.  If CONFIG_USB_DEVICE_CLASS=n, the new rule will take effect.  If CONFIG_USB_DEVICE_CLASS=y, whichever of the NAME= rules is hit first will take effect, if my understanding of Udev rule evaluation is correct.  Therefore, if the new rule is placed above the existing one, the existing one then becomes entirely redundant.

This is where I'm a little unsure. I believe if
CONFIG_USB_DEVICE_CLASS=y, then there won't be anything that matches
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device". In that case, the new
rule would be useless. But I'm not sure about that since I'm not
actually running 2.6.22 (in the process of rebasing my .config).

So, as Bryan said, it depends on whether the environment variables are
still set in the event that CONFIG_USB_DEVICE_CLASS=y. Looking at the
code in drivers/usb/core/devio.c, I think it is. I think all that
happens is that you get the usbdev devices in addition to the normal
routine. OK, I'm pretty sure that the DEVTYPE variable will be filled
regardless of that CONFIG setting.

> I understand that someone running an older kernel would need the old rule, but then we don't officially support running older versions of any of our packages (as it's not in an official, tested release) let alone something as critical as the kernel.

Yeah, I guess I don't really care too much about being backwards
compatible with kernels.


More information about the lfs-dev mailing list