1<html><head><meta http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968"><title>Chapter 1. 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 2. 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 1. Introduction to USB on Linux</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="index.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <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 1. 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> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="host.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">The Linux-USB Host Side API </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 2. USB Host-Side API Model</td></tr></table></div></body></html> 42