Virtualization: Writing (and testing) device drivers without hardware

Session information has not yet been published for this event.

Scheduled: Thursday, September 8, 2011 from 2:50 – 3:40pm in Alexander Valley Ball Room

One Line Summary

How to use QEMU to develop future hardware models to develop and test device drivers before hardware is available.


As devices become more complex, it becomes more difficult to design and develop quality device drivers before hardware is available. Without knowing how certain feature sets of the hardware interact with one another, a driver developer is left with a best-guess effort when designing and building the driver. This can lead to mountains of untested code being developed, potentially wasting large amounts of time debugging and rewriting once hardware is available.

This presentation will showcase how easy it is to build a hardware model inside of QEMU to aid in fast development and testing of a device driver. If the developer is armed with a hardware specification, that’s all they need to build the hardware model. Also, certain debugging techniques are available in QEMU that aren’t with hardware, such as dummy registers to change hardware behavior on the fly, allowing easy error injection for a driver to handle.

Building a model inside QEMU also harnesses the power of virtualization, allowing this single model to be used with multiple Virtual Machines, such as a Linux VM, Windows VM, and FreeBSD VM. For product-based groups, this means multiple OS drivers can be designed, developed, and tested, well ahead of hardware arrival.

In addition, this presentation will highlight areas of device simulation we hope can be expanded inside QEMU to allow more complex emulation models. This includes embedded firmware engines inside a device, or even running silicon RTL inside of QEMU. With these types of innovations, QEMU may be used to replace costly FPGA’s for product groups running on thin cost margins.


networking, virtualization, qemu, kvm, drivers, hardware

Presentation Materials



  • Biography

    Shannon Nelson is currently a Network Software Engineer for Intel, writing and supporting Linux drivers for the wired networking devices. In the past he’s worked in factory automation, telecommunications, and super computers. He also plays bass guitar, sings occasionally, and drives a fine British automobile.

  • Biography

    Peter (PJ) is a senior software engineer in the LAN Access Division at Intel. He is responsible for supporting the new technologies in Intel’s next generation LAN products both in silicon and updating the Linux kernel. He recently was the primary maintainer for the ixgbe driver, Intel’s 10 GbE PCI Express device, and is now focused on 40 Gigabit Ethernet research. His contributions to the kernel include the original Tx multiqueue networking API, packet socket changes allowing channel bonding to work with layer 2 protocols on individual adapters, multiple fixes to the MSI-X interrupt layer, interrupt affinity control from drivers, native Data Center Bridging support in the network stack, and n-tuple filter offload support in ethtool.