LINUX.ORG.RU

Смена порта USB модема

 


1

2

Добрый день!

Есть программа gammu-smsd, которая через USB модем отправляет смс.

В настройках программы устанавливаешь, что использовать порт /dev/ttyUSB0. Программа работает и всё нормально. Через какое то время ( компьютер не перегружается никогда и ничего нового не подключается нового), программа сообщает, что по данному порту нет устройства.

Меняешь порт на /dev/ttyUSB1 и всё снова нормально. И так надо периодически туда и сюда менять.

Как решить проблему?

Команда ls /dev/ttyUSB* всегда отдаёт два порта. Это нормально?

ls /dev/ttyUSB*
/dev/ttyUSB0  /dev/ttyUSB1


udevadm info -a -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.7/usb1/1-1/1-1:1.0/ttyUSB0/tty/ttyUSB0':
    KERNEL=="ttyUSB0"
    SUBSYSTEM=="tty"
    DRIVER==""

  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb1/1-1/1-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/usb1/1-1/1-1:1.0':
    KERNELS=="1-1:1.0"
    SUBSYSTEMS=="usb"
    DRIVERS=="option"
    ATTRS{authorized}=="1"
    ATTRS{bAlternateSetting}==" 0"
    ATTRS{bInterfaceClass}=="ff"
    ATTRS{bInterfaceNumber}=="00"
    ATTRS{bInterfaceProtocol}=="ff"
    ATTRS{bInterfaceSubClass}=="ff"
    ATTRS{bNumEndpoints}=="03"
    ATTRS{supports_autosuspend}=="1"

  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb1/1-1':
    KERNELS=="1-1"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{authorized}=="1"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bDeviceClass}=="00"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{bMaxPower}=="500mA"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bNumInterfaces}==" 4"
    ATTRS{bcdDevice}=="0000"
    ATTRS{bmAttributes}=="e0"
    ATTRS{busnum}=="1"
    ATTRS{configuration}=="Qualcomm Configuration"
    ATTRS{devnum}=="6"
    ATTRS{devpath}=="1"
    ATTRS{idProduct}=="1003"
    ATTRS{idVendor}=="12d1"
    ATTRS{ltm_capable}=="no"
    ATTRS{manufacturer}=="HUAWEI Technology"
    ATTRS{maxchild}=="0"
    ATTRS{product}=="HUAWEI Mobile"
    ATTRS{quirks}=="0x0"
    ATTRS{removable}=="unknown"
    ATTRS{speed}=="480"
    ATTRS{urbnum}=="90397"
    ATTRS{version}==" 2.00"

  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb1':
    KERNELS=="usb1"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{authorized}=="1"
    ATTRS{authorized_default}=="1"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bDeviceClass}=="09"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{bMaxPower}=="0mA"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bcdDevice}=="0415"
    ATTRS{bmAttributes}=="e0"
    ATTRS{busnum}=="1"
    ATTRS{configuration}==""
    ATTRS{devnum}=="1"
    ATTRS{devpath}=="0"
    ATTRS{idProduct}=="0002"
    ATTRS{idVendor}=="1d6b"
    ATTRS{interface_authorized_default}=="1"
    ATTRS{ltm_capable}=="no"
    ATTRS{manufacturer}=="Linux 4.15.0-64-generic ehci_hcd"
    ATTRS{maxchild}=="8"
    ATTRS{product}=="EHCI Host Controller"
    ATTRS{quirks}=="0x0"
    ATTRS{removable}=="unknown"
    ATTRS{serial}=="0000:00:1d.7"
    ATTRS{speed}=="480"
    ATTRS{urbnum}=="118"
    ATTRS{version}==" 2.00"

  looking at parent device '/devices/pci0000:00/0000:00:1d.7':
    KERNELS=="0000:00:1d.7"
    SUBSYSTEMS=="pci"
    DRIVERS=="ehci-pci"
    ATTRS{broken_parity_status}=="0"
    ATTRS{class}=="0x0c0320"
    ATTRS{companion}==""
    ATTRS{consistent_dma_mask_bits}=="32"
    ATTRS{d3cold_allowed}=="1"
    ATTRS{device}=="0x265c"
    ATTRS{dma_mask_bits}=="32"
    ATTRS{driver_override}=="(null)"
    ATTRS{enable}=="1"
    ATTRS{irq}=="23"
    ATTRS{local_cpulist}=="0"
    ATTRS{local_cpus}=="1"
    ATTRS{msi_bus}=="1"
    ATTRS{revision}=="0x03"
    ATTRS{subsystem_device}=="0x099c"
    ATTRS{subsystem_vendor}=="0x103c"
    ATTRS{uframe_periodic_max}=="100"
    ATTRS{vendor}=="0x8086"

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

