Trouble getting udev rule to fire, works in udevtest

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I'm trying to write a rule that detects the unplugging of a particular
USB device and unloads the kernel module when that happens.  The
reason is that the module appears to be buggy in that if the device is
reconnected without first unloading the module, the module hangs and
the device is not activated.  At this point even forcibly unloading
the module makes no difference.

The device is a MultiTech GSM modem.   The udevinfo used to build the
rule is pasted below.  Here is the rule I've created (and installed in
/etc/udev/rules.d/85-mts_gsm_3410_remove.rules):

SUBSYSTEMS=="usb", ACTION=="remove", ATTRS{idVendor}=="06e0",
ATTRS{idProduct}=="f111", RUN+="modprobe -r ti_usb_3410_5052"

For testing purposes, I changed the modprobe to "echo hello from
ti_usb_remove >> /tmp/udev.works"

udevtest seems to indicate that the rule works:

# udevtest --action=remove
/devices/pci0000:00/0000:00:1d.3/usb4/4-1/4-1:2.0/ttyUSB0 | grep -v
^parse_file
[:snipped udevtest explanation:]
import_uevent_var: import into environment: 'DRIVER=ti_usb_3410_5052_1'
udevtest: looking at device
'/devices/pci0000:00/0000:00:1d.3/usb4/4-1/4-1:2.0/ttyUSB0' from
subsystem 'usb-serial'
udevtest: run: '/bin/sh -c 'echo 2 >
/sys/devices/pci0000:00/0000:00:1d.3/usb4/4-1/4-1:2.0/ttyUSB0/device/bConfigurationValue''
udevtest: run: 'echo hello from ti_usb_remove >> /tmp/udev.works'
udevtest: run: 'socket:/org/kernel/udev/monitor'

However if I actually unplug the device, /tmp/udev.works doesn't show
up.   On the off chance that my kernel doesn't support inotify, I also
tried running "udevcontrol reload_rules".  Still failed.  The output
of udevmonitor, captured while unplugging the device, is pasted below.
 For giggles, I also tried running a "logger hello" command instead of
the echo.  Does not appear to run.

Any idea what I'm doing wrong?

Thanks!

-Ben

kernel version: 2.6.24-24
udev version: 117-8


#################
### udevmonitor
#################
UEVENT[1247880336.509326] remove
/devices/pci0000:00/0000:00:1d.3/usb4/4-1/4-1:2.0/usb_endpoint/usbdev4.31_ep81
(usb_endpoint)
UEVENT[1247880336.509376] remove
/devices/pci0000:00/0000:00:1d.3/usb4/4-1/4-1:2.0/usb_endpoint/usbdev4.31_ep01
(usb_endpoint)
UEVENT[1247880336.509387] remove
/devices/pci0000:00/0000:00:1d.3/usb4/4-1/4-1:2.0/usb_endpoint/usbdev4.31_ep83
(usb_endpoint)
UEVENT[1247880336.509397] remove
/devices/pci0000:00/0000:00:1d.3/usb4/4-1/4-1:2.0/ttyUSB0/tty/ttyUSB0
(tty)
UEVENT[1247880336.509405] remove
/devices/pci0000:00/0000:00:1d.3/usb4/4-1/4-1:2.0/ttyUSB0 (usb-serial)
UEVENT[1247880336.509413] remove
/devices/pci0000:00/0000:00:1d.3/usb4/4-1/4-1:2.0 (usb)
UEVENT[1247880336.509420] remove
/devices/pci0000:00/0000:00:1d.3/usb4/4-1/usb_endpoint/usbdev4.31_ep00
(usb_endpoint)
UEVENT[1247880336.509427] remove
/devices/pci0000:00/0000:00:1d.3/usb4/4-1 (usb)
UDEV  [1247880336.513110] remove
/devices/pci0000:00/0000:00:1d.3/usb4/4-1/4-1:2.0/usb_endpoint/usbdev4.31_ep81
(usb_endpoint)
UDEV  [1247880336.517862] remove
/devices/pci0000:00/0000:00:1d.3/usb4/4-1/4-1:2.0/usb_endpoint/usbdev4.31_ep01
(usb_endpoint)
UDEV  [1247880336.520061] remove
/devices/pci0000:00/0000:00:1d.3/usb4/4-1/4-1:2.0/usb_endpoint/usbdev4.31_ep83
(usb_endpoint)
UDEV  [1247880336.521405] remove
/devices/pci0000:00/0000:00:1d.3/usb4/4-1/4-1:2.0/ttyUSB0/tty/ttyUSB0
(tty)
UDEV  [1247880336.527260] remove
/devices/pci0000:00/0000:00:1d.3/usb4/4-1/4-1:2.0/ttyUSB0 (usb-serial)
UDEV  [1247880336.531013] remove
/devices/pci0000:00/0000:00:1d.3/usb4/4-1/usb_endpoint/usbdev4.31_ep00
(usb_endpoint)
UDEV  [1247880336.532150] remove
/devices/pci0000:00/0000:00:1d.3/usb4/4-1/4-1:2.0 (usb)
UDEV  [1247880336.535154] remove
/devices/pci0000:00/0000:00:1d.3/usb4/4-1 (usb)

