/ Forside / Teknologi / Operativsystemer / Linux / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Linux
#NavnPoint
o.v.n. 11177
peque 7911
dk 4814
e.c 2359
Uranus 1334
emesen 1334
stone47 1307
linuxrules 1214
Octon 1100
10  BjarneD 875
udev og et serielt usb-modem
Fra : Jan Birk


Dato : 11-01-10 13:57

Vil gerne have til at attache devicen ensartet hvergang og vil (gerne)
bruge udev til formålet. Det kniber dog Ubuntu 9.10 at forstå mine
hensigter

I /etc/udev/rules.d/98-usb-modems.rules ;
------------------
SUBSYSTEM=="usb", ATTRS{serial}=="F0015358", ATTRS{product}=="Falcom
SAMBA", SYMLINK+="Falcom_0"
---------------

Her troede jeg så, at hver gang jeg satte usb-modem'et i, ville det
komme til at hedde /dev/Falcom_0... Sådan er det desværre ikke.

Info til at udfylde ATTRS mm, kommer fra:

# udevadm info -a -p $(udevadm info -q path -n /dev/ttyUSB0)

Som giver dette - noget lange - output hvor jeg er stærkt i tvivl om
hvilken indgang (parant device)jeg skal bruge.

Nogen gode råd

(Har reloaded udev med: "service udev reload")

Pft

/Jan

------------------------

root@kpc:/etc/udev/rules.d# 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.1/usb7/7-1/7-1:1.0/ttyUSB0/tty/ttyUSB0':
KERNEL=="ttyUSB0"
SUBSYSTEM=="tty"
DRIVER==""

looking at parent device
'/devices/pci0000:00/0000:00:1d.1/usb7/7-1/7-1:1.0/ttyUSB0':
KERNELS=="ttyUSB0"
SUBSYSTEMS=="usb-serial"
DRIVERS=="ftdi_sio"
ATTRS{port_number}=="0"

looking at parent device
'/devices/pci0000:00/0000:00:1d.1/usb7/7-1/7-1:1.0':
KERNELS=="7-1:1.0"
SUBSYSTEMS=="usb"
DRIVERS=="ftdi_sio"
ATTRS{bInterfaceNumber}=="00"
ATTRS{bAlternateSetting}==" 0"
ATTRS{bNumEndpoints}=="02"
ATTRS{bInterfaceClass}=="ff"
ATTRS{bInterfaceSubClass}=="ff"
ATTRS{bInterfaceProtocol}=="ff"
ATTRS{modalias}=="usb:v0F94p0005d0200dc00dsc00dp00icFFiscFFipFF"
ATTRS{supports_autosuspend}=="0"
ATTRS{interface}=="Falcom SAMBA"

looking at parent device '/devices/pci0000:00/0000:00:1d.1/usb7/7-1':
KERNELS=="7-1"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{configuration}==""
ATTRS{bNumInterfaces}==" 1"
ATTRS{bConfigurationValue}=="1"
ATTRS{bmAttributes}=="a0"
ATTRS{bMaxPower}=="498mA"
ATTRS{urbnum}=="591"
ATTRS{idVendor}=="0f94"
ATTRS{idProduct}=="0005"
ATTRS{bcdDevice}=="0200"
ATTRS{bDeviceClass}=="00"
ATTRS{bDeviceSubClass}=="00"
ATTRS{bDeviceProtocol}=="00"
ATTRS{bNumConfigurations}=="1"
ATTRS{bMaxPacketSize0}=="8"
ATTRS{speed}=="12"
ATTRS{busnum}=="7"
ATTRS{devnum}=="5"
ATTRS{version}==" 1.10"
ATTRS{maxchild}=="0"
ATTRS{quirks}=="0x0"
ATTRS{authorized}=="1"
ATTRS{manufacturer}=="FALCOM"
ATTRS{product}=="Falcom SAMBA"
ATTRS{serial}=="F0015358"

looking at parent device '/devices/pci0000:00/0000:00:1d.1/usb7':
KERNELS=="usb7"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{configuration}==""
ATTRS{bNumInterfaces}==" 1"
ATTRS{bConfigurationValue}=="1"
ATTRS{bmAttributes}=="e0"
ATTRS{bMaxPower}==" 0mA"
ATTRS{urbnum}=="101"
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}=="7"
ATTRS{devnum}=="1"
ATTRS{version}==" 1.10"
ATTRS{maxchild}=="2"
ATTRS{quirks}=="0x0"
ATTRS{authorized}=="1"
ATTRS{manufacturer}=="Linux 2.6.31-17-generic uhci_hcd"
ATTRS{product}=="UHCI Host Controller"
ATTRS{serial}=="0000:00:1d.1"
ATTRS{authorized_default}=="1"

