Navigation Chart

Main Navigation

Page Content

The Portable Driver Architecture


The Portable Driver Architecture (PDA) is a microdriver library which enables programming of drivers for PCI devices in user space. It is also optimized for high-throughput and low-latency scenarios. Currently, the PDA supports the following aspects of PCI driver programming:

  • Interrupting
    • INTx
    • MSI
  • Basic Address Registers (BARs)
    • Direct access
    • Protected access
    • Optimized memcpy routines
  • Direct Memory Access (DMA)
    • Persistent memory allocation of large buffers
    • Userspace buffer registration
    • DMA buffer sharing
    • Scatter/Gather lists
    • IOMMU protection and consecutive mapping
    • Wrap mapping
    • NUMA control
  • Device Management
    • Device Query
      • Config space query (Bus IDs etc.)
      • Lookup of maximum payload and read request size
    • Managed Unprivileged User access
    • Basic hot-plug support


The main paradigm of microdrivers is, that as most as possible runs in user space. The PDA Linux kernel adapter has only ~1000 lines of code, which are easily maintainable. The PDA is therefore compatible to 30 revisions of the Linux Kernel (2.6.29 - 3.19).


Common Read Out Receiver Card (CRORC)

The CRORC will be used to readout the detector of the ALICE experiment. The related driver (librorc) is entirely PDA-Based.

First Level Interface Board (FLIB)

The FLIB is a prototype for a read-out device similar to the CRORC, for reading out the detectors at the CBM experiment. The FLIB driver is also completely ported to the PDA.

Related Publications

[4]   D. Eschweiler and V. Lindenstruth, “Drivers for Device to Device Streaming (accepted for publication),” in Proceedings of the Intl. Conference on Parallel Computing (ParCo), Edinburgh, Scotland, September 2015.

[3]   D. Eschweiler and V. Lindenstruth, “Efficient Management of Large DMA Memory Buffers in Microdrivers,” in Proceedings of the 20th IEEE International Conference on Parallel and Distributed Systems, ICPADS2014, IEEE. IEEE, 12 2014.

[2]    D. Eschweiler and V. Lindenstruth, “The Portable Driver Architecture,” in Proceedings of the 16th Real-Time Linux Workshop. Duesseldorf, Germany: Open Source Automation Development Lab (OSADL), October 2014.

[1]   A. Brinkmann and D. Eschweiler, “A Microdriver Architecture for Error Correcting Codes Inside the Linux Kernel,” in Proceedings of the ACM/IEEE Conference on Supercomputing (SC09). Portland, OR: ACM, 11 2009, pp. 1–10. [Online]. Available:


Dominic Eschweiler is the PDA maintainer.



To Navigation Chart

Bottom of Page