Настройка модема Flyer U12 в Ubuntu 10.04 (часть 2)

Обрывы связи наземного канала начали доставать. Код ошибки в /var/log/syslog
option: option_instat_callback: error -108
А после лишения gnome-ppp, я перестал визуально контролировать наземку.
Сначала хотел оформить данную заметку в виде комментария к Настройка спутникового интернета в Ubuntu 10.04 (Sky-Fi+OpenVPN+Tevii S660 DVB-S2+GPRS) или Установка модема Flyer U12, но решил, что проблема, заслуживает отдельной темы.

Итак, имеем обрыв связи по наземному каналу:


usb 2-1: USB disconnect, address 12
option: option_instat_callback: error -108
option1 ttyUSB0: GSM modem (1-port) converter now disconnected from ttyUSB0
option 2-1:1.0: device disconnected
option1 ttyUSB1: GSM modem (1-port) converter now disconnected from ttyUSB1
option 2-1:1.1: device disconnected
option1 ttyUSB2: GSM modem (1-port) converter now disconnected from ttyUSB2
option 2-1:1.2: device disconnected
usb 2-1: new high speed USB device using ehci_hcd and address 13
usb 2-1: configuration #1 chosen from 1 choice
scsi11 : SCSI emulation for USB Mass Storage devices

usb 2-1: configuration #1 chosen from 1 choice
option 2-1:1.0: GSM modem (1-port) converter detected
usb 2-1: GSM modem (1-port) converter now attached to ttyUSB0
option 2-1:1.1: GSM modem (1-port) converter detected
usb 2-1: GSM modem (1-port) converter now attached to ttyUSB1
option 2-1:1.2: GSM modem (1-port) converter detected
usb 2-1: GSM modem (1-port) converter now attached to ttyUSB3
scsi12 : SCSI emulation for USB Mass Storage devices

Видно, что после обрыва связи (отключения модема) устройство /dev/ttyUSB2 чудесным образом преобразовалось в /dev/ttyUSB3, а pppd, wvdial и прочие звонилки, привязаны к ttyUSB2… а это значит, что в итоге мы получим:

usb 2-1: GSM modem (1-port) converter now attached to ttyUSB3
Script /etc/ppp/ip-down finished (pid 2773), status = 0×0
Failed to open /dev/ttyUSB2: No such file or directory
Failed to open /dev/ttyUSB2: No such file or directory

Exit.

и никакой persist нам не поможет!
Была мысля написать некую программу или скрипт, который мог бы софтверно перезагружать USB-модем, но, проведя в поиске большую часть светового дня, эту затею я отбросил. Так как после обрыва связи (отключения модема), вновь соданное устройство (/dev/ttyUSB3) оказалось работоспособным, если прописать его в /etc/ppp/peers/provider, возникла идея – создавать симлинки на ttyUSBx… Пошел ковырять udev.
В ответ на команду:
udevadm info -a -p $(udevadm info --query=path --name=/dev/ttyUSB0)
получаем список атрибутов устройства:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  looking at device '/devices/pci0000:00/0000:00:1d.7/usb2/2-1/2-1:1.0/ttyUSB0/tty/ttyUSB0':
    KERNEL=="ttyUSB0"
    SUBSYSTEM=="tty"
    DRIVER==""
 
  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb2/2-1/2-1:1.0/ttyUSB0':
    KERNELS=="ttyUSB0"
    SUBSYSTEMS=="usb-serial"
    DRIVERS=="option1"
    ATTRS{port_number}=="0"
 
  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb2/2-1/2-1:1.0':
    KERNELS=="2-1:1.0"
    SUBSYSTEMS=="usb"
    DRIVERS=="option"
    ATTRS{bInterfaceNumber}=="00"
    ATTRS{bAlternateSetting}==" 0"
...

Нас интерисует строка номер 13, у вас там, скорее всего, будет другое значение. Запоминаем/записываем его, и напишем новые правила для udev:
gedit /etc/udev/rules.d/65-flyer_U12.rules

1
2
3
KERNEL=="ttyUSB[0-9]*", KERNELS=="2-1:1.0", SYMLINK+="flyer0", MODE="0666"
KERNEL=="ttyUSB[0-9]*", KERNELS=="2-1:1.1", SYMLINK+="flyer1", MODE="0666"
KERNEL=="ttyUSB[0-9]*", KERNELS=="2-1:1.2", SYMLINK+="flyer2", MODE="0666"

Значение для KERNELS поставьте своё, ранее запомненное/записанное.
Теперь, при втыкании (отключении/включении) устройства, помимо создания /dev/ttyUSB0-2, будут создаваться символические ссылки на них, с именами /dev/flyer0, /dev/flyer1 и /dev/flyer2
Редактируем gedit /etc/ppp/peers/provider (или конфиг своей звонилки, например, gedit /etc/wvdial.conf) и меняем /dev/ttyUSB2 на /dev/flyer2
По ходу ковыряния udev, выявился еще один «косяк»:


udevd[412]: SYSFS{}= will be removed in a future udev version, please use ATTR{}= to match the event device, or ATTRS{}= to match a parent device, in /etc/udev/rules.d/usb_modeswitch.rules:17
udevd[412]: SYSFS{}= will be removed in a future udev version, please use ATTR{}= to match the event device, or ATTRS{}= to match a parent device, in /etc/udev/rules.d/usb_modeswitch.rules:67

я его (/etc/udev/rules.d/usb_modeswitch.rules) просто удалил (но сначала скопировал в безопасное место, на всякий случай :) )…
udev restart
Теперь по команде ls -l /dev/flyer* увидим:

lrwxrwxrwx 1 root root 7 2010-07-15 07:37 /dev/flyer0 -> ttyUSB0
lrwxrwxrwx 1 root root 7 2010-07-15 07:37 /dev/flyer1 -> ttyUSB1
lrwxrwxrwx 1 root root 7 2010-07-15 07:37 /dev/flyer2 -> ttyUSB2

а вто так – через некоторое время работы:

lrwxrwxrwx 1 root root 7 2010-07-15 11:32 /dev/flyer0 -> ttyUSB2
lrwxrwxrwx 1 root root 7 2010-07-15 11:32 /dev/flyer1 -> ttyUSB1
lrwxrwxrwx 1 root root 7 2010-07-15 11:32 /dev/flyer2 -> ttyUSB0

Если чего забыл, или ошибся – пишите, поправим…

Похожие посты:

Оставить комментарий

Ваш комментарий