[[!meta copyright="Copyright © 2009, 2011 Free Software Foundation, Inc."]]
[[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable
id="license" text="Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation License, Version 1.2 or
any later version published by the Free Software Foundation; with no Invariant
Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license
is included in the section entitled [[GNU Free Documentation
License|/fdl]]."]]"""]]
[[!tag open_issue_gnumach open_issue_hurd]]
This is a collection of resources concerning *user-space device drivers*.
Also see [[device drivers and IO systems]].
[[community/gsoc/project ideas/driver glue code]].
[[!toc levels=2]]
# Issues
## IRQs
* Can be modeled using [[RPC]]s.
* Security considerations: IRQ sharing.
* *Omega0* paper defines an interface.
* As is can be read in the *Mach 3 Kernel Principles*, there is an *event
object* facility in Mach that can be used for having user-space tasks react
to IRQs. However, at least in GNU Mach, that code (`kern/eventcount.c`)
doesn't seem functional at all and isn't integrated properly in the kernel.
* IRC, freenode, #hurd, 2011-07-29
< antrik> regarding performance of userspace drivers, there is one
thing that really adds considerable overhead: interrupt
handling. whether this is relevant very much depends on the hardware
in question. when sending many small packets over gigabit ethernet,
it might be noticable; in most other cases it's irrelevant
< youpi> some cards support interrupt coalescin
< youpi> could be supported by DDE too
## DMA
* Security considerations.
* I/O MMU.
## I/O Ports
* Security considerations.
## PCI and other buses
* Security considerations: sharing.
## Latency of doing RPCs
* [[GNU Mach|microkernel/mach/gnumach]] is said to have a high overhead when
doing RPC calls.
## System Boot
IRC, freenode, #hurd, 2011-07-27
< braunr> btw, was there any formulation of the modifications required to
have disk drivers in userspace ?
< braunr> (which would obviously need something like
initrd/initramfs/whatever and may also need the root file system not to
be the first task started)
< braunr> hm actually, we may not need initrd
< braunr> the boot loader could just load more modules
< antrik> braunr: I have described all that in my thesis report... in
German :-(
< braunr> and the boot scripts could be adjusted to pass around the right
ports
< Tekk_> braunr: yeah, we could probably load a module that kciks us into
userspace and starts the disk driver
< braunr> modules are actualy userspace executables
< Tekk_> ah
< Tekk_> so what's the issue?
< Tekk_> oh! I'm thinking the ext2fs server, which is already in userspce
< braunr> change the file systems to tell them which underlying disk driver
to use
< Tekk_> mhm
< braunr> s/disk/storage/
# Plan
* Examine what other systems are doing.
* L4
* Hurd on L4: deva, fabrica
* [[/DDE]]
* Minix 3
* Start with a simple driver and implement the needed infrastructure (see
*Issues* above) as needed.
*
Some (unfinished?) code written by Robert Millan in 2003: PC keyboard
and parallel port drivers, using `libtrivfs`.
# Documentation
* [An Architecture for Device Drivers Executing as User-Level
Tasks](http://portal.acm.org/citation.cfm?id=665603), 1993, David B. Golub,
Guy G. Sotomayor, Freeman L. Rawson, III
* [Performance Measurements of the Multimedia Testbed on Mach 3.0: Experience
Writing Real-Time Device Drivers, Servers, and
Applications](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.40.8685),
1993, Roger B. Dannenberg, David B. Anderson, Tom Neuendorffer, Dean
Rubine, Jim Zelenka
* [User Level IPC and Device Management in the Raven
Kernel](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.57.3733),
1993, D. Stuart Ritchie, Gerald W. Neufeld
* [Creating User-Mode Device Drivers with a
Proxy](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.26.3055),
1997, Galen C. Hunt
* [The APIC Approach to High Performance Network Interface Design: Protected
DMA and Other
Techniques](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.56.1198),
1997, Zubin D. Dittia, Guru M. Parulkar, Jerome R. Cox, Jr.
* [The Fluke Device Driver
Framework](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.4.7927),
1999, Kevin Thomas Van Maren
* [Omega0: A portable interface to interrupt hardware for L4
system](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.21.5958),
2000, Jork Löser, Michael Hohmuth
* [Userdev: A Framework For User Level Device Drivers In
Linux](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.3.4461),
2000, Hari Krishna Vemuri
* [User Mode Drivers](http://www.linuxjournal.com/article/5442), 2002, Bryce
Nakatani
* [Towards Untrusted Device
Drivers](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.13.1725),
2003, Ben Leslie, Gernot Heiser
* [Encapsulated User-Level Device Drivers in the Mungi Operating
System](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.6.1531),
2004, Ben Leslie Nicholas, Nicholas FitzRoy-Dale, Gernot Heiser
* [Linux Kernel Infrastructure for User-Level Device
Drivers](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.10.1408),
2004, Peter Chubb
* [Get More Device Drivers out of the
Kernel!](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.59.6333),
2004, Peter Chubb
*
* [Initial Evaluation of a User-Level Device
Driver](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.59.4531),
2004, Kevin Elphinstone, Stefan Götz
* [User-level Device Drivers: Achieved
Performance](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.59.6766),
2005, Ben Leslie, Peter Chubb, Nicholas FitzRoy-Dale, Stefan Götz, Charles
Gray, Luke Macpherson, Daniel Potts, Yueting Shen, Kevin Elphinstone,
Gernot Heiser
* [Virtualising
PCI](http://www.ice.gelato.org/about/oct06_presentations.php#pres14), 2006,
Myrto Zehnder, Peter Chubb
* [Microdrivers: A New Architecture for Device
Drivers](http://www.cs.rutgers.edu/~vinodg/papers/hotos2007/), 2007, Vinod
Ganapathy, Arini Balakrishnan, Michael M. Swift, Somesh Jha
*
[[!tag open_issue_documentation]]
*
[[!tag open_issue_documentation]]
# External Projects
* [[/DDE]]
*
*