我有用于与仅在Windows 7上运行的串行设备进行通信的软件。我的主机运行的是Ubuntu 16.04,在虚拟机中安装了Windows 7。
我已经设法使用VirtualBox设置中的USB设备过滤器进行设置,以便Windows看到并可以与设备通信。
但是,我想捕获发送到设备和从设备发送的内容。我认为像cat /dev/ttyUSB0
这样简单的东西会起作用,但不幸的是,当我启动VirtualBox时,我会在dmesg中得到这个:
[31199.465270] vboxdrv: ffffffffc0df4020 VMMR0.r0
[31199.653494] vboxdrv: ffffffffc0ef7020 VBoxDDR0.r0
[31199.710573] VBoxNetFlt: attached to 'wlp1s0' / 98:54:1b:04:13:48
[31199.863579] ftdi_sio ttyUSB0: FTDI USB Serial Device converter now disconnected from ttyUSB0
[31199.863674] ftdi_sio 1-3:1.0: device disconnected
所以我不知道要在/dev
中监控哪个文件。我想我可能会尝试从Windows收听通信,但如果可以,我想知道是否可以从我的主机监听它。
编辑: This回答帮助了我一个开始。我现在在终端上看到一些很酷的流,下一步是解密它,或者如果有人有更好的方式我感兴趣 - 看起来回答这个问题的人仍然将其解读为TODO :-)
答案 0 :(得分:1)
它与VirtualBox中的软件通信这一事实并不重要。 This回答让我大部分时间(以root身份):
modprobe usbmon
cat /sys/kernel/debug/usb/devices|less
并搜索设备cat /sys/kernel/debug/usb/usbmon/7u
其中7是来自步骤2的设备表中“Bus =”的数字从那里只是过滤输出。
基本方法可能只是
cat /sys/kernel/debug/usb/usbmon/1u |cut -d\ -f9- | grep ^\n
但我正在使用的设备是不断发送只有4个字符的行,以过滤掉我从输出行获得address word的那些行,然后为此而烦恼。在我的情况下,我只想捕获“C”或回调输出。我还过滤了不仅包含设备不断输出的默认“0160”的行。为了尝试理解十六进制输出,我在最后放了一个xxd -r -p
给了我:
cat /sys/kernel/debug/usb/usbmon/1u | grep -e 'C Bi:1:005:1\s0\s\w*\s=\s0160\w' | cut -d\ -f8- | xxd -r
grep在哪里
grep -e 'C <address> <someotherstuff> = <always-output-string><anycharacter>
这仍然给了我下面这个难以理解的垃圾,但我不知道格式,所以我被困在这里。也许阅读和过滤的步骤对某人有用
&GT; O UDQN RG_JAMS142EDEFAULT0XXXXXXX lSTz: RSDU vy z fff= { 6zC“zÐu6zCzH ; C Af[ RSC bISD EGIN CG_IEW0321:0407JUN12SZ - $ '' $ '' 'C' ''