BeagleBoard/GSoC/2010 Projects/USBSniffer

< BeagleBoard‎ | GSoC‎ | 2010 Projects
Revision as of 03:55, 2 July 2010 by Drinkcat (talk | contribs) (Tested devices)
Jump to: navigation, search

Google Summer of Code 2010 Project

  • Student: Nicolas Boichat
  • Mentors: Hunyue Yau, Laine Walker-Avina, Frans Meulenbroeks

BeagleBoard project: usbsniffer

Project at

Blog: (RSS)


The goal of this project is to use the BeagleBoard as an USB sniffer. The host computer would be connected to the slave USB port of the BeagleBoard, and the device to be sniffed on the host USB port.

The BeagleBoard would then forward USB data, while logging it.

This presents the following advantages over a software-based solution: No software modification is required; support of proprietary OSes; allows debugging of new USB stacks; and possibly lower-level debugging of USB frames...

Build and run instructions

To get the proxy driver to work, you need to follow these steps:

  • Clone my kernel git tree. Use the stable-20100702 branch.
  • Compile the kernel with the default beagleboard configuration (see BeagleBoard#Linux_kernel). You just need to add CONFIG_USB_G_PROXY=m. I also disabled MUSB in host and OTG mode, as well as USB suspend, but this may not be necessary.
  • Install the new kernel on the board.
  • Clone the helper scripts git tree, and copy the content of the arm directory to the BeagleBoard (you need to modify load/setup scripts if you do not have have a copy of musb_hdrc.ko and g_proxy.ko in the same directory).
  • Run ./setup on the BeagleBoard, this will unload the g_ether gadget driver.
  • Plug your device (through a USB hub if it is a low/full-speed device).
  • Plug your PC to the BeagleBoard USB slave port (this can be done earlier as well).
  • Run ./unbind: This will unbind the device from the normal Linux driver.
  • Run ./load: this will (re)load the g_proxy driver.
  • Use the device, it should work.

Tested devices

Device USB ID Speed Endpoints & types Status Branch Notes
Logitech (M-BJ58/M-BJ69) Optical Wheel Mouse 046d:c00e/046d:c018 LS
  • EP1 IN, interrupt
OK >=stable-20100618
Logitech Internet Keyboard 046d:c309 LS
  • EP1 IN, interrupt (keyboard itself)
  • EP2 IN, interrupt (wheel on the side, like a mouse)
OK stable-20100618
FTDI FT232 USB-Serial (on Arduino) 0403:6001 FS
  • EP1 IN, bulk (Arduino->host)
  • EP2 OUT, bulk (host->Arduino)
OK >=stable-20100618 Programming + bidirectional serial communication
CSR Bluetooth Dongle 0a12:0001 FS
  • EP1 IN, interrupt
  • EP2 IN, bulk
  • EP2 OUT, bulk
  • EP3 IN, iso
  • EP3 OUT, iso
Partial >=stable-20100618 Scanning devices work (hcitool -i hci1 scan), haven't tried anything more.
Imation 4GB Flash Drive 0718:0348 HS
  • EP1 OUT, bulk
  • EP2 IN, bulk
  • EP3 IN, interrupt
OK stable-20100702 Works hdparm -t --direct /dev/sdX. On PC: 19.76 MB/sec; on BeagleBoard: 17.64 MB/sec; on PC through the BeagleBoard proxy: 19.18 MB/sec.
AVerMedia Volar DVB-T dongle 07ca:b808 HS
  • EP1 OUT, bulk
  • EP1 IN, bulk
  • EP2 IN, bulk
  • EP3 IN, bulk
OK >=stable-20100618 No visible problem.
Logitech, Inc. QuickCam Messanger (sic) 046d:08da FS
  • EP1 IN, isochronous (video)
  • EP2 IN, interrupt (button status)
  • EP3 IN, isochronous (audio)
(but needs some hacks)
(audio+video at the same time doesn't work)
stable-20100702 No visible problem (video 640x480 OR audio), but needs some hacks: musb_hdrc parameters: fifo_mode=6 use_dma=0, the FIFO mode is required, because EP1 needs 768 bytes per packet (and the default is only 512). The DMA doesn't handle short ISO packets properly, so it has to be disabled.

Enabling both video + audio at the same time doesn't work (bandwidth allocation problem, but this may be a USB hub problem).