• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

udev: device und symlink OK, wie Skriptausführung ?

rob40

Member
Hallo,

ich nutze eine "Option N.V Fusion UMTS Quad-GPRS" PCMCIA Card unter SuSE 10.0 für die Einwahl nach Eplus.
Die manuelle Einwahl (mit 'ALT-F2' --> kdesu '. /data/cmd/mtsdeam') klappt.
cat /data/cmd/mtsdeam
Code:
#!/bin/sh
# UMTS Deamon
while true; do

if find /dev/ttyUSB0; then
cd /data/cmd/
./startumts.pl &
exit 0
fi
sleep 5
done
Ich habe das Skript als eigenen Dienst gem.
http://www.linux-club.de/viewtopic.php?t=16069
in den Boot-Ablauf eingehängt. Problem:
(ohne eingeschobene Karte) hängt der Rechner bei jedem runterfahren im Endlos-Loop auf der Suche nach
"/dev/ttyUSB0" -
beim Hochfahren ebenfalls – hier läuft es irgendwann weiter, aber einige nachfolgende Dienste werden nicht gestartet -
und die Einwahl nach Eplus ist nach wie vor nur manuell möglich.

Wie muß ich '/data/cmd/mtsdeam' umstricken, damit's als Dienst im Boot-Ablauf sauber läuft ?
Hat jemand n Tip ?
 

Falkenstein

Hacker
Wie sieht es denn aus wenn eine udev-Rule ein eigenes Device dafür erstellt.

z.B.
Code:
KERNEL=="ttyUSB[0-4]*", SYSFS{idVendor}=="10ab", SYSFS{idProduct}=="10c5", NAME="epluskarte", MODE="666", GROUP="uucp"
erstellt das Device /dev/epluskarte, unabhängig davon, als welches "ttyUSB-Device" die Karte gefunden wird. Du musst nur noch die beiden ID's anpassen.
Dazu gibts dann kleine Scripte zum ein-/aushängen je nach Event.
Diese Scripte hab ich hier irgendwo mal im Forum gesehen.
 
OP
R

rob40

Member
Danke für den guten Tip mit udev. ;)
sieht schon besser aus - aber noch nicht ok.
er setzt nicht /dev/epluscard -
ich bekomme immer "no node name set, will use kernel name 'usbdev6.2'"

Code:
lapt:~ # cat /etc/udev/rules.d/epluscard.rules
KERNEL=="ttyUSB[0-4]*", SYSFS{ID}=="/devices/pci0000:00/0000:00:1e.0/0000:02:04.0/0000:03:00.1/usb6/6-1/6-1:1.0", NAME="epluscard", MODE="666", GROUP="uucp", PROGRAM="/data/cmd/udefUMTS"
Code:
lapt:~ # tail -f /var/log/messages
Apr  4 17:07:41 lapt udevd[2422]: get_key: value='666'
Apr  4 17:07:41 lapt udevd[2422]: get_key: operator=assign
Apr  4 17:07:41 lapt udevd[2422]: get_key: key='GROUP'
Apr  4 17:07:41 lapt udevd[2422]: get_key: value='uucp'
Apr  4 17:07:41 lapt udevd[2422]: add_to_rules: replacing groupname='uucp' by id=14
Apr  4 17:07:41 lapt udevd[2422]: get_key: operator=assign
Apr  4 17:07:41 lapt udevd[2422]: get_key: key='PROGRAM'
Apr  4 17:07:41 lapt udevd[2422]: get_key: value='/data/cmd/udefUMTS'
Apr  4 17:07:41 lapt udevd[2422]: add_to_rules: add 2 padding bytes
Apr  4 17:07:41 lapt udevd[2422]: add_to_rules: adding rule to offset 81680
Code:
Apr  4 17:10:10 lapt udevd-event[9137]: match_key: key SUBSYSTEM value='block'
Apr  4 17:10:10 lapt udevd-event[9137]: match_key: match SUBSYSTEM 'block' <-> 'usb_device'
Apr  4 17:10:10 lapt udevd-event[9137]: match_key: SUBSYSTEM is false
Apr  4 17:10:10 lapt udevd-event[9137]: udev_rules_iter_next: current=81680
Apr  4 17:10:10 lapt udevd-event[9137]: udev_rules_get_name: process rule
Apr  4 17:10:10 lapt udevd-event[9137]: match_key: key KERNEL value='ttyUSB[0-4]*'
Apr  4 17:10:10 lapt udevd-event[9137]: match_key: match KERNEL 'ttyUSB[0-4]*' <-> 'usbdev6.2'
Apr  4 17:10:10 lapt udevd-event[9137]: match_key: KERNEL is false
Apr  4 17:10:10 lapt udevd-event[9137]: udev_rules_iter_next: current=82124
Apr  4 17:10:10 lapt udevd-event[9137]: udev_rules_iter_next: no more rules


Apr  4 17:10:10 lapt udevd-event[9137]: udev_rules_get_name: no node name set, will use kernel name 'usbdev6.2'


