1<html><head><meta http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968"><title>Preface</title><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"><link rel="home" href="index.html" title="The Userspace I/O HOWTO"><link rel="up" href="aboutthis.html" title="Chapter&#160;1.&#160;About this document"><link rel="prev" href="aboutthis.html" title="Chapter&#160;1.&#160;About this document"><link rel="next" href="thanks.html" title="Acknowledgments"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Preface</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="aboutthis.html">Prev</a>&#160;</td><th width="60%" align="center">Chapter&#160;1.&#160;About this document</th><td width="20%" align="right">&#160;<a accesskey="n" href="thanks.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="preface"></a>Preface</h2></div></div></div><p>
2	For many types of devices, creating a Linux kernel driver is
3	overkill.  All that is really needed is some way to handle an
4	interrupt and provide access to the memory space of the
5	device.  The logic of controlling the device does not
6	necessarily have to be within the kernel, as the device does
7	not need to take advantage of any of other resources that the
8	kernel provides.  One such common class of devices that are
9	like this are for industrial I/O cards.
10	</p><p>
11	To address this situation, the userspace I/O system (UIO) was
12	designed.  For typical industrial I/O cards, only a very small
13	kernel module is needed. The main part of the driver will run in
14	user space. This simplifies development and reduces the risk of
15	serious bugs within a kernel module.
16	</p><p>
17	Please note that UIO is not an universal driver interface. Devices
18	that are already handled well by other kernel subsystems (like
19	networking or serial or USB) are no candidates for an UIO driver.
20	Hardware that is ideally suited for an UIO driver fulfills all of
21	the following:
22	</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>The device has memory that can be mapped. The device can be
23	controlled completely by writing to this memory.</p></li><li class="listitem"><p>The device usually generates interrupts.</p></li><li class="listitem"><p>The device does not fit into one of the standard kernel
24	subsystems.</p></li></ul></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="aboutthis.html">Prev</a>&#160;</td><td width="20%" align="center"><a accesskey="u" href="aboutthis.html">Up</a></td><td width="40%" align="right">&#160;<a accesskey="n" href="thanks.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter&#160;1.&#160;About this document&#160;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">&#160;Acknowledgments</td></tr></table></div></body></html>
25