Otázka:
Připojil jsem zařízení (tj. GSM modem) přes sériový port (také znám jako RS-232) a potřebuji zjistit, se kterým souborem v /dev/
souborový systém toto zařízení bylo svázáno, aby s ním mohlo komunikovat. Bohužel v /dev/
není žádný nově vytvořený soubor ani v dmesg
není nic vidět výstup. Zdá se tedy, že je to těžká otázka.
Pozadí:
Nikdy jsem nepracoval se sériovým zařízením, takže včera, když se objevila potřeba, jsem to zkusil na Googlu, ale nenašel jsem nic užitečného. Strávil jsem pár hodin hledáním a chci se podělit o nalezenou odpověď, protože by mohla být pro někoho užitečná.
Přijatá odpověď:
Bohužel sériové porty nejsou PlugNPlay, takže jádro neví, které zařízení bylo připojeno. Po přečtení Jak na to tutoriál Mám pracovní nápad.
/dev/
adresář unix like OSes obsahuje soubory pojmenované jako ttySn (přičemž n je číslo) . Většina z nich neodpovídá stávajícím zařízením. Chcete-li zjistit, které ano, zadejte příkaz:
$ 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
Výše je příklad výstupu mého PC. Můžete vidět inicializaci několika sériových portů:
ttyS0
, ttyS1
, ttyS4
, ttyS5
.
Jeden z nich bude mít kladné napětí na připojeném zařízení. Takže porovnáním obsahu souboru /proc/tty/driver/serial
s připojeným zařízením i bez něj můžeme snadno najít ttyS související s naším zařízením. Takže teď udělejte:
$ sudo cat /proc/tty/driver/serial> /tmp/1
(od)zapojení zařízení
$ sudo cat /proc/tty/driver/serial> /tmp/2
Dále zkontrolujte rozdíl mezi těmito dvěma soubory. Níže je výstup mého PC:
$ 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
Porovnáním těchto tří čísel s výstupem dmesg můžeme určit, které z nich je port:
[ 0.872181] 00:06: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
Naše zařízení je tedy /dev/ttyS0
, mise splněna!