srv:/home/shtrih# udevadm info -a -n /dev/ttyUSB1

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.7/usb1/1-1/1-1:1.1/ttyUSB1/tty/ttyUSB1':
    KERNEL=="ttyUSB1"
    SUBSYSTEM=="tty"
    DRIVER==""

  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb1/1-1/1-1:1.1/ttyUSB1':
    KERNELS=="ttyUSB1"
    SUBSYSTEMS=="usb-serial"
    DRIVERS=="option1"
    ATTRS{port_number}=="0"

  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb1/1-1/1-1:1.1':
    KERNELS=="1-1:1.1"
    SUBSYSTEMS=="usb"
    DRIVERS=="option"
    ATTRS{authorized}=="1"
    ATTRS{bAlternateSetting}==" 0"
    ATTRS{bInterfaceClass}=="ff"
    ATTRS{bInterfaceNumber}=="01"
    ATTRS{bInterfaceProtocol}=="ff"
    ATTRS{bInterfaceSubClass}=="ff"
    ATTRS{bNumEndpoints}=="02"
    ATTRS{supports_autosuspend}=="1"

  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb1/1-1':
    KERNELS=="1-1"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{authorized}=="1"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bDeviceClass}=="00"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{bMaxPower}=="500mA"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bNumInterfaces}==" 4"
    ATTRS{bcdDevice}=="0000"
    ATTRS{bmAttributes}=="e0"
    ATTRS{busnum}=="1"
    ATTRS{configuration}=="Qualcomm Configuration"
    ATTRS{devnum}=="6"
    ATTRS{devpath}=="1"
    ATTRS{idProduct}=="1003"
    ATTRS{idVendor}=="12d1"
    ATTRS{ltm_capable}=="no"
    ATTRS{manufacturer}=="HUAWEI Technology"
    ATTRS{maxchild}=="0"
    ATTRS{product}=="HUAWEI Mobile"
    ATTRS{quirks}=="0x0"
    ATTRS{removable}=="unknown"
    ATTRS{speed}=="480"
    ATTRS{urbnum}=="90409"
    ATTRS{version}==" 2.00"

  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb1':
    KERNELS=="usb1"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{authorized}=="1"
    ATTRS{authorized_default}=="1"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bDeviceClass}=="09"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{bMaxPower}=="0mA"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bcdDevice}=="0415"
    ATTRS{bmAttributes}=="e0"
    ATTRS{busnum}=="1"
    ATTRS{configuration}==""
    ATTRS{devnum}=="1"
    ATTRS{devpath}=="0"
    ATTRS{idProduct}=="0002"
    ATTRS{idVendor}=="1d6b"
    ATTRS{interface_authorized_default}=="1"
    ATTRS{ltm_capable}=="no"
    ATTRS{manufacturer}=="Linux 4.15.0-64-generic ehci_hcd"
    ATTRS{maxchild}=="8"
    ATTRS{product}=="EHCI Host Controller"
    ATTRS{quirks}=="0x0"
    ATTRS{removable}=="unknown"
    ATTRS{serial}=="0000:00:1d.7"
    ATTRS{speed}=="480"
    ATTRS{urbnum}=="118"
    ATTRS{version}==" 2.00"

  looking at parent device '/devices/pci0000:00/0000:00:1d.7':
    KERNELS=="0000:00:1d.7"
    SUBSYSTEMS=="pci"
    DRIVERS=="ehci-pci"
    ATTRS{broken_parity_status}=="0"
    ATTRS{class}=="0x0c0320"
    ATTRS{companion}==""
    ATTRS{consistent_dma_mask_bits}=="32"
    ATTRS{d3cold_allowed}=="1"
    ATTRS{device}=="0x265c"
    ATTRS{dma_mask_bits}=="32"
    ATTRS{driver_override}=="(null)"
    ATTRS{enable}=="1"
    ATTRS{irq}=="23"
    ATTRS{local_cpulist}=="0"
    ATTRS{local_cpus}=="1"
    ATTRS{msi_bus}=="1"
    ATTRS{revision}=="0x03"
    ATTRS{subsystem_device}=="0x099c"
    ATTRS{subsystem_vendor}=="0x103c"
    ATTRS{uframe_periodic_max}=="100"
    ATTRS{vendor}=="0x8086"

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



 lsusb
Bus 001 Device 006: ID 12d1:1003 Huawei Technologies Co., Ltd. E220 HSDPA Modem / E230/E270/E870 HSDPA/HSUPA Modem
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub




Последнее исправление: shtrih (всего исправлений: 1)

что-то наподобие KERNEL=="ttyUSB*", ATTRS{idVendor}=="yourVID", ATTRS{idProduct}=="yourPID",SYMLINK+="megasymlink"

и используй /dev/megasymlink в своём гамму…

естественно, данный пример не предназначен для количества модемов более одного. но можно доработать.

aol ★★★★★
()
Последнее исправление: aol (всего исправлений: 1)

Команда ls /dev/ttyUSB* всегда отдаёт два порта.

Смотри ls -l /dev/ttyUSB* — может что-то и всплывёт...

Через какое то время ( компьютер не перегружается никогда и ничего нового не подключается нового), программа сообщает, что по данному порту нет устройства.

Смотреть dmesg и компанию. Просто так устройства не исчезают и не появляются. Должны быть какие-то события к этому приводящие.

anymouze ★★
()
Ответ на: комментарий от anymouze
 
ls -l /dev/ttyUSB*
crw-rw---- 1 root dialout 188, 0 окт  4 16:45 /dev/ttyUSB0
crw-rw---- 1 root dialout 188, 1 окт  4 16:45 /dev/ttyUSB1

Вроде бы ничего такого нет

