Telefone ponto USB para / dev / ttyACM específico usando o udev

4

Temos uma configuração Nagios + check_mk no servidor Ubuntu 12.04 LTS com smstools para enviar notificações de mensagem de texto. Estamos usando um telefone Nokia 6230 antigo conectado por um cabo USB, embora eu não me lembre do símbolo do fornecedor do cabo. Ocasionalmente, o dispositivo deixa de responder - aparentemente, o endereço do dispositivo tty muda de /dev/ttyACM0 para /dev/ttyACM1 ou vice-versa.

De acordo com o smstools log:

2013-05-28 16:51:16,3, GSM1: Could not send character A, cause: Input/output error
2013-05-28 16:51:18,3, GSM1: Could not send character A, cause: Input/output error

e nada mais, na verdade (eu não usei o modo de depuração completa embora).

Após o reinício do serviço smstools :

2013-05-28 22:29:09,3, GSM1: Cannot open serial port /dev/ttyACM0, error: No such file or directory

É possível que algumas dessas ocorrências tenham sido causadas por um dos nossos técnicos, inadvertida e inconscientemente, desconectando o telefone por alguns segundos enquanto conectava outro dispositivo. Eu não posso ter certeza embora.

A pergunta é: como faço o telefone sempre usar o mesmo endereço tty ? Acho que não há problema em usar udev regras para isso, mas tenho pouca experiência com aqueles.

lsusb output para o telefone é:

Bus 002 Device 004: ID 0421:040f Nokia Mobile Phones 6230 GSM Phone

É um servidor de produção ao vivo monitorando cerca de 250 hosts e eu não tenho outro telefone disponível para experimentos no momento, então não posso testá-lo por tentativa e erro.

EDITAR .

A saída de udevadm info -q all -n /dev/ttyACM1 --attribute-walk :

  looking at device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.6/2-1.6:1.1/tty/ttyACM1':
    KERNEL=="ttyACM1"
    SUBSYSTEM=="tty"
    DRIVER==""

  looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.6/2-1.6:1.1':
    KERNELS=="2-1.6:1.1"
    SUBSYSTEMS=="usb"
    DRIVERS=="cdc_acm"
    ATTRS{bInterfaceNumber}=="01"
    ATTRS{bAlternateSetting}==" 0"
    ATTRS{bNumEndpoints}=="01"
    ATTRS{bInterfaceClass}=="02"
    ATTRS{bInterfaceSubClass}=="02"
    ATTRS{bInterfaceProtocol}=="01"
    ATTRS{supports_autosuspend}=="1"
    ATTRS{bmCapabilities}=="6"

  looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.6':
    KERNELS=="2-1.6"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{configuration}==""
    ATTRS{bNumInterfaces}=="11"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bmAttributes}=="e0"
    ATTRS{bMaxPower}=="  8mA"
    ATTRS{urbnum}=="391970"
    ATTRS{idVendor}=="0421"
    ATTRS{idProduct}=="040f"
    ATTRS{bcdDevice}=="0550"
    ATTRS{bDeviceClass}=="02"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{speed}=="12"
    ATTRS{busnum}=="2"
    ATTRS{devnum}=="4"
    ATTRS{devpath}=="1.6"
    ATTRS{version}==" 1.10"
    ATTRS{maxchild}=="0"
    ATTRS{quirks}=="0x0"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{authorized}=="1"
    ATTRS{manufacturer}=="Nokia"
    ATTRS{product}=="Nokia 6230"

  looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1':
    KERNELS=="2-1"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{configuration}==""
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bmAttributes}=="e0"
    ATTRS{bMaxPower}=="  0mA"
    ATTRS{urbnum}=="59"
    ATTRS{idVendor}=="8087"
    ATTRS{idProduct}=="0024"
    ATTRS{bcdDevice}=="0000"
    ATTRS{bDeviceClass}=="09"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="01"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{speed}=="480"
    ATTRS{busnum}=="2"
    ATTRS{devnum}=="2"
    ATTRS{devpath}=="1"
    ATTRS{version}==" 2.00"
    ATTRS{maxchild}=="6"
    ATTRS{quirks}=="0x0"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{authorized}=="1"

  looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2':
    KERNELS=="usb2"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{configuration}==""
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bmAttributes}=="e0"
    ATTRS{bMaxPower}=="  0mA"
    ATTRS{urbnum}=="24"
    ATTRS{idVendor}=="1d6b"
    ATTRS{idProduct}=="0002"
    ATTRS{bcdDevice}=="0302"
    ATTRS{bDeviceClass}=="09"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{speed}=="480"
    ATTRS{busnum}=="2"
    ATTRS{devnum}=="1"
    ATTRS{devpath}=="0"
    ATTRS{version}==" 2.00"
    ATTRS{maxchild}=="2"
    ATTRS{quirks}=="0x0"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{authorized}=="1"
    ATTRS{manufacturer}=="Linux 3.2.0-38-generic ehci_hcd"
    ATTRS{product}=="EHCI Host Controller"
    ATTRS{serial}=="0000:00:1d.0"
    ATTRS{authorized_default}=="1"

  looking at parent device '/devices/pci0000:00/0000:00:1d.0':
    KERNELS=="0000:00:1d.0"
    SUBSYSTEMS=="pci"
    DRIVERS=="ehci_hcd"
    ATTRS{vendor}=="0x8086"
    ATTRS{device}=="0x1e26"
    ATTRS{subsystem_vendor}=="0x1043"
    ATTRS{subsystem_device}=="0x84ca"
    ATTRS{class}=="0x0c0320"
    ATTRS{irq}=="23"
    ATTRS{local_cpus}=="00000000,00000000,00000000,00000000,00000000,00000000,00000000,0000000f"
    ATTRS{local_cpulist}=="0-3"
    ATTRS{numa_node}=="-1"
    ATTRS{dma_mask_bits}=="32"
    ATTRS{consistent_dma_mask_bits}=="32"
    ATTRS{enable}=="1"
    ATTRS{broken_parity_status}=="0"
    ATTRS{msi_bus}==""
    ATTRS{companion}==""
    ATTRS{uframe_periodic_max}=="100"

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

