1<html><head><meta http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968"><title>Chapter&#160;1.&#160;Introduction to USB on Linux</title><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"><link rel="home" href="index.html" title="The Linux-USB Host Side API"><link rel="up" href="index.html" title="The Linux-USB Host Side API"><link rel="prev" href="index.html" title="The Linux-USB Host Side API"><link rel="next" href="host.html" title="Chapter&#160;2.&#160;USB Host-Side API Model"></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">Chapter&#160;1.&#160;Introduction to USB on Linux</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="index.html">Prev</a>&#160;</td><th width="60%" align="center">&#160;</th><td width="20%" align="right">&#160;<a accesskey="n" href="host.html">Next</a></td></tr></table><hr></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="intro"></a>Chapter&#160;1.&#160;Introduction to USB on Linux</h1></div></div></div><p>A Universal Serial Bus (USB) is used to connect a host,
2    such as a PC or workstation, to a number of peripheral
3    devices.  USB uses a tree structure, with the host as the
4    root (the system's master), hubs as interior nodes, and
5    peripherals as leaves (and slaves).
6    Modern PCs support several such trees of USB devices, usually
7    one USB 2.0 tree (480 Mbit/sec each) with
8    a few USB 1.1 trees (12 Mbit/sec each) that are used when you
9    connect a USB 1.1 device directly to the machine's "root hub".
10    </p><p>That master/slave asymmetry was designed-in for a number of
11    reasons, one being ease of use.  It is not physically possible to
12    assemble (legal) USB cables incorrectly:  all upstream "to the host"
13    connectors are the rectangular type (matching the sockets on
14    root hubs), and all downstream connectors are the squarish type
15    (or they are built into the peripheral).
16    Also, the host software doesn't need to deal with distributed
17    auto-configuration since the pre-designated master node manages all that.
18    And finally, at the electrical level, bus protocol overhead is reduced by
19    eliminating arbitration and moving scheduling into the host software.
20    </p><p>USB 1.0 was announced in January 1996 and was revised
21    as USB 1.1 (with improvements in hub specification and
22    support for interrupt-out transfers) in September 1998.
23    USB 2.0 was released in April 2000, adding high-speed
24    transfers and transaction-translating hubs (used for USB 1.1
25    and 1.0 backward compatibility).
26    </p><p>Kernel developers added USB support to Linux early in the 2.2 kernel
27    series, shortly before 2.3 development forked.  Updates from 2.3 were
28    regularly folded back into 2.2 releases, which improved reliability and
29    brought <code class="filename">/sbin/hotplug</code> support as well more drivers.
30    Such improvements were continued in the 2.5 kernel series, where they added
31    USB 2.0 support, improved performance, and made the host controller drivers
32    (HCDs) more consistent.  They also simplified the API (to make bugs less
33    likely) and added internal "kerneldoc" documentation.
34    </p><p>Linux can run inside USB devices as well as on
35    the hosts that control the devices.
36    But USB device drivers running inside those peripherals
37    don't do the same things as the ones running inside hosts,
38    so they've been given a different name:
39    <span class="emphasis"><em>gadget drivers</em></span>.
40    This document does not cover gadget drivers.
41    </p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="index.html">Prev</a>&#160;</td><td width="20%" align="center">&#160;</td><td width="40%" align="right">&#160;<a accesskey="n" href="host.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">The Linux-USB Host Side API&#160;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">&#160;Chapter&#160;2.&#160;USB Host-Side API Model</td></tr></table></div></body></html>
42