Translation(s): English - Italiano - Русский

(!) ?Discussion

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:

Oppure può essere "integrata" in un altro dispositivo, come:

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