shtrih
() автор топика
Ответ на: комментарий от aol
Database structures version: 17, SMSD current version: 17
Fri 2019/10/04 16:51:45 gammu-smsd[4623]: Connected to Database native_mysql: shtrihs_avito on shtrihs.beget.tech
Fri 2019/10/04 16:51:45 gammu-smsd[4623]: Created POSIX RW shared memory at 0xb7f54000
Fri 2019/10/04 16:51:45 gammu-smsd[4623]: Starting phone communication...
Fri 2019/10/04 16:51:45 gammu-smsd[4623]: gammu: [Gammu            - 1.39.0]
Fri 2019/10/04 16:51:45 gammu-smsd[4623]: gammu: [Connection       - "at9600"]
Fri 2019/10/04 16:51:45 gammu-smsd[4623]: gammu: [Connection index - 0]
Fri 2019/10/04 16:51:45 gammu-smsd[4623]: gammu: [Model type       - ""]
Fri 2019/10/04 16:51:45 gammu-smsd[4623]: gammu: [Device           - "/dev/megasymlink"]
Fri 2019/10/04 16:51:45 gammu-smsd[4623]: gammu: [Running on       - Linux, kernel 4.15.0-64-generic (#73-Ubuntu SMP Thu Sep 12 13:15:53 UTC 2019)]
Fri 2019/10/04 16:51:45 gammu-smsd[4623]: gammu: [System error     - tcgetattr in serial_open, 25, "Неприменимый к данному устройству ioctl"]
Fri 2019/10/04 16:51:45 gammu-smsd[4623]: gammu: Init:GSM_TryGetModel failed with error DEVICEOPENERROR[2]: Ошибка подключения к устройству: неизвестно, занято или нет доступа.
Fri 2019/10/04 16:51:45 gammu-smsd[4623]: Can't open device: Ошибка подключения к устройству: неизвестно, занято или нет доступа. (DEVICEOPENERROR[2])
Fri 2019/10/04 16:51:45 gammu-smsd[4623]: Stopping Gammu smsd: Нет ошибки. (NONE[1])


# cat /dev/megasymlink
KERNEL=="ttyUSB*", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1003", SYMLINK+="megasymlink"

Что то не работает

shtrih
() автор топика
Ответ на: комментарий от shtrih

Да, сейчас выглядит вполне нормально. Вот «что» там в момент «замены» портов это вопрос. Посмотреть в dmesg и/или journalctl надо бы. Модем явно переопределяется и порты меняются местами (вот это необычно, сам такое не наблюдал; разве что, уже были в системе /dev/ttyUSB0../dev/ttyUSBn).

Я у себя иногда наблюдаю такие «глюки»: программа работает с модемом через /dev/ttyUSB0 и тут происходит нечто (иногда я модем задевал, иногда он по каким-то другим причинам переопределялся). Порты переопределяются, при этом /dev/ttyUSB0 не символьный файл, а обычный файл. Но это только один из вариантов развития ситуации.

Перегреваться модем не может?

===

По симлинку: попробуй задать что-то более ожидаемое. Например ttyUSB10 или ttyUSB2.

anymouze ★★
()
Последнее исправление: anymouze (всего исправлений: 1)
Ответ на: комментарий от shtrih

Что то не работает

Вы это

KERNEL=="ttyUSB*", ATTRS{idVendor}=="yourVID", ATTRS{idProduct}=="yourPID",SYMLINK+="megasymlink"

куда вписали?

anonymous
()
Ответ на: комментарий от anymouze

вот что то по симлинку не получается. Я пример выше сделал и не работает. Может подскажите поточнее как сделать

shtrih
() автор топика
Ответ на: комментарий от anonymous
# cat /dev/megasymlink
KERNEL=="ttyUSB*", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1003", SYMLINK+="megasymlink"


____________________________________________
# cat /etc/gammu-smsd

# Configuration file for Gammu SMS Daemon

# Gammu library configuration, see gammurc(5)
[gammu]
# Please configure this!
#port = /dev/ttyUSB0
port = /dev/megasymlink
connection = at9600
PIN=0000
# Debugging
logformat = textalldate
# SMSD configuration, see gammu-smsdrc(5)
[smsd]
PIN=0000
service = MYSQL
logfile = /var/log/gammu-smsd
# Increase for debugging information
debuglevel = 255

# Paths where messages are stored
inboxpath = /var/spool/gammu/inbox/
outboxpath = /var/spool/gammu/outbox/
sentsmspath = /var/spool/gammu/sent/
errorsmspath = /var/spool/gammu/error/

shtrih
() автор топика

Через какое то время ( компьютер не перегружается никогда и ничего нового не подключается нового), программа сообщает, что по данному порту нет устройства.

Это нормально. То есть не нормально конечно, но так бывает. USB-устройство дёргается и уползает на другое имя. С usb-serial такое тоже встречается, например. Зависит, видимо, от качества материнки: у меня этих usb-serial практически одинаковых достаточно, в некоторых компьютерах не дёргаются, а в некоторых прыгают. Можно usb-модули выгрузить/загрузить, но вариант с симлинком в итоге удобнее, главное признак найти, по которому устройство в правилах udev матчить.

AS ★★★★★
()
Ответ на: комментарий от shtrih
# cat /dev/megasymlink
KERNEL=="ttyUSB*", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1003", SYMLINK+="megasymlink"


mv /dev/megasymlink /etc/udev/rules.d/99-megasymlink.rules

И, кажется, ещё ACTION==«add» в правило добавить стоит.

AS ★★★★★
()
Последнее исправление: AS (всего исправлений: 1)
Ответ на: комментарий от AS

Развращаете мОлодежь. Надо читать документацию до полного просветления.

anonymous
()
Ответ на: комментарий от anymouze

Если сравнить две информации по двум портам, то сами устройства идентичны, поэтому ATTRS{idVendor}, ATTRS{idProduct} у них совпадают, как и все другие значения, кроме ATTRS{urbnum}. Но он меняется при каждой перезагрузке. Поэтому я не совсем понимаю, как тогда прописать symlink

udevadm info -a -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.7/usb1/1-1/1-1:1.0/ttyty/ttyUSB0':
    KERNEL=="ttyUSB0"
    SUBSYSTEM=="tty"
    DRIVER==""

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

  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb1/1-1/1-1:
    KERNELS=="1-1:1.0"
    SUBSYSTEMS=="usb"
    DRIVERS=="option"
    ATTRS{authorized}=="1"
    ATTRS{bAlternateSetting}==" 0"
    ATTRS{bInterfaceClass}=="ff"
    ATTRS{bInterfaceNumber}=="00"
    ATTRS{bInterfaceProtocol}=="ff"
    ATTRS{bInterfaceSubClass}=="ff"
    ATTRS{bNumEndpoints}=="03"
    ATTRS{supports_autosuspend}=="1"

  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb1/1-1':
    KERNELS=="1-1"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{authorized}=="1"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bDeviceClass}=="00"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{bMaxPower}=="500mA"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bNumInterfaces}==" 4"
    ATTRS{bcdDevice}=="0000"
    ATTRS{bmAttributes}=="e0"
    ATTRS{busnum}=="1"
    ATTRS{configuration}=="Qualcomm Configuration"
    ATTRS{devnum}=="2"
    ATTRS{devpath}=="1"
    ATTRS{idProduct}=="1003"
    ATTRS{idVendor}=="12d1"
    ATTRS{ltm_capable}=="no"
    ATTRS{manufacturer}=="HUAWEI Technology"
    ATTRS{maxchild}=="0"
    ATTRS{product}=="HUAWEI Mobile"
    ATTRS{quirks}=="0x0"
    ATTRS{removable}=="unknown"
    ATTRS{speed}=="480"
    ATTRS{urbnum}=="5099"
    ATTRS{version}==" 2.00"

  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb1':
    KERNELS=="usb1"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{authorized}=="1"
    ATTRS{authorized_default}=="1"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bDeviceClass}=="09"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{bMaxPower}=="0mA"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bcdDevice}=="0415"
    ATTRS{bmAttributes}=="e0"
    ATTRS{busnum}=="1"
    ATTRS{configuration}==""
    ATTRS{devnum}=="1"
    ATTRS{devpath}=="0"
    ATTRS{idProduct}=="0002"
    ATTRS{idVendor}=="1d6b"
    ATTRS{interface_authorized_default}=="1"
    ATTRS{ltm_capable}=="no"
    ATTRS{manufacturer}=="Linux 4.15.0-65-generic ehci_hcd"
    ATTRS{maxchild}=="8"
    ATTRS{product}=="EHCI Host Controller"
    ATTRS{quirks}=="0x0"
    ATTRS{removable}=="unknown"
    ATTRS{serial}=="0000:00:1d.7"
    ATTRS{speed}=="480"
    ATTRS{urbnum}=="36"
    ATTRS{version}==" 2.00"

  looking at parent device '/devices/pci0000:00/0000:00:1d.7':
    KERNELS=="0000:00:1d.7"
    SUBSYSTEMS=="pci"
    DRIVERS=="ehci-pci"
    ATTRS{broken_parity_status}=="0"
    ATTRS{class}=="0x0c0320"
    ATTRS{companion}==""
    ATTRS{consistent_dma_mask_bits}=="32"
    ATTRS{d3cold_allowed}=="1"
    ATTRS{device}=="0x265c"
    ATTRS{dma_mask_bits}=="32"
    ATTRS{driver_override}=="(null)"
    ATTRS{enable}=="1"
    ATTRS{irq}=="23"
    ATTRS{local_cpulist}=="0"
    ATTRS{local_cpus}=="1"
    ATTRS{msi_bus}=="1"
    ATTRS{revision}=="0x03"
    ATTRS{subsystem_device}=="0x099c"
    ATTRS{subsystem_vendor}=="0x103c"
    ATTRS{uframe_periodic_max}=="100"
    ATTRS{vendor}=="0x8086"

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

