2012-10-04 11 views
7

Mam zamiar napisać program w C, który ma zamiar otworzyć połączenie przez port szeregowy, i "słuchać" dla przychodzących poleceń, wtedy zajmie trochę akcji i zgłosi stan.Skąd wiadomo, który port szeregowy ma być używany w systemie Linux?

Połączenie będzie za pośrednictwem RS232 (port szeregowy) i próbuję zrozumieć, jak sprawdzić, który port otworzyć.

Kiedy używam Windowsa, jeśli podłączę swoje urządzenie USB-Serial, widzę "Prolific USB-to-Serial Comm Port (COM4)" pojawia się w menadżerze urządzeń ... ale po stronie Linuxa nie mam zobacz wszelkie zmiany w obszarze lub /dev, widzę cały czas obecny (zakładam, że S oznacza serial na podstawie what I've read).

Skąd mam wiedzieć, z którym się połączyć?

EDIT
Chociaż ja rozwija to na OpenSUSE 12.1 polu jądra (3.1), ostateczny program zostanie uruchomiony na uCLinux na pokładzie działa jądro 2.4Linux, więc szukam czyste rozwiązania, które będzie działać na starszych jąder

FYI C: systemu /sys plików jak wskazano w odpowiedzi na this post nie istnieje, dopóki jądro 2.6 i moje ograniczenia zmuszają mnie trzymać się rzeczy dostępnych w jądrze 2.4.

+1

Prawdopodobnie twój adapter portu szeregowego USB pojawi się jako '/ dev/ttyUSB0 '. Sprawdź również (to pytanie) (http://stackoverflow.com/questions/2530096/), jeśli potrzebujesz sposobu na wyliczenie portów szeregowych. –

+0

pyserial może być pomocna tutaj. – Prasanth

+0

@PhilippeGauthier - Byłoby to bardzo niefortunne, biorąc pod uwagę, że nie będę wiedział, czy użytkownik będzie używał kabla usb-> serial, czy prostego kabla szeregowego. :( – Mike

Odpowiedz

3

Polecenie dmesg wyświetli komunikat jądra, gdy moduł zostanie podłączony, co spowoduje podanie jego nazwy urządzenia.

System plików /proc jest jak menedżer urządzeń w oknach - gdzieś tam będzie lista urządzeń tty

+1

Wygląda na to, że czytanie dmesg będzie działało dobrze:' [827.528859] Konwerter USB 2-2: pl2303 jest teraz podłączony do ttyUSB0' Tak więc widzę swoje urządzenie na/dev/ttyUSB0, dziękuję! – Mike

1

Dwie rzeczy, których użyłem: (a) poszukaj linii kontrolnych (DTR, DSR, itp.) I (b) otwórz "wszystkie" portów i sprawdź, które z nich wydają się być aktywne. W tym drugim przypadku pomaga, jeśli możesz wysłać wiadomość do urządzenia szeregowego i odpowiedzieć; to oczywiście działa tylko wtedy, gdy urządzenie odpowie na wiadomość.

0

Wyjazd /proc/tty/driver/serial - powinieneś zobaczyć UART jak 16550A zamiast unknown i rx powinna być> 0 dla istniejących portów. Jeśli musisz zgadnąć, który port zostanie użyty, otwórz wszystkie dostępne porty. Następnie musisz skonfigurować port dla swoich potrzeb (szybkość transmisji, parzystość, bity itp.) Lub spróbować odgadnąć przychodzącą prędkość transmisji itp.

+1

A także sprawdź '/ proc/tty/driver/usbserial'. – sawdust

Powiązane problemy