![以十六进制形式查看控制台中的串行设备输出](https://linux22.com/image/1581893/%E4%BB%A5%E5%8D%81%E5%85%AD%E8%BF%9B%E5%88%B6%E5%BD%A2%E5%BC%8F%E6%9F%A5%E7%9C%8B%E6%8E%A7%E5%88%B6%E5%8F%B0%E4%B8%AD%E7%9A%84%E4%B8%B2%E8%A1%8C%E8%AE%BE%E5%A4%87%E8%BE%93%E5%87%BA.png)
我可以通过以下两个命令将串行设备输出转换为十六进制格式:
cat /dev/ttyUSB0 > data.dump #send some data to serial device, and interrupt cat using Ctrl+C after some time
xxd data.dump
它给出如下输出:
00000000: 80ff ffff ffff ffff ffff ffff ffff ..............
但是我想通过一个命令来完成此操作以查看实时数据流,但这两个命令对我来说都不起作用:
cat /dev/ttyUSB0 | xxd
xxd /dev/ttyUSB0
hexdump /dev/ttyUSB0
这些命令根本没有输出,这是什么问题?我正在使用zsh
shell,并在 Fedora OS 上工作。
答案1
不幸的是,从 /dev/ttyUSB0 读取并不那么简单。这Unix & Linux SE 网站上的解决方案对我来说效果最好。
stty -F /dev/ttyUSB0 115200 raw -echo #CONFIGURE SERIAL PORT
exec 3</dev/ttyUSB0 #REDIRECT SERIAL OUTPUT TO FD 3
cat <&3 > /tmp/ttyDump.dat & #REDIRECT SERIAL OUTPUT TO FILE
PID=$! #SAVE PID TO KILL CAT
echo "R" > /dev/ttyUSB0 #SEND COMMAND STRING TO SERIAL PORT
sleep 0.2s #WAIT FOR RESPONSE
kill $PID #KILL CAT PROCESS
wait $PID 2>/dev/null #SUPRESS "Terminated" output
exec 3<&- #FREE FD 3
cat /tmp/ttyDump.dat #DUMP CAPTURED DATA