Linux USB drivers reverse-engineering

Developer Ben Cox sets out to get old VGA capture cards working on a modern Linux build. Interesting read for people interested in Linux, USB and video technology. reports:

Ben Cox Revives Epiphan’s VGA Capture Cards with Custom Reverse-Engineered Linux Driver

Having picked up a bulk supply of VGA capture cards for pennies on the dollar, Cox sets out to get them working.. Here is developer blog post:

Writing userspace USB drivers for abandoned devices

To get information what goes on UBS bus, the developer loaded the usbmon module on the VM’s host machine and used Wireshark to take a packet capture of the USB traffic to and from the device during startup and whilst capturing video. Both tshark and tcpdump can read USB packets inside pcap files. The developer also used NSA’s Ghidra to get an idea of what was going on inside of the real driver.




You can find the code for this driver (and pre-built versions for Linux and OSX) on github:


  1. Tomi Engdahl says:

    VGA Signal In A Browser Window, Thanks To Reverse Engineering

    [Ben Cox] found some interesting USB devices on eBay. The Epiphan VGA2USB LR accepts VGA video on one end and presents it as a USB webcam-like video signal on the other. Never have to haul a VGA monitor out again? Sounds good to us! The devices are old and abandoned hardware, but they do claim Linux support

    But when they did arrive, the devices didn’t enumerate as a USB UVC video device as expected. The vendor has a custom driver, support for which ended in Linux 4.9

    By now [Ben] was curious about how all this worked and began digging, aiming to create a userspace driver for the device. He was successful, and with his usual detail [Ben] explains not only the process he followed to troubleshoot the problem but also how these devices (and his driver) work

    Writing userspace USB drivers for abandoned devices

  2. Tomi Engdahl says:

    A userspace driver implementation of the Epiphan VGA2USB LR


Leave a Comment

Your email address will not be published. Required fields are marked *