GNU/Linux >> Znalost Linux >  >> Linux

Jak zjistit, který sériový port se používá?

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!


Linux
  1. Jak používat FIND v Linuxu

  2. Jak používat příkaz Grep k vyhledání textu v souborech

  3. Jak používat `který` u aliasovaného příkazu?

  1. Jak používat Linuxový příkaz find k hledání souborů

  2. Shell - Jak najít adresář nějakého příkazu?

  3. Jak zjistím, který /dev/ttyS* je můj sériový port?

  1. Jak najít modul jádra pro dané zařízení?

  2. Linux – Jak najít procesy pomocí sériového portu?

  3. Jak používat Chromecast?