Настройка модема 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
Если чего забыл, или ошибся – пишите, поправим…