shtrih
() автор топика
Ответ на: комментарий от shtrih
udevadm info -a -n /dev/ttyUSB1

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.7/usb1/1-1/1-1:1.1/t
    KERNEL=="ttyUSB1"
    SUBSYSTEM=="tty"
    DRIVER==""

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

  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb1/1-1/1-
    KERNELS=="1-1:1.1"
    SUBSYSTEMS=="usb"
    DRIVERS=="option"
    ATTRS{authorized}=="1"
    ATTRS{bAlternateSetting}==" 0"
    ATTRS{bInterfaceClass}=="ff"
    ATTRS{bInterfaceNumber}=="01"
    ATTRS{bInterfaceProtocol}=="ff"
    ATTRS{bInterfaceSubClass}=="ff"
    ATTRS{bNumEndpoints}=="02"
    ATTRS{supports_autosuspend}=="1"

  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb1/1-1':
    KERNELS=="1-1"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{authorized}=="1"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bDeviceClass}=="00"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{bMaxPower}=="500mA"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bNumInterfaces}==" 4"
    ATTRS{bcdDevice}=="0000"
    ATTRS{bmAttributes}=="e0"
    ATTRS{busnum}=="1"
    ATTRS{configuration}=="Qualcomm Configuration"
    ATTRS{devnum}=="2"
    ATTRS{devpath}=="1"
    ATTRS{idProduct}=="1003"
    ATTRS{idVendor}=="12d1"
    ATTRS{ltm_capable}=="no"
    ATTRS{manufacturer}=="HUAWEI Technology"
    ATTRS{maxchild}=="0"
    ATTRS{product}=="HUAWEI Mobile"
    ATTRS{quirks}=="0x0"
    ATTRS{removable}=="unknown"
    ATTRS{speed}=="480"
    ATTRS{urbnum}=="3941"
    ATTRS{version}==" 2.00"

  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb1':
    KERNELS=="usb1"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{authorized}=="1"
    ATTRS{authorized_default}=="1"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bDeviceClass}=="09"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{bMaxPower}=="0mA"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bcdDevice}=="0415"
    ATTRS{bmAttributes}=="e0"
    ATTRS{busnum}=="1"
    ATTRS{configuration}==""
    ATTRS{devnum}=="1"
    ATTRS{devpath}=="0"
    ATTRS{idProduct}=="0002"
    ATTRS{idVendor}=="1d6b"
    ATTRS{interface_authorized_default}=="1"
    ATTRS{ltm_capable}=="no"
    ATTRS{manufacturer}=="Linux 4.15.0-65-generic ehci_hcd"
    ATTRS{maxchild}=="8"
    ATTRS{product}=="EHCI Host Controller"
    ATTRS{quirks}=="0x0"
    ATTRS{removable}=="unknown"
    ATTRS{serial}=="0000:00:1d.7"
    ATTRS{speed}=="480"
    ATTRS{urbnum}=="36"
    ATTRS{version}==" 2.00"

  looking at parent device '/devices/pci0000:00/0000:00:1d.7':
    KERNELS=="0000:00:1d.7"
    SUBSYSTEMS=="pci"
    DRIVERS=="ehci-pci"
    ATTRS{broken_parity_status}=="0"
    ATTRS{class}=="0x0c0320"
    ATTRS{companion}==""
    ATTRS{consistent_dma_mask_bits}=="32"
    ATTRS{d3cold_allowed}=="1"
    ATTRS{device}=="0x265c"
    ATTRS{dma_mask_bits}=="32"
    ATTRS{driver_override}=="(null)"
    ATTRS{enable}=="1"
    ATTRS{irq}=="23"
    ATTRS{local_cpulist}=="0"
    ATTRS{local_cpus}=="1"
    ATTRS{msi_bus}=="1"
    ATTRS{revision}=="0x03"
    ATTRS{subsystem_device}=="0x099c"
    ATTRS{subsystem_vendor}=="0x103c"
    ATTRS{uframe_periodic_max}=="100"
    ATTRS{vendor}=="0x8086"

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

shtrih
() автор топика
Ответ на: комментарий от shtrih

у меня это выглядит

[   41.800973] usbserial: USB Serial support registered for GSM modem (1-port)
[   41.801621] option 1-1:1.0: GSM modem (1-port) converter detected
[   41.802296] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB0
[   41.804675] option 1-1:1.1: GSM modem (1-port) converter detected
[   41.805726] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB1

shtrih
() автор топика

Ну у меня тоже такая же проблема c E173, но я решил ее больше 10 лет назад таким образом:

Гамму-смсд запускаю не демонизируя скриптом в цикле.

