读取VirtualBox使用的端口的原始USB数据

时间:2017-01-17 17:58:11

标签: linux serial-port usb virtualbox

我有用于与仅在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 :-)

1 个答案:

答案 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' ''