1<html><head><meta http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968"><title>Chapter 1. Introduction</title><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"><link rel="home" href="index.html" title="Writing USB Device Drivers"><link rel="up" href="index.html" title="Writing USB Device Drivers"><link rel="prev" href="index.html" title="Writing USB Device Drivers"><link rel="next" href="basics.html" title="Chapter 2. Linux USB Basics"></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</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="basics.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</h1></div></div></div><p> 2 The Linux USB subsystem has grown from supporting only two different 3 types of devices in the 2.2.7 kernel (mice and keyboards), to over 20 4 different types of devices in the 2.4 kernel. Linux currently supports 5 almost all USB class devices (standard types of devices like keyboards, 6 mice, modems, printers and speakers) and an ever-growing number of 7 vendor-specific devices (such as USB to serial converters, digital 8 cameras, Ethernet devices and MP3 players). For a full list of the 9 different USB devices currently supported, see Resources. 10 </p><p> 11 The remaining kinds of USB devices that do not have support on Linux are 12 almost all vendor-specific devices. Each vendor decides to implement a 13 custom protocol to talk to their device, so a custom driver usually needs 14 to be created. Some vendors are open with their USB protocols and help 15 with the creation of Linux drivers, while others do not publish them, and 16 developers are forced to reverse-engineer. See Resources for some links 17 to handy reverse-engineering tools. 18 </p><p> 19 Because each different protocol causes a new driver to be created, I have 20 written a generic USB driver skeleton, modelled after the pci-skeleton.c 21 file in the kernel source tree upon which many PCI network drivers have 22 been based. This USB skeleton can be found at drivers/usb/usb-skeleton.c 23 in the kernel source tree. In this article I will walk through the basics 24 of the skeleton driver, explaining the different pieces and what needs to 25 be done to customize it to your specific device. 26 </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="basics.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Writing USB Device Drivers </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 2. Linux USB Basics</td></tr></table></div></body></html> 27