#################
# udevinfo
#################
# udevinfo -a -p /devices/pci0000:00/0000:00:1d.3/usb4/4-1/4-1:2.0/ttyUSB0

Udevinfo starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

  looking at device '/devices/pci0000:00/0000:00:1d.3/usb4/4-1/4-1:2.0/ttyUSB0':
    KERNEL=="ttyUSB0"
    SUBSYSTEM=="usb-serial"
    DRIVER=="ti_usb_3410_5052_1"
    ATTR{port_number}=="0"

  looking at parent device '/devices/pci0000:00/0000:00:1d.3/usb4/4-1/4-1:2.0':
    KERNELS=="4-1:2.0"
    SUBSYSTEMS=="usb"
    DRIVERS=="ti_usb_3410_5052"
    ATTRS{bInterfaceNumber}=="00"
    ATTRS{bAlternateSetting}==" 0"
    ATTRS{bNumEndpoints}=="03"
    ATTRS{bInterfaceClass}=="ff"
    ATTRS{bInterfaceSubClass}=="00"
    ATTRS{bInterfaceProtocol}=="00"
    ATTRS{modalias}=="usb:v06E0pF111d0101dcFFdsc00dp00icFFisc00ip00"

  looking at parent device '/devices/pci0000:00/0000:00:1d.3/usb4/4-1':
    KERNELS=="4-1"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{dev}=="189:414"
    ATTRS{configuration}==""
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bConfigurationValue}=="2"
    ATTRS{bmAttributes}=="a0"
    ATTRS{bMaxPower}=="500mA"
    ATTRS{urbnum}=="13"
    ATTRS{idVendor}=="06e0"
    ATTRS{idProduct}=="f111"
    ATTRS{bcdDevice}=="0101"
    ATTRS{bDeviceClass}=="ff"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{bNumConfigurations}=="2"
    ATTRS{bMaxPacketSize0}=="8"
    ATTRS{speed}=="12"
    ATTRS{busnum}=="4"
    ATTRS{devnum}=="31"
    ATTRS{version}==" 1.10"
    ATTRS{maxchild}=="0"
    ATTRS{quirks}=="0x0"
    ATTRS{authorized}=="1"
    ATTRS{manufacturer}=="Texas Instruments"
    ATTRS{product}=="TUSB3410 Serial Port"

  looking at parent device '/devices/pci0000:00/0000:00:1d.3/usb4':
    KERNELS=="usb4"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{dev}=="189:384"
    ATTRS{configuration}==""
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bmAttributes}=="e0"
    ATTRS{bMaxPower}=="  0mA"
    ATTRS{urbnum}=="668"
    ATTRS{idVendor}=="0000"
    ATTRS{idProduct}=="0000"
    ATTRS{bcdDevice}=="0206"
    ATTRS{bDeviceClass}=="09"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{speed}=="12"
    ATTRS{busnum}=="4"
    ATTRS{devnum}=="1"
    ATTRS{version}==" 1.10"
    ATTRS{maxchild}=="2"
    ATTRS{quirks}=="0x0"
    ATTRS{authorized}=="1"
    ATTRS{manufacturer}=="Linux 2.6.24-24-server uhci_hcd"
    ATTRS{product}=="UHCI Host Controller"
    ATTRS{serial}=="0000:00:1d.3"
    ATTRS{authorized_default}=="1"

  looking at parent device '/devices/pci0000:00/0000:00:1d.3':
    KERNELS=="0000:00:1d.3"
    SUBSYSTEMS=="pci"
    DRIVERS=="uhci_hcd"
    ATTRS{vendor}=="0x8086"
    ATTRS{device}=="0x27cb"
    ATTRS{subsystem_vendor}=="0x103c"
    ATTRS{subsystem_device}=="0x31fe"
    ATTRS{class}=="0x0c0300"
    ATTRS{irq}=="21"
    ATTRS{local_cpus}=="00000000,00000000"
    ATTRS{modalias}=="pci:v00008086d000027CBsv0000103Csd000031FEbc0Csc03i00"
    ATTRS{numa_node}=="-1"
    ATTRS{enable}=="1"
    ATTRS{broken_parity_status}=="0"
    ATTRS{msi_bus}==""

  looking at parent device '/devices/pci0000:00':
    KERNELS=="pci0000:00"
    SUBSYSTEMS==""
    DRIVERS==""
--
To unsubscribe from this list: send the line "unsubscribe linux-hotplug" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel]     [Linux DVB]     [Asterisk Internet PBX]     [DCCP]     [Netdev]     [X.org]     [Util Linux NG]     [Fedora Women]     [ALSA Devel]     [Linux USB]

  Powered by Linux