looking at parent device '/devices/pci0000:00/0000:00:1d.1':
KERNELS=="0000:00:1d.1"
SUBSYSTEMS=="pci"
DRIVERS=="uhci_hcd"
ATTRS{vendor}=="0x8086"
ATTRS{device}=="0x2935"
ATTRS{subsystem_vendor}=="0x1043"
ATTRS{subsystem_device}=="0x8277"
ATTRS{class}=="0x0c0300"
ATTRS{irq}=="19"
ATTRS{local_cpus}=="ff"
ATTRS{local_cpulist}=="0-7"

ATTRS{modalias}=="pci:v00008086d00002935sv00001043sd00008277bc0Csc03i00"
ATTRS{enable}=="1"
ATTRS{broken_parity_status}=="0"
ATTRS{msi_bus}==""

looking at parent device '/devices/pci0000:00':
KERNELS=="pci0000:00"
SUBSYSTEMS==""
DRIVERS==""

 
 
Jørgen Thomsen (21-02-2010)
Kommentar
Fra : Jørgen Thomsen


Dato : 21-02-10 18:33

Jan har nok fundet ud af sit problem nu, men jeg vil lige komme med et par ting, jeg har fundet ud af.
I hans regel er der den åbenlyse fejl, at der skrives SUBSYSTEM i st f SUBSYSTEMS.

Faste navne på serielle porte:
Man kan ikke teste på attributter fra forskellige parent devices, men det løses på denne måde ved at overføre værdien til en
environment variabel og anvende den i en senere regel. Her ved en USB til seriel converter med flere porte, hvor portene får værdien
/dev/ttyP0, /dev/ttyP1 osv uafhængig af den tildelte /dev/ttyUSBx værdi

udevadm info --query all --attribute-walk --name=/dev/ttyUSB0

SUBSYSTEMS=="usb-serial", ENV{ID_PORT}="$attr{port_number}"

KERNEL=="ttyUSB*", ATTRS{product}=="ATEN USB Controller", ATTRS{serial}=="ATE32021", SYMLINK+="ttyP$env{ID_PORT}"
alternativt
KERNEL=="ttyUSB*", ENV{ID_PORT}=="0", ATTRS{serial}=="ATE32021", SYMLINK+="ttyP0"
osv

looking at device '/devices/pci0000:00/0000:00:13.2/usb2/2-6/2-6:1.0/ttyUSB0/tty/ttyUSB0':
KERNEL=="ttyUSB0"
SUBSYSTEM=="tty"
DRIVER==""

looking at parent device '/devices/pci0000:00/0000:00:13.2/usb2/2-6/2-6:1.0/ttyUSB0':
KERNELS=="ttyUSB0"
SUBSYSTEMS=="usb-serial"
ATTRS{port_number}=="0"

looking at parent device '/devices/pci0000:00/0000:00:13.2/usb2/2-6':
....
ATTRS{product}=="ATEN USB Controller "
ATTRS{serial}=="ATE42046"


- Jørgen


On Mon, 11 Jan 2010 13:57:23 +0100, Jan Birk <jan.birk@invalid.domain.null> wrote:

>I /etc/udev/rules.d/98-usb-modems.rules ;
>------------------
>SUBSYSTEM=="usb", ATTRS{serial}=="F0015358", ATTRS{product}=="Falcom
>SAMBA", SYMLINK+="Falcom_0"
>---------------

