Niestety porty szeregowe nie obsługują PlugNPlay, więc jądro nie wie, które urządzenie zostało podłączone. Po przeczytaniu samouczka HowTo wpadłem na pomysł.
/dev/
Katalog UNIX jak poniekąd zawiera pliki o nazwach jak ttySn (gdzie n jest liczbą) . Większość z nich nie odpowiada istniejącym urządzeniom. Aby dowiedzieć się, które z nich działają, wydaj polecenie:
$ dmesg | grep ttyS
[ 0.872181] 00:06: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[ 0.892626] 00:07: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A
[ 0.915797] 0000:01:01.0: ttyS4 at I/O 0x9800 (irq = 19) is a ST16650V2
[ 0.936942] 0000:01:01.1: ttyS5 at I/O 0x9c00 (irq = 18) is a ST16650V2
Powyżej znajduje się przykładowe wyjście mojego komputera. Możesz zobaczyć inicjalizację kilku portów szeregowych:
ttyS0
, ttyS1
, ttyS4
, ttyS5
.
Jedno z nich będzie miało dodatnie napięcie na podłączonym urządzeniu. Więc porównując zawartość pliku /proc/tty/driver/serial
z podłączonym urządzeniem i bez niego, możemy łatwo znaleźć ttyS związane z naszym urządzeniem. Więc teraz:
$ sudo cat /proc/tty/driver/serial> /tmp/1
(od) podłącz urządzenie
$ sudo cat /proc/tty/driver/serial> /tmp/2
Następnie sprawdź różnicę między dwoma plikami. Poniżej znajduje się wyjście mojego komputera:
$ diff /tmp/1 /tmp/2
2c2
< 0: uart:16550A port:000003F8 irq:4 tx:6 rx:0
---
> 0: uart:16550A port:000003F8 irq:4 tx:6 rx:0 CTS|DSR
Porównując trzy liczby z wyjściem dmesg, możemy ustalić, który z nich jest portem:
[ 0.872181] 00:06: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
Dlatego nasze urządzenie jest /dev/ttyS0
, misja zrealizowana!