W systemie Linux chcę wysłać ciąg komend (tj. Niektóre dane) do portu szeregowego (zawierającego znaki sterujące) i wysłuchać odpowiedzi (która zwykle może również zawierać znaki sterujące).
Jak mogę to zrobić tak prosto, jak to możliwe w systemie Linux? Przykład jest doceniany!
serial-port
Alex
źródło
źródło
Odpowiedzi:
Wszystkie urządzenia w systemie Unix są mapowane na plik urządzenia, porty szeregowe to
/dev/ttyS0
/dev/ttyS1
...Najpierw spójrz na uprawnienia do tego pliku, załóżmy, że używasz
/dev/ttyS1
.ls -l /dev/ttyS1
Będziesz potrzebował dostępu do odczytu i zapisu, jeśli jest to system współdzielony, powinieneś rozważyć konsekwencje bezpieczeństwa otwarcia go dla wszystkich.
Bardzo prosta, prymitywna metoda zapisu do pliku, używa prostej
echo
komendy.i czytać
Możesz mieć kota biegającego w jednym terminalu, a echo w drugim.
Jeśli wszystko jest bełkotliwe, a następnie szybkość transmisji, ustawienia bitów mogą wymagać ustawienia przed rozpoczęciem wysyłania.
stty
zrobi to. !! UWAGA stty użyje stdin jako domyślnego deskryptora pliku.Równoważne polecenia.
To może wystarczyć, aby coś napisać i zalogować? Nie jestem pewien, co próbujesz osiągnąć.
Dla bardziej interaktywnego, pamięta, że twoim domyślnym podejściem do ustawień byłoby użycie
minicom
go, to po prostu program, który robi wszystko, o czym wspomniałem do tej pory. (podobny do hiperterminalnego w systemie Windows, być może znasz).Pośrednim rozwiązaniem byłoby użycie programu terminalowego,
screen
który działałby na urządzeniu szeregowym.man screen
man minicom
man stty
po więcej informacjiźródło
# stty -speed 38400 -f /dev/ttyUSB1
zwrotystty: invalid argument '-speed'
Wszystko, co musisz zrobić, to otworzyć dwa terminale. W pierwszym terminalu masz
cat
wszystko z urządzenia, npw drugim terminalu możesz wysyłać dowolne znaki szesnastkowe i tekst do terminala, np. w następujący sposób:
echo -e
Komenda umożliwia interpretację ucieczek backslash.Należy oczywiście upewnić się, że (i) ustawienia szeregowe (prędkość, długość słowa, przepływ ctrl itp.) Są prawidłowe i (ii) urządzenie szeregowe (na drugim końcu) nie blokuje się.
źródło
Programy komunikujące się z urządzeniami szeregowymi:
lub z powłoki możesz zrobić:
źródło
exec 99<&-
czyexec 99>&-
powinien być stosowany. A może jedno i drugie?Może to być lepsze podejście:
źródło
Możesz czytać i pisać na urządzeniu jednocześnie:
Twoja wiadomość jest wysyłana do drugiego
cat
zstdin
, a pierwszycat
przekazuje odpowiedźstdout
, zamieniając terminal w pokój rozmów.Aby dokończyć,
ctrl-c
, a następnie uruchomićfg
następniectrl-c
ponownie.źródło