Apr  4 17:10:10 lapt udevd-event[9137]: udev_add_device: adding name='usbdev6.2'
Apr  4 17:10:10 lapt udevd-event[9137]: create_node: creating device node '/dev/usbdev6.2'
Apr  4 17:10:10 lapt udevd-event[9137]: udev_make_node: chmod(/dev/usbdev6.2, 020660)
Apr  4 17:10:10 lapt udevd-event[9137]: create_node: symlink '/dev/bus/usb/6/2' to node 'usbdev6.2' requested
Apr  4 17:10:10 lapt udevd-event[9137]: create_path: stat '/dev/bus/usb/6'
Apr  4 17:10:10 lapt udevd-event[9137]: create_node: creating symlink '/dev/bus/usb/6/2' to '../../../usbdev6.2'
Apr  4 17:10:10 lapt udevd-event[9137]: create_path: stat '/dev/.udevdb'
Apr  4 17:10:10 lapt udevd-event[9137]: udev_db_add_device: storing data for device '/class/usb_device/usbdev6.2' in '/dev/.udevdb/class@usb_device@usbdev6.2'
Apr  4 17:10:10 lapt udevd-event[9137]: run_program: '/usr/sbin/hal.hotplug' 'usb_device'
Apr  4 17:10:10 lapt udevd-event[9137]: run_program: '/usr/sbin/hal.hotplug' returned with status 0
Apr  4 17:10:10 lapt udevd-event[9137]: pass_env_to_socket: pass environment to socket '/org/kernel/udev/monitor'
Apr  4 17:10:10 lapt udevd-event[9137]: pass_env_to_socket: passed -1 bytes to socket '/org/kernel/udev/monitor',
Apr  4 17:10:10 lapt udevd-event[9137]: run_program: '/sbin/hotplugeventrecorder' 'usb_device'
Apr  4 17:10:10 lapt udevd-event[9137]: run_program: '/sbin/hotplugeventrecorder' returned with status 0
Apr  4 17:10:10 lapt udevd-event[9137]: udev_event_run: seq 1449 finished
Apr  4 17:10:10 lapt udevd[2422]: udev_done: seq 1449, pid [9137] exit, 2 seconds old
Apr  4 17:10:10 lapt udevd-event[9136]: run_program: '/usr/sbin/hal.hotplug' returned with status 0
Apr  4 17:10:10 lapt udevd-event[9136]: pass_env_to_socket: pass environment to socket '/org/kernel/udev/monitor'
Apr  4 17:10:10 lapt udevd-event[9136]: pass_env_to_socket: passed -1 bytes to socket '/org/kernel/udev/monitor',
Apr  4 17:10:10 lapt udevd-event[9136]: run_program: '/sbin/hotplugeventrecorder' 'tty'
Apr  4 17:10:10 lapt udevd-event[9136]: run_program: '/sbin/hotplugeventrecorder' returned with status 0
Apr  4 17:10:10 lapt udevd-event[9136]: udev_event_run: seq 1439 finished
Apr  4 17:10:10 lapt udevd[2422]: udev_done: seq 1439, pid [9136] exit, 3 seconds old
habe diverse 'epluscard.rules' versucht:
Code:
KERNEL=="ttyUSB[0-4]*", SYSFS{idVendor}=="0x0af0 Option", SYSFS{idProduct}=="0x6300", NAME="epluscard", MODE="666", GROUP="uucp", PROGRAM="/data/cmd/udefUMTS"

SYSFS{ID}=="/devices/pci0000:00/0000:00:1e.0/0000:02:04.0/0000:03:00.1/usb6/6-1/6-1:1.0", NAME="epluscard", MODE="666", GROUP="uucp", PROGRAM="/data/cmd/udefUMTS"

KERNEL=="ttyUSB[0-4]*", SYSFS{ID}=="/devices/pci0000:00/0000:00:1e.0/0000:02:04.0/0000:03:00.1/usb6/6-1/6-1:1.0", NAME="epluscard", MODE="666", GROUP="uucp", PROGRAM="/data/cmd/udefUMTS"

KERNEL=="ttyUSB[0-4]*", SYSFS{ID}=="/devices/pci0000:00/0000:00:1e.0/0000:02:04.0/0000:03:00.1/usb6/6-1/6-1:1.0", NAME="epluscard", MODE="666", GROUP="uucp", PROGRAM="/data/cmd/udefUMTS"

KERNEL=="ttyUSB[0-4]*", SYSFS{idProduct}=="0x6300", SYSFS{ID}=="/devices/pci0000:00/0000:00:1e.0/0000:02:04.0/0000:03:00.1/usb6/6-1/6-1:1.0", NAME="epluscard", MODE="666", GROUP="uucp", PROGRAM="/data/cmd/udefUMTS"

weiß jemand Rat ?
jeder Tip ist sehr willkommen :)
 
OP
R

rob40

Member
bin einen guten Schritt weiter. -
mit
Code:
SUBSYSTEM=="usb_device", ACTION=="add", SYSFS{idVendor}=="0af0", NAME="epluscard", SYMLINK="/dev/ttyUSB0"
werden device und symlink erstellt. ;)

Fehlt (nur) noch die Skriptausführung. Mit:
Code:
SUBSYSTEM=="usb_device", ACTION=="add", SYSFS{idVendor}=="0af0", NAME="ttyUSB0", SYMLINK="epluscard", PROGRAM="/sbin/umts"
oder
Code:
SUBSYSTEM=="usb_device", ACTION=="add", SYSFS{idVendor}=="0af0", NAME="ttyUSB0", SYMLINK="epluscard", RUN+="/sbin/umts"
passiert nix.

kann mir jemand n Tip geben ?
 

Falkenstein

Hacker
Irgendwo hier im Forum gab es Scripte, die bei Ein-/und Aushängeevents laufen.
Das muss mit solch einem Extra-Script passieren.
 
Oben