Перед запуском гаммы-смсд проверяю наличие модема, если его нет, то пытаюсь его отресетить через usb_modeswitch -R

while [ -f $RUNFLAG ] ; do
 if ! gammu identify | grep -q E173 ; then
    usb_modeswitch -R -v 0x12d1 -p 0x1001
    echo "12d1 1001" > /sys/bus/usb-serial/drivers/option1/new_id
    sleep 5
    if ! gammu identify | grep -q E173 ; then
            logger -p daemon.err "АААААААААААААААААААААА"
            exit 1
    fi
 fi
 [ -f $RUNFLAG ] || exit 0
 gammu-smsd -f 1 .....
done

vel ★★★★★
()
Ответ на: комментарий от vel

Но как быть, когда в процессе работы модем меняет порт? В данном случае, проблема решается только когда компьютер перегружается или включается.

shtrih
() автор топика
Ответ на: комментарий от anonymous

Что значит не удалось? Я прочитал и сделать symlink, но она не работает, так как два устройства одинаковых и насколько я понимаю, ссылка идёт сразу на два устройства и программа это не понимает.

shtrih
() автор топика
Ответ на: комментарий от anonymous

Если писать так, то дев не создаётся

 cat /etc/udev/rules.d/99-megasymlink.rules
ACTION=="add", SUBSYSTEMS=="usb", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1003", ATTRS{bInterfaceNumber}=="00", SYMLINK+="megasymlink"

 

а если как предложили здесь, то дев создаётся, но не работает

shtrih
() автор топика
Ответ на: комментарий от shtrih

ATTRS{idVendor}, ATTRS{idProduct} у них совпадают, как и все другие значения, кроме ATTRS{urbnum}. Но он меняется при каждой перезагрузке.

Поясни, пожалуйста, как именно он меняется:

  • получает новое случайное значение
    ИЛИ
  • следует за «своим» портом? (т.е. меняется номер рабочего порта с «0» на «1» и ATTRS{urbnum} «нулевого» становится «первым»)

Поскольку всё же не ясно что и как там происходит могу предложить только такие «костыльные» варианты

  1. «параллельно» gammu-smsd выполнять команду sudo cat /dev/ttyUSB1 >>/dev/zero & — в надежде, что поскольку на момент переопределение модема оба его порта заняты они получат снова номера в «правильном» порядке. (ну это «такое»)
  2. более «суровый» вариант, но возможно и более рабочий. После того, как порты модема поменяются местами выгрузить драйвер модема — при этом устройства снова исчезнут. И после паузы (1-2 секунд думаю будет достаточно) снова загрузить модуль драйвера модема. Есть ещё вариант с отключением/включением порта USB, в котором «торчит» модем...

P.S. неплохо бы найти в journalctl (или dmesg) сообщения в момент переопределения портов. Смотреть нужно с момента когда «/dev/ttyUSB...disconnected» и до момента «/dev/ttyUSB...connected»

anymouze ★★
()
Ответ на: комментарий от shtrih

Чтоб вернуть модем на свой порт нужно сначала освободить этот порт и после этого сделать ему reset (usb_modeswitch -R) после чего он снова займет свой начальный порт.

«gammu-smsd -f 1» завершиться после первой ошибки, тем самым освободит порт.

vel ★★★★★
()
Ответ на: комментарий от anymouze

Вот только что это произошло снова. Вот лог

