Hangi seri portun kullanımda olduğu nasıl bulunur?


33

Soru:

Bir cihaza (örn. GSM modem) bir seri port (aka RS-232) /dev/üzerinden bağladım ve onunla iletişim kurabilmek için bu cihazın hangi dosyaya bağlı olduğunu görmem gerekiyor. Maalesef çıktıda /dev/hiçbir şey görülemeyen yeni oluşturulan bir dosya yoktur dmesg. Yani bu zor bir soru gibi görünüyor.

Arka fon:

Daha önce hiç bir seri cihazla çalışmadım, bu yüzden dün, bir ihtiyaç göründüğünde, Google’a denedim, ancak yararlı bir şey bulamadım. Aramak için birkaç saat harcadım ve bulduğu bir cevabı birisinin yararına olabileceği için paylaşmak istiyorum.


1
Bir cihazı algılamak için bu bitleri kullanmayı seviyorum - Muhtemelen bunu kullanacağım, ancak yalnızca Tx / Rx pinlerini kullanan birçok aygıtım olsa da, muhtemelen bunun için CTS hattını tutmak için onları kesebilirim.
Danny Staple

Yanıtlar:


34

Ne yazık ki seri bağlantı noktaları PlugNPlay değildir, bu nedenle çekirdek hangi cihazın takılı olduğunu bilmez. Bir HowTo eğitimini okuduktan sonra çalışma fikrini aldım.

/dev/İşletim sistemleri gibi unix dizin olarak adlandırılan dosyaları içeren ttySn (bir sayı olmak n) . Çoğu mevcut cihazlarla uyuşmuyor. Hangilerinin yaptığını bulmak için bir komut verin:

$ 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

Yukarıdaki, bilgisayarımın örnek bir çıktısıdır. Birkaç seri portun başlatıldığını görebilirsiniz:

ttyS0, ttyS1, ttyS4, ttyS5.

Bunlardan biri takılı bir cihaza pozitif voltaj verecek . Böylece, dosya içeriğini /proc/tty/driver/serialcihaza takılı olan ve olmayanlar ile karşılaştırarak cihazımızla ilgili ttyS'leri kolayca bulabiliriz . Öyleyse şimdi yapın:

$ sudo cat /proc/tty/driver/serial> /tmp/1

(un) bir cihazı takın

$ sudo cat /proc/tty/driver/serial> /tmp/2

Sonra iki dosya arasındaki farkı kontrol edin. Aşağıda bilgisayarımın bir çıktısı var:

$ 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

Üç sayıyı dmesg çıktısıyla karşılaştırarak hangisinin bağlantı noktası olduğunu belirleyebiliriz:

[    0.872181] 00:06: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A

Dolayısıyla cihazımız /dev/ttyS0görev tamamlandı!


1
Dmesg çıkışında herhangi bir cihaz görmezsem ne olur?
user3019105

2
@ user3019105 üzgünüm, böyle bir sorunla karşılaşmadım. Anladığım kadarıyla, seri cihaza irqdmesg atama konusunda bir mesaj olmalı . Olmazsa, donanımsal bir problem olduğunu varsayardım. Bu sadece bir varsayım ve yanlış olabilir, ancak böyle bir problemi ayıklarsam, seri portun başlatılması gerektiği düşüncesiyle araştırmaya başlardım.
Hi-Angel,

1
Makineden makineye geçtiğimden bu makinenin seri portlarını gösterecek bir takma ad tanımladım. Sistem sistemli Ubuntu aile sistemlerinde çalışır. takma portları = 'udevadm bilgi --export-db | grep -i "^ n: ttyu"'
DDay
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.