Não tenho certeza de quais atributos de qual nível de árvore pai devo usar.

Eu tentei com SUBSYSTEM=="usb",ATTRS{product}=="Nokia 6320",NAME="ttyACM*",SYMLINK+="nokia" e variações ( SYMLINK - sem + ; KERNEL=="2-1.6" , sem NAME e assim por diante), tudo em /etc/udev/rules.d/10-local.rules file. Eu simplesmente não recebo nenhum link simbólico ou nenhuma alteração perceptível.

Talvez o problema esteja na maneira como as regras foram aplicadas - não posso dar ao luxo de reiniciar a máquina e esperava não ter que enviar uma tecnologia para a sala do servidor apenas para conectar e um cabo USB. Eu usei /etc/init.d/udev restart , udevadm control --reload-rules e udevadm trigger com algumas combinações de --attr-match=vendor="Nokia" , --attr-match=product="Nokia 6320" e assim por diante, conforme descrito em esta resposta . Devo enviar uma tecnologia para ligar e desligar ou comprar outro telefone (barato) para testes?

    
por moon.musick 29.05.2013 / 10:21

2 respostas

1

Idéia # 1: Monitorar & Reinicie

Eu consideraria isso um hack, mas você poderia configurar um cron para monitorar o log do smstools quando esta situação ocorrer, e reiniciar o smstools em qualquer dispositivo que esteja no momento.

Você pode assistir ao log do smstools com este script nagios, check_log3.pl :

check_log3.pl -l /var/log/smstools -s /tmp/log_smstools.seek \
      -p 'Input/output error'

Quando o erro for detectado, você poderá reiniciar o smstools. Para contornar o problema com a mudança, você pode manter 2 cópias do arquivo de configuração do smstool, uma configuração para /dev/ttyACM0 & o outro para /dev/ttyACM1 .

Use o apropriado para iniciar.

Idéia # 2: adicione os dois dispositivos

Olhando os documentos para smstools , parece que você pode adicionar ambos os tty's ao arquivo ou deixe a linha do dispositivo não especificada completamente.

devices = GSM*
# device = /dev/ttyACM0
    
por 30.05.2013 / 04:47
2

Posso confirmar que o smstools não será iniciado sem o nome do dispositivo. Então, isso não vai funcionar:

devices = GSM *

#device = / dev / ttyACM0

Você pode adicionar o dispositivo, mas essa também não é a solução correta. Quando você tem ACM1 e ACM0 usados pelos smstools, então o que acontece? Sim, você não terá o telefone disponível para chamadas / sms.

Ainda não consegui encontrar a solução certa, mas a descrição acima não funcionará. Copiado deste site, na verdade: link

    
por 10.06.2015 / 15:41

Tags