Quote:
Originally Posted by balp
Care to share or give a hint on how you made those rules.
|
I wrote those rules with the help of the udev man pages, udevadm man pages and this page:
Writing udev rules
For example if I
plug a USB to serial converter that appears as /dev/ttyUSB0
$ udevadm info -a -p `udevadm info -q path -n "/dev/ttyUSB0"`
Udevadm info 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.2/usb4/4-1/4-1:1.0/ttyUSB0/tty/ttyUSB0':
KERNEL=="ttyUSB0"
SUBSYSTEM=="tty"
DRIVER==""
looking at parent device '/devices/pci0000:00/0000:00:1d.2/usb4/4-1/4-1:1.0/ttyUSB0':
KERNELS=="ttyUSB0"
SUBSYSTEMS=="usb-serial"
DRIVERS=="mct_u232"
ATTRS{port_number}=="0"
looking at parent device '/devices/pci0000:00/0000:00:1d.2/usb4/4-1/4-1:1.0':
KERNELS=="4-1:1.0"
SUBSYSTEMS=="usb"
DRIVERS=="mct_u232"
ATTRS{bInterfaceNumber}=="00"
ATTRS{bAlternateSetting}==" 0"
ATTRS{bNumEndpoints}=="03"
ATTRS{bInterfaceClass}=="ff"
ATTRS{bInterfaceSubClass}=="ff"
ATTRS{bInterfaceProtocol}=="ff"
ATTRS{supports_autosuspend}=="1"
looking at parent device '/devices/pci0000:00/0000:00:1d.2/usb4/4-1':
KERNELS=="4-1"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{configuration}==""
ATTRS{bNumInterfaces}==" 1"
ATTRS{bConfigurationValue}=="1"
ATTRS{bmAttributes}=="c0"
ATTRS{bMaxPower}=="100mA"
ATTRS{urbnum}=="15"
ATTRS{idVendor}=="0711"
ATTRS{idProduct}=="0230"
ATTRS{bcdDevice}=="0102"
ATTRS{bDeviceClass}=="00"
ATTRS{bDeviceSubClass}=="00"
ATTRS{bDeviceProtocol}=="00"
ATTRS{bNumConfigurations}=="1"
ATTRS{bMaxPacketSize0}=="8"
ATTRS{speed}=="12"
ATTRS{busnum}=="4"
ATTRS{devnum}=="8"
ATTRS{devpath}=="1"
ATTRS{version}==" 1.10"
ATTRS{maxchild}=="0"
ATTRS{quirks}=="0x0"
ATTRS{avoid_reset_quirk}=="0"
ATTRS{authorized}=="1"
ATTRS{manufacturer}=="USB-RS232 Interface Converter"
ATTRS{serial}=="784224"
looking at parent device '/devices/pci0000:00/0000:00:1d.2/usb4':
KERNELS=="usb4"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{configuration}==""
ATTRS{bNumInterfaces}==" 1"
ATTRS{bConfigurationValue}=="1"
ATTRS{bmAttributes}=="e0"
ATTRS{bMaxPower}==" 0mA"
ATTRS{urbnum}=="99"
ATTRS{idVendor}=="1d6b"
ATTRS{idProduct}=="0001"
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{devpath}=="0"
ATTRS{version}==" 1.10"
ATTRS{maxchild}=="2"
ATTRS{quirks}=="0x0"
ATTRS{avoid_reset_quirk}=="0"
ATTRS{authorized}=="1"
ATTRS{manufacturer}=="Linux 2.6.38-10-generic uhci_hcd"
ATTRS{product}=="UHCI Host Controller"
ATTRS{serial}=="0000:00:1d.2"
ATTRS{authorized_default}=="1"
looking at parent device '/devices/pci0000:00/0000:00:1d.2':
KERNELS=="0000:00:1d.2"
SUBSYSTEMS=="pci"
DRIVERS=="uhci_hcd"
ATTRS{vendor}=="0x8086"
ATTRS{device}=="0x27ca"
ATTRS{subsystem_vendor}=="0x1179"
ATTRS{subsystem_device}=="0xff00"
ATTRS{class}=="0x0c0300"
ATTRS{irq}=="18"
ATTRS{local_cpus}=="ff"
ATTRS{local_cpulist}=="0-7"
ATTRS{dma_mask_bits}=="32"
ATTRS{consistent_dma_mask_bits}=="32"
ATTRS{broken_parity_status}=="0"
ATTRS{msi_bus}==""
looking at parent device '/devices/pci0000:00':
KERNELS=="pci0000:00"
SUBSYSTEMS==""
DRIVERS==""
With that information I could write a
rule like this:
SUBSYSTEM=="tty", SUBSYSTEMS=="usb", ATTRS{manufacturer}=="USB-RS232 Interface Converter", ATTRS{serial}=="784224", SYMLINK+="gps"
You save this in a file in /etc/udev/rules.d
Here is my rules file: /etc/udev/rules.d/serial
ports.rules
# Creates a unique link for each serial port
#
# AIS Receiver
SUBSYSTEM=="tty", SUBSYSTEMS=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="A100eeux", SYMLINK+="ais"
#
# GPS
SUBSYSTEM=="tty", SUBSYSTEMS=="usb-serial", DRIVERS=="edgeport_4", ATTRS{port_number}=="0", SYMLINK+="gps"
#
# PTCII
radio modem
SUBSYSTEM=="tty", SUBSYSTEMS=="usb-serial", DRIVERS=="edgeport_4", ATTRS{port_number}=="1", SYMLINK+="ptcii"
#
# NMEA autopilot
SUBSYSTEM=="tty", SUBSYSTEMS=="usb-serial", DRIVERS=="edgeport_4", ATTRS{port_number}=="2", SYMLINK+="nmea"
#
# IC706
radio tranceiver
SUBSYSTEM=="tty", SUBSYSTEMS=="usb-serial", DRIVERS=="edgeport_4", ATTRS{port_number}=="3", SYMLINK+="ic706"
Ok?
Jean-Marie