[Sun Oct  6 18:27:47 2019] ACPI: bus type USB registered
[Sun Oct  6 18:27:47 2019] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[Sun Oct  6 18:27:47 2019] ehci-pci 0000:00:1d.7: new USB bus registered, assigned bus number 1
[Sun Oct  6 18:27:47 2019] ehci-pci 0000:00:1d.7: USB 2.0 started, EHCI 1.00
[Sun Oct  6 18:27:47 2019] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002
[Sun Oct  6 18:27:47 2019] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[Sun Oct  6 18:27:47 2019] hub 1-0:1.0: USB hub found
[Sun Oct  6 18:27:47 2019] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
[Sun Oct  6 18:27:47 2019] uhci_hcd: USB Universal Host Controller Interface driver
[Sun Oct  6 18:27:47 2019] uhci_hcd 0000:00:1d.0: new USB bus registered, assigned bus number 2
[Sun Oct  6 18:27:47 2019] usb usb2: New USB device found, idVendor=1d6b, idProduct=0001
[Sun Oct  6 18:27:47 2019] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[Sun Oct  6 18:27:47 2019] hub 2-0:1.0: USB hub found
[Sun Oct  6 18:27:47 2019] uhci_hcd 0000:00:1d.1: new USB bus registered, assigned bus number 3
[Sun Oct  6 18:27:47 2019] usb usb3: New USB device found, idVendor=1d6b, idProduct=0001
[Sun Oct  6 18:27:47 2019] usb usb3: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[Sun Oct  6 18:27:47 2019] hub 3-0:1.0: USB hub found
[Sun Oct  6 18:27:47 2019] uhci_hcd 0000:00:1d.2: new USB bus registered, assigned bus number 4
[Sun Oct  6 18:27:47 2019] usb usb4: New USB device found, idVendor=1d6b, idProduct=0001
[Sun Oct  6 18:27:47 2019] usb usb4: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[Sun Oct  6 18:27:47 2019] hub 4-0:1.0: USB hub found
[Sun Oct  6 18:27:47 2019] uhci_hcd 0000:00:1d.3: new USB bus registered, assigned bus number 5
[Sun Oct  6 18:27:47 2019] usb usb5: New USB device found, idVendor=1d6b, idProduct=0001
[Sun Oct  6 18:27:47 2019] usb usb5: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[Sun Oct  6 18:27:47 2019] hub 5-0:1.0: USB hub found
[Sun Oct  6 18:27:47 2019] usb 1-1: new high-speed USB device number 2 using ehci-pci
[Sun Oct  6 18:27:47 2019] usb 1-1: New USB device found, idVendor=12d1, idProduct=1003
[Sun Oct  6 18:27:47 2019] usb 1-1: New USB device strings: Mfr=3, Product=2, SerialNumber=0
[Sun Oct  6 18:27:47 2019] usb-storage 1-1:1.0: USB Mass Storage device detected
[Sun Oct  6 18:27:47 2019] usb-storage 1-1:1.1: USB Mass Storage device detected
[Sun Oct  6 18:27:47 2019] usb-storage 1-1:1.2: USB Mass Storage device detected
[Sun Oct  6 18:27:47 2019] usb-storage 1-1:1.3: USB Mass Storage device detected
[Sun Oct  6 18:27:47 2019] usbserial: USB Serial support registered for generic
[Sun Oct  6 18:27:47 2019] usbserial: USB Serial support registered for GSM modem (1-port)
[Sun Oct  6 18:27:47 2019] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB0
[Sun Oct  6 18:27:47 2019] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB1
[Sun Oct  6 18:07:43 2019] option1 ttyUSB0: usb_wwan_indat_callback: resubmit read urb failed. (-2)
[Sun Oct  6 18:07:43 2019] option1 ttyUSB0: usb_wwan_indat_callback: resubmit read urb failed. (-2)
[Sun Oct  6 18:07:43 2019] option1 ttyUSB0: usb_wwan_indat_callback: resubmit read urb failed. (-2)
[Sun Oct  6 18:07:43 2019] option1 ttyUSB0: GSM modem (1-port) converter now disconnected from ttyUSB0
[Sun Oct  6 18:07:43 2019] option1 ttyUSB1: usb_wwan_indat_callback: resubmit read urb failed. (-2)
[Sun Oct  6 18:07:43 2019] option1 ttyUSB1: usb_wwan_indat_callback: resubmit read urb failed. (-2)
[Sun Oct  6 18:07:43 2019] option1 ttyUSB1: usb_wwan_indat_callback: resubmit read urb failed. (-2)
[Sun Oct  6 18:07:43 2019] option1 ttyUSB1: GSM modem (1-port) converter now disconnected from ttyUSB1
[Sun Oct  6 18:07:43 2019] usb 1-1: reset high-speed USB device number 2 using ehci-pci
[Sun Oct  6 18:07:43 2019] usb 1-1: USB disconnect, device number 2
[Sun Oct  6 18:07:43 2019] usb 1-1: new high-speed USB device number 3 using ehci-pci
[Sun Oct  6 18:07:43 2019] usb 1-1: New USB device found, idVendor=12d1, idProduct=1003
[Sun Oct  6 18:07:43 2019] usb 1-1: New USB device strings: Mfr=3, Product=2, SerialNumber=0
[Sun Oct  6 18:07:43 2019] usb-storage 1-1:1.0: USB Mass Storage device detected
[Sun Oct  6 18:07:43 2019] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB1
[Sun Oct  6 18:07:43 2019] usb 1-1: USB disconnect, device number 3
[Sun Oct  6 18:07:43 2019] option1 ttyUSB1: GSM modem (1-port) converter now disconnected from ttyUSB1
[Sun Oct  6 18:07:43 2019] usb 1-1: new high-speed USB device number 4 using ehci-pci
[Sun Oct  6 18:07:43 2019] usb 1-1: New USB device found, idVendor=12d1, idProduct=1003
[Sun Oct  6 18:07:43 2019] usb 1-1: New USB device strings: Mfr=3, Product=2, SerialNumber=0
[Sun Oct  6 18:07:43 2019] usb-storage 1-1:1.0: USB Mass Storage device detected
[Sun Oct  6 18:07:43 2019] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB1
[Sun Oct  6 18:07:43 2019] usb-storage 1-1:1.1: USB Mass Storage device detected
[Sun Oct  6 18:07:43 2019] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB2
[Sun Oct  6 18:07:43 2019] usb-storage 1-1:1.2: USB Mass Storage device detected
[Sun Oct  6 18:07:43 2019] usb-storage 1-1:1.3: USB Mass Storage device detected

shtrih
() автор топика
Ответ на: комментарий от anymouze

при этом udevadm info -a -n /dev/ttyUSB0 device node not found

то есть были /dev/ttyUSB0 и /dev/ttyUSB1, стали /dev/ttyUSB1 и /dev/ttyUSB2

ATTRS{urbnum} там произвольные значения и связи в них не вижу

/dev/ttyUSB2 ATTRS{urbnum}==«29475» /dev/ttyUSB1 ATTRS{urbnum}==«29644»

shtrih
() автор топика
Ответ на: комментарий от shtrih

ATTRS{urbnum} там произвольные значения и связи в них не вижу

Тогда правило написать не получиться, насколько я понял.

За лог спасибо! Ваш модем находиться в режиме «модем+накопитель+возможно ещё что-то». Такой комбайн* сносно работает в Windows. Для Linux лучше режим «только модем» — рекомендация старая древняя, но до сих пор часто актуальная. Если от модема не требуется ничего более, чем приём/отправка SMS режима «только модем» будет достаточно.

Как вариант: попробуйте извлекать из системы «модем-носитель данных».

                        === ПРЕДУПРЕЖДЕНИЕ ===
Ошибки в командах смены режима модема могут привести к неработоспособности модема!

Выполнять дальнейшие рекомендации или нет — решать Вам.

 Безопасные команды, сообщают различную информацию о модеме:
ATI — вывод информации о модеме
AT^U2DIAG? — текущий режим.
AT^GETPORTMODE – список всех устройств в модеме

# AT+CLAC в ответе будет список поддерживаемых команд

AT^U2DIAG=0 - переводит модем в режим «только модем». Потенциально опасна.

На самом деле опасность минимальна, но о ней следует помнить.

Теперь, собственно, описание алгоритма смены режима. В программе способной общаться с модемом посредством AT-команд

  1. выполнить команду ATI — формальность, но если модемов у Вас более одного, то лучше сохранить эту информацию
  2. выполнить команду AT^GETPORTMODE — ещё одна формальность, но я бы и этот ответ сохранил
  3. выполнить команду AT^U2DIAG? — необходимо узнать текущий режим, возможно когда-то потребуется его вернуть
  4. выполнить команду AT^U2DIAG=0 — сообственно меняем режим. Команда выполняется не мгновенно, но и не очень долго. «Ok» — сменили режим, «Error» — не сменили; если ничего не ответит — возможно «доигрались» или модем переопределится в системе. Если не опознается — точно «доигрались».