>
> looking at device
>'/devices/pci0000:00/0000:00:1d.1/usb7/7-1/7-1:1.0/ttyUSB0/tty/ttyUSB0':
> KERNEL=="ttyUSB0"
> SUBSYSTEM=="tty"
> DRIVER==""
>
> looking at parent device
>'/devices/pci0000:00/0000:00:1d.1/usb7/7-1/7-1:1.0/ttyUSB0':
> KERNELS=="ttyUSB0"
> SUBSYSTEMS=="usb-serial"
> DRIVERS=="ftdi_sio"
> ATTRS{port_number}=="0"
>
> looking at parent device
>'/devices/pci0000:00/0000:00:1d.1/usb7/7-1/7-1:1.0':
> KERNELS=="7-1:1.0"
> SUBSYSTEMS=="usb"
> DRIVERS=="ftdi_sio"
> ATTRS{bInterfaceNumber}=="00"
> ATTRS{bAlternateSetting}==" 0"
> ATTRS{bNumEndpoints}=="02"
> ATTRS{bInterfaceClass}=="ff"
> ATTRS{bInterfaceSubClass}=="ff"
> ATTRS{bInterfaceProtocol}=="ff"
> ATTRS{modalias}=="usb:v0F94p0005d0200dc00dsc00dp00icFFiscFFipFF"
> ATTRS{supports_autosuspend}=="0"
> ATTRS{interface}=="Falcom SAMBA"
>
> looking at parent device '/devices/pci0000:00/0000:00:1d.1/usb7/7-1':
> KERNELS=="7-1"
> SUBSYSTEMS=="usb"
> DRIVERS=="usb"
> ATTRS{configuration}==""
> ATTRS{bNumInterfaces}==" 1"
> ATTRS{bConfigurationValue}=="1"
> ATTRS{bmAttributes}=="a0"
> ATTRS{bMaxPower}=="498mA"
> ATTRS{urbnum}=="591"
> ATTRS{idVendor}=="0f94"
> ATTRS{idProduct}=="0005"
> ATTRS{bcdDevice}=="0200"
> ATTRS{bDeviceClass}=="00"
> ATTRS{bDeviceSubClass}=="00"
> ATTRS{bDeviceProtocol}=="00"
> ATTRS{bNumConfigurations}=="1"
> ATTRS{bMaxPacketSize0}=="8"
> ATTRS{speed}=="12"
> ATTRS{busnum}=="7"
> ATTRS{devnum}=="5"
> ATTRS{version}==" 1.10"
> ATTRS{maxchild}=="0"
> ATTRS{quirks}=="0x0"
> ATTRS{authorized}=="1"
> ATTRS{manufacturer}=="FALCOM"
> ATTRS{product}=="Falcom SAMBA"
> ATTRS{serial}=="F0015358"

Jan Birk (21-02-2010)
Kommentar
Fra : Jan Birk


Dato : 21-02-10 21:50

> Jan har nok fundet ud af sit problem nu, men jeg vil lige komme med et par ting, jeg har fundet ud af.
> I hans regel er der den åbenlyse fejl, at der skrives SUBSYSTEM i st f SUBSYSTEMS.

Den havde jeg rigtigt nok fundet, men ikke resten af dine gode guldkorn.
Tak for update.

/Jan

Jørgen Thomsen (22-02-2010)
Kommentar
Fra : Jørgen Thomsen


Dato : 22-02-10 16:00

Til gavn for andre, der bikser med udev regler, så er der her et eksempel på brug af PROGRAM og environment variable, som ikke
fremgår af
udevadm info --attribute-walk --name=/dev/sdd
men af
udevadm info --query=property --name=/dev/sdd

Eksemplet laver systematiske navne på flere samtidige usbnøgler, uden at man skal bekymre sig om serienumre osv. Jeg bruger dem til
backup, og et script løber så mulige navne igennem og finder den rigtige at bruge ud fra indholdet på disse keys (tester for
bestemte filnavne).

Det, der gør det lidt tricky er, at systemet laver enten /dev/sde eller /dev/sde1 devices osv afhængig af formatet på usbnøglen.
Nedenstående laver links til disse med navnene /dev/usbkey4, /dev/usbkey5 osv.

KERNEL=="sd*", SUBSYSTEMS=="usb", ENV{ID_FS_USAGE}=="filesystem", PROGRAM="/usr/bin/perl -e 'print ord(substr(%k,2,1))-96;'",
SYMLINK+="usbkey%c"

Som en øvelse for den intelligente læser kan ovenstående udvides til at tage højde for usbnøgler med flere partitioner.

Man skal huske at lægge sine egne regler sidst i /etc/udev/rules.d
Det voldte mig en del problemer at finde ud af, hvorfor test på ENV{ID_FS_USAGE} ikke lykkedes.
Den var endnu ikke defineret, da mine regler blev kørt, fordi de lå i en fil med et navn tidligt i den alfabetiske rækkefølge.

Ovenstående bruges sammen med automount/autofs med regler i /etc/auto.media som

usbkey4 -fstype=vfat,rw :/dev/usbkey4
usbkey5 -fstype=vfat,rw :/dev/usbkey5

så man i et shell-script let kan gøre fx dette

ls /media/usbkey4 >/dev/null 2>&1
if [[ ($? == 0) ]]; then

.....

fi


- Jørgen

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste