Come identificare un dispositivo > dispositivi seriali
Come identificare un dispositivo seriale (/dev/ttyS*) per una data interfaccia del computer (non la periferica collegata ad essa).
L'interfaccia seriale (RS-232) è datata e non ha alcun processo di enumerazione, bisogna indicare all'applicazione quale /dev/ttyS* utilizzare (alcune applicazioni hanno alcune funzionalità di auto rilevamento, ma non sono sempre affidabili).
A proposito di interfacce seriali
La porta seriale può avere un'interfaccia fisica nel computer:
- interfaccia seriale DB9
- interfaccia seriale DB25 (su computer più vecchi)
- interfaccia seriale RJ-45 (per lo più su switch e router, ma anche in alcuni computer, come quelli della Sun)
Oppure può essere "integrata" in un altro dispositivo, come:
- modem interni (ISA, PCI...)
- PC Card (pcmcia, Cardbus...), inclusi modem, GSM o schede UMTS/3G
- adattatori da USB a seriale
- docking station (per computer portatili)
Spesso i computer hanno un chipset interno UART, ma non una interfaccia fisica: i portatili recenti hanno il connettore DB-9 solo sulla docking station; alcuni desktop hanno un connettore disponibile mentre il secondo richiede un cavo opzionale, quindi ciò che si vede NON È quello che si ha.
Quale /dev/ttyS* ?
Usare hal
hal è installato in modo predefinito negli Ambienti desktop (sia Gnome che Kde), ma non sui server.
Prestare particolare attenzione alle righe 'info.product' e 'linux.device_file':
$hal-find-by-capability --capability serial | xargs -n 1 hal-device udi = '/org/freedesktop/Hal/devices/pcmcia__1__1_serial_platform_1' info.capabilities = {'serial'} (string list) info.category = 'serial' (string) info.parent = '/org/freedesktop/Hal/devices/pcmcia__1__1' (string) info.product = 'Merlin UMTS Modem' (string) info.udi = '/org/freedesktop/Hal/devices/pcmcia__1__1_serial_platform_1' (string) linux.device_file = '/dev/ttyS1' (string) linux.hotplug_type = 2 (0x2) (int) linux.subsystem = 'tty' (string) linux.sysfs_path = '/sys/class/tty/ttyS1' (string) serial.device = '/dev/ttyS1' (string) serial.originating_device = '/org/freedesktop/Hal/devices/pcmcia__1__1' (string) serial.physical_device = '/org/freedesktop/Hal/devices/pcmcia__1__1' (string) serial.port = 1 (0x1) (int) serial.type = 'platform' (string) udi = '/org/freedesktop/Hal/devices/pci_8086_2a07_serial_platform_0' info.capabilities = {'serial'} (string list) info.category = 'serial' (string) info.parent = '/org/freedesktop/Hal/devices/pci_8086_2a07' (string) info.product = 'Mobile PM965/GM965 KT Controller' (string) info.udi = '/org/freedesktop/Hal/devices/pci_8086_2a07_serial_platform_0' (string) linux.device_file = '/dev/ttyS0' (string) linux.hotplug_type = 2 (0x2) (int) linux.subsystem = 'tty' (string) linux.sysfs_path = '/sys/class/tty/ttyS0' (string) serial.device = '/dev/ttyS0' (string) serial.originating_device = '/org/freedesktop/Hal/devices/pci_8086_2a07' (string) serial.physical_device = '/org/freedesktop/Hal/devices/pci_8086_2a07' (string) serial.port = 0 (0x0) (int) serial.type = 'platform' (string)
altri esempi: thinkpad-a22-hal.txt ; usb-to-serial-adapter_hal.txt
Find in /sys/*
Questo comando dovrebbe funzionare su tutte le installazioni standard di Debian (anche minimali).
$ find /sys/ -name 'tty:ttyS*' /sys/devices/pci0000:00/0000:00:1e.0/0000:15:00.0/0.0/tty:ttyS1 /sys/devices/pci0000:00/0000:00:03.3/tty:ttyS0 /sys/devices/platform/serial8250/tty:ttyS3 /sys/devices/platform/serial8250/tty:ttyS2 /sys/devices/pci0000:00/0000:00:1a.1/usb4/4-1/4-1:1.0/ttyUSB0/tty:ttyUSB0 $ lspci [..] 00:03.3 Serial controller: Intel Corporation Mobile PM965/GM965 KT Controller (rev 0c) [..] 00:1a.0 USB Controller: Intel Corporation 82801H (ICH8 Family) USB UHCI Contoller #4 (rev 03) [..] 00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev f3) [..] 15:00.0 CardBus bridge: Ricoh Co Ltd RL5c476 II (rev ba)
alcune spiegazioni su questo esempio:
- serial8250
- i device ttyS* sotto "serial8250" probabilmente non esistono (sono presenti in modo predefinito perché è difficile individuare se ci sono o meno)
- 0000:00:1e.0/0000:15:00.0/0.0/tty:ttyS1
se si guarda l'output di lspci qui sopra, il dispositivo pci "00:1e.0" è un bridge PCI al controller della scheda ("15:00.0"), perciò ttyS1 è un dispositivo PC Card.
- pci0000:00/0000:00:03.3/tty:ttyS0
- il device ttyS0 è collegato direttamente al bus PCI, in base al nome del dispositivo PCI si può presumere che non sia un modem, quindi è probabilmente un'interfaccia seriale integrata.
- ttyUSB0/tty:ttyUSB0
se si guarda l'output di lspci qui sopra, il dispositivo pci "00:1a.0" è un controller USB, perciò ttyUSB1 è un dispositivo USB (adattatore USB a seriale o modem).
altri esempi: thinkpad-a22-find-sysfs.txt
parole chiave: UART ; 8250 , 16550 ; 16450 ; RS232 ; RS-232 ; DB-9 ; DB9 ; DB25 ; UART ; Serial ; ttyS0 ; ttyS1 ; ttyS3 ; ttyS4 ;COM1 ; COM2 ; Com Port