gammu умеет же выполнять AT-команды и сохранять лог ответов? Лог лучше иметь, чем не иметь.

Если такой программы под рукой нет, можно обойтись консолью и простейшими командами — линукс такое позволяет. (я так и делаю обычно, хоть это и не хорошо)

anymouze ★★
()
Последнее исправление: anymouze (всего исправлений: 1)
Ответ на: комментарий от anymouze

Тогда правило написать не получиться, насколько я понял.

Можно. urbnum указывать в правиле нет никакой нужды. Почти верное правило в самом начале написали, но ТС все не впрок.

anonymous
()
Ответ на: комментарий от anonymous

С правилом я ему не смогу помочь.

Почти верное правило в самом начале написали, но ТС все не впрок.

Может подскажешь чего-там не хватает? Да и всё равно модем будет периодически ребутиться. Мои модемы даже в режиме «только модем» бывает отваливаются. Правда, обычно от перегрева — качать GB через 3G для мобильных модемов всё же сложно, они для серфинга.

anymouze ★★
()
Последнее исправление: anymouze (всего исправлений: 1)
Ответ на: комментарий от anymouze
KERNEL=="ttyUSB[0-9]*", SUBSYSTEM=="tty", SUBSYSTEMS=="usb", ATTRS{idVendor}=="xxxx", ATTRS{idProduct}=="yyyy", SYMLINK+="megasymlink"

Это если нужно, чтобы устройство всегда было на одном симлинке. Если надо, чтобы было на разных, в зависимости от того, в какой порт воткнули, то одним правилом это сделать нельзя(двумя можно).

Логи тут лишние. Достаточно выхлопа udevadm monitor при втыкании/выдергивании и ls /dev/ttyUSB*.

anonymous
()
Ответ на: комментарий от shtrih

а если как предложили здесь, то дев создаётся, но не работает

Здесь предложили идею, а дальше сам подбери ATTRS, должны же эти порты хоть чем-то различаться. И да, их лучше всегда делать два (или три, если у устройства их создаётся три - так тоже бывает). Второй тоже может быть полезен.

AS ★★★★★
()
Последнее исправление: AS (всего исправлений: 2)
Ответ на: комментарий от anonymous

Почти верное правило в самом начале написали, но ТС все не впрок.

Оно именно, что «почти». Там привязка к тем атрибутам, что одинаковы у обоих портов, потому симлинк всегда соответствует последнему, а ему первый нужен скорее всего.

AS ★★★★★
()
Ответ на: комментарий от anymouze

А-аа, тут 2 порта на одном устройстве... Тогда хитрее.

KERNEL=="ttyUSB[0-9]*", SUBSYSTEM=="tty", SUBSYSTEMS=="usb", ATTRS{idVendor}=="xxxx", ATTRS{idProduct}=="yyyy", ENV{MODEM_ID}="xxxx:yyyy"
#
ENV{MODEM_ID}=="xxxx:yyyy", KERNEL=="ttyUSB[0-9]*", SUBSYSTEM=="tty", ATTRS{bInterfaceNumber}=="00", SYMLINK+="megasymlink0"
ENV{MODEM_ID}=="xxxx:yyyy", KERNEL=="ttyUSB[0-9]*", SUBSYSTEM=="tty", ATTRS{bInterfaceNumber}=="01", SYMLINK+="megasymlink1"
anonymous
()
Ответ на: комментарий от AS

Какой ему нужен — пусть сам разбирается. Пусть udev вешает 2 устройства на 2 разных симлинка. Это можно сделать только двумя правилами, т.к. в одном правиле можно ссылаться только на одно родительское устройство. Выше написал.

Но все равно не впрок. Это все английским по белому расписано в тугоментации. Раз ее прочитатьт не удалось, то все равно что-нибудь отвалится рано или поздно.

anonymous
()
Ответ на: комментарий от anonymous

Да, 2 порта от одного модема. И обычно, но необязательно, нужный gammu-smsd порт имеет меньший номер. ТС желает его зафиксировать, чтобы не лазить в конфиг программы при каждом чихе модема.

Спасибо за правило. Если будет желание у ТС, он попробует твоё правило — может и поможет.

Я тут подумал, может мы всё слишком усложняем? Может повторный сброс модема будет возвращать порты «на круги своя»?

anymouze ★★
()
Ответ на: комментарий от anymouze

В модемах я ничего не понимаю.) По идее, он не должен отваливаться. udev — имхо, подходящее средство для того, чтобы зафиксировать имена. AS выше четко и ясно расписал логику. Забыли только, что в правиле можно ссылаться только на одного родителя. Лютый RTFM, в общем.

anonymous
()
Ответ на: комментарий от shtrih

В правилах udev можно ещё некоторую логику реализовывать. Если возможностей хватит, можно попробовать реализовать алгоритм таким образом.

1. Проверить наличие второго симлинка.
2. Если второй симлинк есть, значит всё дёрнулось, надо удалить второй симлинк, создать первый, завершить обработку.
3. Если второго симлинка нет, а первый есть, это второй проход, создать второй симлинк, завершить обработку.
4. Если ни одного симлинка нет, создать первый симлинк.

Вроде не ошибся.

AS ★★★★★
()
Ответ на: комментарий от anymouze

Вторая и третья команда не выполняется. Дальше, что-то страшновато. Почему не выполняются?

ATI
Manufacturer: huawei
Model: E160G
Revision: 11.609.10.00.158
IMEI: 359390020069961
+GCAP: +CGSM,+DS,+ES

OK

^BOOT:20069961,0,0,0,76
AT^U2DIAG?
ERROR

^BOOT:20069961,0,0,0,76
AT^GETPORTMODE
ERROR

shtrih
() автор топика
Ответ на: комментарий от anonymous

Что то я не понимаю суть правила и что оно даёт? В данном случае вижу, что будет два SYMLINK и соответственно в своей программе, я буду прописывать либо один, а если что то меняется, то другой. То есть опять ручной труд, при сбоях на модеме.

Также, я писал выше, что порты были сначала 0 и 1, а стали 1 и 2.

Но настройка ATTRS{bInterfaceNumber}==«00» привязывается к конкретному номеру порта.

Если не прав, то вразумите.

shtrih
() автор топика
Ответ на: комментарий от shtrih

