it-swarm-id.com

Bagaimana saya bisa memonitor lalu lintas port serial?

Apakah ada alat pemantauan port untuk menonton paket yang ditulis di port? Saya terutama ingin memeriksa apakah program saya ditulis dalam Java bekerja jadi saya memerlukan beberapa alat untuk melihat apakah aplikasi kecil saya menulis pesan ke port. Bagaimana saya melakukan ini?

45
Deepak

Saya menemukan proyek yang bernama Linux Serial Sniffer , jpnevulator , dan Moni . Dua yang pertama terlihat seperti mereka melakukan apa yang Anda inginkan. Yang terakhir menyebut dirinya monitor, tetapi sebenarnya terlihat seperti program komunikasi serial standar.

17
Shawn J. Goff

socat adalah alat untuk menghubungkan (hampir) semuanya ke (hampir) semuanya, dan tee dapat menduplikasi aliran.
Di usecase Anda, Anda dapat menghubungkan port serial Anda /dev/ttyS0 ke PTY /tmp/ttyV0, lalu arahkan aplikasi Anda ke PTY, dan minta socat tee out Input dan Output di suatu tempat untuk Anda amati.

Googling "socat port serial pty tee debug" akan mengarahkan Anda ke beberapa contoh, salah satunya adalah:

socat /dev/ttyS0,raw,echo=0 \
SYSTEM:'tee in.txt |socat - "PTY,link=/tmp/ttyV0,raw,echo=0,waitslave" |tee out.txt'

File-file in.txt dan out.txt akan berisi data yang diambil.

Ini telah dikonfirmasi untuk berfungsi oleh komentator (@ogurets).

31
Alex Stragies

Saya tidak berpikir driver serial memiliki fungsi pelacakan yang akan memungkinkan Anda untuk menonton paket. Anda dapat menggunakan strace untuk mengamati semua bacaan dan tulisan dari aplikasi Anda:

strace -s9999 -o myapp.strace -eread,write,ioctl ./myapp

Inilah yang akhirnya saya pilih

Terima kasih kepada jawaban Gilles !

strace -s 9999 -e read -ffp $(sed '/ttyUSB0/s/^.*proc.\([0-9]\+\).fd.*/\1/p;d' <(ls -l /proc/[1-9]*/fd/* 2>/dev/null)) 2>&1 | Perl -e '$|=1;my %qa=('a'=>7,'b'=>10,'e'=>33,'f'=>14,'n'=>12,'r'=>15,'t'=>11);sub cnv { my $ch=$_[0];$ch=$qa[$1] if $ch=~/([abefnrt])/;return chr(oct($ch));  };while (<>) { /^read.\d+,\s+"(.*)",\s\d+.*$/ && do { $_=$1;s/\\(\d+|[abefnrt])/cnv($1)/eg;print; };};'

Maaf, saya akan jelaskan ...

#!/bin/bash

strace -s 9999 -e read -ffp $(
    sed "/tty${1:-USB0}/s/^.*proc.\([0-9]\+\).fd.*/\1/p;d" <(
        ls -l /proc/[1-9]*/fd/* 2>/dev/null
    )
) 2>&1 |
    Perl -e '
        $|=1;
        my %qa=('a'=>7,'b'=>10,'e'=>33,'f'=>14,'n'=>12,'r'=>15,'t'=>11);
        sub cnv {
            my $ch=$_[0];
            $ch=$qa[$1] if $ch=~/([abefnrt])/;
            return chr(oct($ch));
        };
        while (<>) {
            /^read.\d+,\s+"(.*)",\s\d+.*$/ && do {
                $_=$1;
                s/\\(\d+|[abefnrt])/cnv($1)/eg;
                print;
            };
        };
    '
  • Saya menggunakan ls -l /proc/[0-9]*/fd/* | grep ttyUSB0 dari pada lsof ttyUSB0 karena saya melihat mereka kadang-kadang lambat.
  • Jadi strace akan melacak program saat ini menggunakan ttyUSB0
  • Sintaks: tty${1:-USB0} akan mengizinkan, digunakan sebagai skrip atau fungsi, untuk menjalankannya dengan nama perangkat seri sebagai argumen: ttySniff USB0 atau ttySniff S0 dan seterusnya.
  • Script Perl akan unbackslash string dicatat oleh strace -s 9999.
  • Anda bisa mengganti strace -e read oleh strace -e read,write atau strace -e write tergantung pada kebutuhan Anda.

Catatan: Saya menjalankannya dengan menggunakan sintaks:

 script -t ttySniff.log 2>ttySniff.tm -c "./ttySniff.sh USB0"

jadi saya bisa memutar ulang seluruh operasi dan melacak eksekusi waktu.

5
F. Hauri

interceptty melakukan pekerjaan itu:

interceptty /dev/ttyACM0 /dev/ttyDUMMY

atau, dengan format output yang bagus dan dengan mengonfigurasi perangkat backend, dan dengan penyangga garis:

interceptty -s 'ispeed 19200 ospeed 19200' -l /dev/ttyACM0 /dev/ttyDUMMY | interceptty-nicedump

dan kemudian terhubung dengan program Anda ke /dev/ttyDUMMY.

5
Golar Ramblar

Ketika saya men-debug interaksi aplikasi saya dengan port serial, saya menggunakan moserial .

3
Renat Zaripov

Coba ini:

screen /dev/tty.usbserial-blahblah 9600

bekerja untukku.

3
Mike

minicom tidak ada dalam daftar alat untuk memonitor port serial. Gunakan itu sebagai contoh untuk mendengarkan perangkat Arduino:

minicom --device /dev/ttyACM0 --baud 9600

2
B.Kocis

Lihat ttyUSBSpy . Ini pada tahap alfa, tetapi berhasil.

1
user37414
0
Antonio Petricca