Dee*_*pak 51 linux serial-port
有没有什么端口监控工具可以监视写在端口上的数据包?我特别想检查我用 Java 编写的程序是否有效,所以我需要某种工具来查看我的小应用程序是否正在将消息写入端口。我该怎么做呢?
Ale*_*ies 44
socat是一种将(几乎)所有东西连接到(几乎)所有东西的工具,并且tee可以复制流。
在您的用例中,您可以将您的串行端口连接/dev/ttyS0到 PTY /tmp/ttyV0,然后将您的应用程序指向 PTY,并在tee某处输出 Input 和 Output 供您观察。
谷歌搜索“socat serial port pty tee debug”将指向几个“标准程序”示例,其中一个是:
socat /dev/ttyS0,raw,echo=0 \
SYSTEM:'tee in.txt |socat - "PTY,link=/tmp/ttyV0,raw,echo=0,waitslave" |tee out.txt'
Run Code Online (Sandbox Code Playgroud)
这些文件in.txt和out.txt随后将包含捕获的数据。
评论后更新:
interceptty2006 年的单一用途工具的语法稍微简单一些,但只能拦截 TTY(在代理 ioctls 时),并且可能不在您的包管理器中。(大多数 Linux 发行版从未将其添加到他们的存储库中)Gil*_*il' 21
我认为串行驱动程序没有任何跟踪功能可以让您查看数据包。您可以使用strace来观察应用程序中的所有读取和写入:
strace -s9999 -o myapp.strace -eread,write,ioctl ./myapp
Run Code Online (Sandbox Code Playgroud)
Sha*_*off 17
我找到了名为Linux Serial Sniffer、jpnevulator和Moni 的项目。前两个看起来就像他们做的正是你想要的。最后一个自称为监视器,但它实际上看起来像一个标准的串行通信程序。
interceptty 做那个工作:
interceptty /dev/ttyACM0 /dev/ttyDUMMY
Run Code Online (Sandbox Code Playgroud)
或者,使用漂亮的输出格式和配置后端设备,并使用行缓冲:
interceptty -s 'ispeed 19200 ospeed 19200' -l /dev/ttyACM0 /dev/ttyDUMMY | interceptty-nicedump
Run Code Online (Sandbox Code Playgroud)
然后与您的程序连接到/dev/ttyDUMMY.
感谢吉尔斯的回答!
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; };};'
Run Code Online (Sandbox Code Playgroud)
对不起,我会解释...
#!/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;
};
};
'
Run Code Online (Sandbox Code Playgroud)
ls -l /proc/[0-9]*/fd/* | grep ttyUSB0而不是lsof ttyUSB0因为我看到它们有时很慢。ttyUSB0tty${1:-USB0}将允许,用作脚本或函数,以串行设备名称作为参数运行它们:ttySniff USB0或ttySniff S0等等。unbackslash字符串记录在strace -s 9999.strace -e read的strace -e read,write或strace -e write根据您的需要。注意:我使用语法运行它们:
script -t ttySniff.log 2>ttySniff.tm -c "./ttySniff.sh USB0"
Run Code Online (Sandbox Code Playgroud)
所以我可以重播整个操作并跟踪计时执行。
| 归档时间: |
|
| 查看次数: |
210650 次 |
| 最近记录: |