Не выполняются

  • записаны с ошибками (я тоже мог ошибиться)
  • возможно, нужно попробовать другие допустимые варианты:
    AT^GETPORTMODE? и/или AT^GETPORTMODE=?
    AT^U2DIAG и/или AT^U2DIAG=?
  • не поддерживаются устройством (такое тоже возможно)
  • мешает некий внешний фактор
    ^BOOT:20069961,0,0,0,76
    то ли модем занят каким-то процессом, то ли процесс его инициализации не завершился

В начале темы модем описан как Huawei E230/E270/E870 HSDPA/HSUPA Modem (lspci), а по команде ATI он Huawei E160G. Может это и не принципиальная разница, но всё же...

Дальше, что-то страшновато.

Опрашивать модем вполне безопасно, менять его настройки лучше не надо — не совсем понятно, что не так пошло. Попробуй команду AT+CLAC — должно выдать большой список из поддерживаемых устройством команд. По крайней мере станет ясно, понимает он AT^U2DIAG и AT^GETPORTMODE или нет. Перед опросом модема неплохо убедиться, что порт свободен #lsof /dev/ttyUSB* — напечатает, кто занял файл устройства или ничего (т.е. устройство свободно).

anymouze ★★
()
Ответ на: комментарий от shtrih

я не понимаю суть

Я вижу.

что будет два SYMLINK

Да.

а если что то меняется, то другой

Нет.

Но настройка ATTRS{bInterfaceNumber}==«00» привязывается к конкретному номеру порта.

Да.

вразумите

В Job.

anonymous
()
Ответ на: комментарий от shtrih

Это крайне мало и всё мимо :(

Попробуй так. В терминале от рут выполни (я полагаю, что рабочий порт /dev/ttyUSB0 — нужен порт с которым работает gammu и он должен быть свободен)

cat /dev/ttyUSB0 >>/tmp/modem.log &
# выведет PID процесса 'cat /dev/ttyUSB0'
echo -e "AT+CLAC\r">>/dev/ttyUSB0
sleep 5
# смотрим ответ команды
less /tmp/modem.log 
kill <PID процесса 'cat /dev/ttyUSB0'> # или просто модем перетыкнуть

anymouze ★★
()
Ответ на: комментарий от anymouze
AT+CLAC
+CLAC:&C,&D,&E,&F,&S,&V,&W,E,I,L,M,Q,V,X,Z,T,P,\Q,\S,\V,%V,D,A,H,O,S0,S2,S3,S4,S5,S6,S7,S8,S9,S10,S11,S30,S103,S104,+FCLASS,+ICF,+IFC,+IPR,+GMI,+GMM,+GMR,+GCAP,+GSN,+DR,+DS,+WS46,+CLAC,+CCLK,+CBST,+CRLP,+CV120,+CHSN,+CSSN,+CREG,+CGREG,+CFUN,+GCAP,+CSCS,+CSTA,+CR,+CEER,+CRC,+CMEE,+CGDCONT,+CGDSCONT,+CGTFT,+CGEQREQ,+CGEQMIN,+CGQREQ,+CGQMIN,+CGEQNEG,+CGEREP,+CGPADDR,+CGCLASS,+CGSMS,+CSMS,+CMGF,+CSAS,+CRES,+CSCA,+CSMP,+CSDH,+CSCB,+FDD,+FAR,+FCL,+FIT,+ES,+ESA,+CMOD,+CVHU,+CGDATA,+CSQ,+CBC,+CPAS,+CPIN,+CMEC,+CKPD,+CIND,+CMER,+CGATT,+CGACT,+CGCMOD,+CPBS,+CPBR,+CPBF,+CPBW,+CPMS,+CNMI,+CMGL,+CMGR,+CMGS,+CMSS,+CMGW,+CMGD,+CMGC,+CNMA,+CMMS,+FTS,+FRS,+FTH,+FRH,+FTM,+FRM,+CHUP,+CCFC,+CCUG,+COPS,+CLCK,+CPWD,+CUSD,+CAOC,+CACM,+CAMM,+CPUC,+CCWA,+CHLD,+CIMI,+CGMI,+CGMM,+CGMR,+CGSN,+CNUM,+CSIM,+CRSM,+CCLK,+CLVL,+CMUT,+CLCC,+COPN,+CPOL,+CPLS,+CTZR,+CTZU,+CLAC,+CLIP,+COLP,+CDIP,+CTFR,+CLIR,$QCSIMSTAT,$QCCNMI,$QCCLR,$QCDMG,$QCDMR,$QCDNSP,$QCDNSS,$QCTER,$QCSLOT,$QCPINSTAT,$QCPDPP,$QCPDPLT,$QCPWRDN,$QCDGEN,$BREW,$QCSYSMODE,^STSF,^STGI,^STGR,^IMSICHG,^SYSINFO,^SYSCFG,^SYSCONFIG,^HS,^DTMF,^CPBR,^CPBW,^HWVER,^HVER,^DSFLOWCLR,^DSFLOWQRY,^DSFLOWRPT,^SPN,^PORTSEL,^CPIN,^SN,^EARST,^CARDLOCK,^CARDUNLOCK,^ATRECORD,^CDUR,^BOOT,^FHVER,^CURC,^FREQLOCK,^FREQPREF,^HSDPA,^CARDMODE,^U2DIAG,^PAD,^PCSCINFO,^CQI,^CVOICE,^DDSETEX,^pcmrecord,^PCMBUFFER,^CSNR,^PNN,^OPL,^CPNN,^ADCTEMP,^RDCUST,^SETPID,^DIALMODE,^YJCX,^NDISDUP,^DHCP,^AUTHDATA,^CRPN,^ICCID,

OK

shtrih
() автор топика
Ответ на: комментарий от shtrih

Попробуй вот так:

ACTION=="add", SUBSYSTEM=="tty", ATTRS{../../../idVendor}=="12d1", ATTRS{../../../idProduct}=="1003", ATTRS{../../bInterfaceNumber}=="00", SYMLINK+="megasymlink"
SUBSYSTEM==«tty» (не SUBSYSTEMS!) матчит tty-устройство, ATTR{../../../} матчат vid и pid usb-устройства, ATTR{../../} матчит номер usb-интерфейса.

iliyap ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.