/[gentoo]/xml/htdocs/doc/en/usb-guide.xml
Gentoo

Diff of /xml/htdocs/doc/en/usb-guide.xml

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.2 Revision 1.15
1<?xml version='1.0' encoding="UTF-8"?> 1<?xml version='1.0' encoding="UTF-8"?>
2<!-- $Header: /var/cvsroot/gentoo/xml/htdocs/doc/en/usb-guide.xml,v 1.15 2007/03/13 01:04:29 nightmorph Exp $ -->
2 3
3<!DOCTYPE guide SYSTEM "/dtd/guide.dtd"> 4<!DOCTYPE guide SYSTEM "/dtd/guide.dtd">
4 5
5<guide link="/doc/en/usb-guide.xml"> 6<guide link="/doc/en/usb-guide.xml">
6<title>Gentoo Linux USB Guide</title> 7<title>Gentoo Linux USB Guide</title>
7 8
8<author title="Author"> 9<author title="Author">
9 <mail link="fox2mike@gmail.com">Shyam Mani</mail> 10 <mail link="fox2mike@gentoo.org">Shyam Mani</mail>
10</author> 11</author>
11 12
12<abstract> 13<abstract>
13This document helps a user setup USB on a Gentoo system and configure various 14This document helps a user setup USB on a Gentoo system and configure various
14USB devices as well. 15USB devices as well.
15</abstract> 16</abstract>
16 17
17<!-- The content of this document is licensed under the CC-BY-SA license --> 18<!-- The content of this document is licensed under the CC-BY-SA license -->
18<!-- See http://creativecommons.org/licenses/by-sa/2.0 --> 19<!-- See http://creativecommons.org/licenses/by-sa/2.5 -->
19<license/> 20<license/>
20 21
21<version>1.1</version> 22<version>1.12</version>
22<date>2005-04-14</date> 23<date>2007-03-12</date>
23 24
24<chapter> 25<chapter>
25<title>Introduction</title> 26<title>Introduction</title>
26<section> 27<section>
27<title>What is USB?</title> 28<title>What is USB?</title>
28<body> 29<body>
29 30
30<p> 31<p>
31USB stands for Universal Serial Bus and is basically an external interface 32USB stands for Universal Serial Bus and is basically an external interface
32standard that enables communication between the computer and various other 33standard that enables communication between the computer and various other
33peripherals. Some of the most commonly used USB devices today are keyboards, 34peripherals. Some of the most commonly used USB devices today are keyboards,
34mice, pen drives, digital cameras, external CD &amp; DVD writers, printers etc. 35mice, pen drives, digital cameras, external CD &amp; DVD writers, printers etc.
35</p>
36
37<p> 36</p>
37
38<p>
38There are currently two versions of USB in use, i.e. USB 1.1 and USB 2.0. 39There are currently two versions of USB in use, i.e. USB 1.1 and USB 2.0.
39Since USB has always been backward compatible with its previous versions, 40Since USB has always been backward compatible with its previous versions,
40USB 2.0 is backwards compatible with USB 1.1. The latest USB devices are 41USB 2.0 is backwards compatible with USB 1.1. The latest USB devices are
41typically USB 2.0 compatible. USB 2.0 supports a maximum data transmission 42typically USB 2.0 compatible. USB 2.0 supports a maximum data transmission
42speed of 480 Mbps or 60 MBps and this is the major difference between the two 43speed of 480 Mbps or 60 MBps and this is the major difference between the two
43standards. Another advantage with USB is that the devices are all 44standards. Another advantage with USB is that the devices are all
44<e>hot-pluggable</e>, which means that you do not have to restart your system 45<e>hot-pluggable</e>, which means that you do not have to restart your system
45in order for you to be able to use these devices. 46in order for you to be able to use these devices.
46</p> 47</p>
47 48
48</body> 49</body>
49</section> 50</section>
50
51<section> 51<section>
52<title>A Technical Perspective</title> 52<title>A Technical Perspective</title>
53<body> 53<body>
54 54
55<p> 55<p>
56Before we go onto the exact configuration options in the kernel, it would 56Before we go onto the exact configuration options in the kernel, it would
57be apt to look at USB in a little more detail. If you're in a hurry or want 57be apt to look at USB in a little more detail. If you're in a hurry or want
58to skip this section, please go to <uri link="#kernel">Kernel Configuration</uri>. 58to skip this section, please go to <uri link="#kernel">Kernel Configuration</uri>.
59</p> 59</p>
60 60
61<p> 61<p>
62A USB system has a host controller, hubs, a <e>root hub</e> amongst others 62A USB system has a host controller, hubs, a <e>root hub</e> amongst others
63and can support up to 127 USB devices including the hubs. The host controller 63and can support up to 127 USB devices including the hubs. The host controller
64is nothing but the hardware interface between the USB device and the 64is nothing but the hardware interface between the USB device and the
65operating system. There are a couple of HCI (Host Controller Interface) 65operating system. There are a couple of HCI (Host Controller Interface)
66in use today and they are the OHCI (Open HCI) by Compaq, UHCI (Universal HCI) 66in use today and they are the OHCI (Open HCI) by Compaq, UHCI (Universal HCI)
67and EHCI (Enhanced HCI), both from Intel. The OHCI/UHCI are the two industry 67and EHCI (Enhanced HCI), both from Intel. The OHCI/UHCI are the two industry
68standard USB 1.1 interfaces whereas the EHCI is for USB 2.0. 68standard USB 1.1 interfaces whereas the EHCI is for USB 2.0.
69</p> 69</p>
70 70
71<p> 71<p>
72The hardware vendor provides an interface for the programmer that allows 72The hardware vendor provides an interface for the programmer that allows
73the system to interact with the hardware and this is called the HCD or Host 73the system to interact with the hardware and this is called the HCD or Host
74Controller Device. It is through this HCD that the device interacts with the 74Controller Device. It is through this HCD that the device interacts with the
75system software. The following diagram should make things easier to comprehend. 75system software. The following diagram should make things easier to comprehend.
76</p> 76</p>
77 77
78<pre caption="General USB Architecture"> 78<pre caption="General USB Architecture">
79<comment>(Software consists of other components as well like the device driver, but 79<comment>(Software consists of other components as well like the device driver, but
80 for the sake of simplicity, they are not shown)</comment> 80for the sake of simplicity, they are not shown)</comment>
81 81
82 + ---- Hardware ---- + ---- Software ---- + 82 + ---- Hardware ---- + ---- Software ---- +
83 | | | 83 | | |
84 | [USB Dev] -+-> {EHCI} -+---> ( EHCD ) | 84 | [USB Dev] -+-> {EHCI} -+---> ( EHCD ) |
85 | | | | User 85 | | | | User
86 | `-> {UHCI} -+---> ( UHCD ) | 86 | `-> {UHCI} -+---> ( UHCD ) |
87 | | | 87 | | |
88 + ---- Hardware ---- + ---- Software ---- + 88 + ---- Hardware ---- + ---- Software ---- +
89
90</pre> 89</pre>
91 90
92<p> 91<p>
93A USB device can either use a custom driver or use one already present in 92A USB device can either use a custom driver or use one already present in
94the system and this is based on the concept of a device <e>class</e>. This 93the system and this is based on the concept of a device <e>class</e>. This
95means that if a device belongs to a certain <e>class</e>, then other devices 94means that if a device belongs to a certain <e>class</e>, then other devices
96belonging to the same <e>class</e> can make use of the same device driver. 95belonging to the same <e>class</e> can make use of the same device driver.
97Some of these <e>classes</e> are the USB HID (Human Interface Devices) class 96Some of these <e>classes</e> are the USB HID (Human Interface Devices) class
98which covers input devices like keyboards and mice, the USB Mass Storage 97which covers input devices like keyboards and mice, the USB Mass Storage
99devices class which covers devices like pen drives, digital cameras, audio 98devices class which covers devices like pen drives, digital cameras, audio
100players etc and the USB CDC (Communication Devices Class) which essentially 99players etc and the USB CDC (Communication Devices Class) which essentially
101covers USB modems and similar devices. 100covers USB modems and similar devices.
102</p> 101</p>
103 102
104</body> 103</body>
105</section> 104</section>
106 105<section>
107<section id="#lspci">
108<title>What's on your machine?</title> 106<title>What's on your machine?</title>
109<body> 107<body>
110 108
111<p> 109<p>
112It is very simple to find out whether your machine has USB 2.0 support or not. 110It is very simple to find out whether your machine has USB 2.0 support or not.
113We make use of the <c>lspci</c> command for this purpose. 111We make use of the <c>lspci</c> command for this purpose.
114</p> 112</p>
115 113
116<note> 114<note>
117The <c>lspci</c> tool is a part of the <c>sys-apps/pciutils</c> package. If 115The <c>lspci</c> tool is a part of the <c>sys-apps/pciutils</c> package. If
118you do not have this installed, please <c>emerge pciutils</c>. Please note 116you do not have this installed, please <c>emerge pciutils</c>. Please note
119that you have to be root while running the <c>lspci</c> command. 117that you have to be root while running the <c>lspci</c> command.
120</note> 118</note>
121 119
122<pre caption="Various lspci outputs"> 120<pre caption="Various lspci outputs">
123<comment>(In system that is USB 1.1 compliant, note the UHCI only)</comment> 121<comment>(In system that is USB 1.1 compliant, note the UHCI only)</comment>
13200:1d.2 USB Controller: Intel Corp. 82801DB USB (Hub #3) (rev 01) (prog-if 00 [UHCI]) 13000:1d.2 USB Controller: Intel Corp. 82801DB USB (Hub #3) (rev 01) (prog-if 00 [UHCI])
13300:1d.7 USB Controller: Intel Corp. 82801DB USB EHCI Controller (rev 01) (prog-if 20 [EHCI]) 13100:1d.7 USB Controller: Intel Corp. 82801DB USB EHCI Controller (rev 01) (prog-if 20 [EHCI])
134</pre> 132</pre>
135 133
136<p> 134<p>
137So using the <c>lspci</c> command, we can find out if the system supports 135So using the <c>lspci</c> command, we can find out if the system supports
138USB 2.0. This is useful as we will be enabling the corresponding options in 136USB 2.0. This is useful as we will be enabling the corresponding options in
139the kernel. 137the kernel.
140</p> 138</p>
141 139
142</body> 140</body>
143</section> 141</section>
148<section> 146<section>
149<title>Getting the kernel</title> 147<title>Getting the kernel</title>
150<body> 148<body>
151 149
152<note> 150<note>
153Since the 2005.0 release, Gentoo Linux uses 2.6 as the default kernel. Unless 151Since the 2005.0 release, Gentoo Linux uses 2.6 as the default kernel. Unless
154you are specifically using the 2.4 profile, <c>gentoo-sources</c> will be a 152you are specifically using the 2.4 profile, <c>gentoo-sources</c> will be a
1552.6 kernel on <e>most</e> architectures. Please check your kernel version and 1532.6 kernel on <e>most</e> architectures. Please check your kernel version and
156then proceed with the configuration accordingly. 154then proceed with the configuration accordingly.
157</note> 155</note>
158 156
159<p> 157<p>
160First emerge the kernel sources of your choice. Here we'll use the 158First emerge the kernel sources of your choice. Here we'll use the
161<c>gentoo-sources</c> For more information on the various kernel sources available on Portage, 159<c>gentoo-sources</c>. For more information on the various kernel sources
160available on Portage, please look up the <uri
162please look up the <uri link="/doc/en/gentoo-kernel.xml">Gentoo Linux Kernel Guide</uri>. 161link="/doc/en/gentoo-kernel.xml">Gentoo Linux Kernel Guide</uri>.
163</p> 162</p>
164 163
165<pre caption="Getting the kernel sources"> 164<pre caption="Getting the kernel sources">
166# <i> emerge gentoo-sources</i> 165# <i>emerge gentoo-sources</i>
167</pre> 166</pre>
168 167
169<p> 168<p>
170Now, lets get on with the task of configuring the kernel. 169Now, lets get on with the task of configuring the kernel.
171</p> 170</p>
172 171
173<pre caption="Heading over to the source"> 172<pre caption="Heading over to the source">
174# <i> cd /usr/src/linux</i> 173# <i>cd /usr/src/linux</i>
175# <i> make menuconfig</i> 174# <i>make menuconfig</i>
176</pre> 175</pre>
177 176
178<note> 177<note>
179The above example assumes that <path>/usr/src/linux</path> symlink points to 178The above example assumes that <path>/usr/src/linux</path> symlink points to
180the kernel sources you want to use. Please ensure the same before proceeding. 179the kernel sources you want to use. Please ensure the same before proceeding.
181</note> 180</note>
182 181
183</body> 182</body>
184</section> 183</section>
185
186<section id="2.6.xconfig"> 184<section id="newkernelconfig">
187<title>Config options for the 2.6.x kernel</title> 185<title>Config options for the 2.6.x kernel</title>
188<body> 186<body>
189 187
190<p> 188<p>
191Now we will look at some of the options we will have to enable in the 2.6 189Now we will look at some of the options we will have to enable in the 2.6
192kernel to ensure proper USB support for our devices. If you are using a 2.4 190kernel to ensure proper USB support for our devices. If you are using a 2.4
193kernel, please proceed with <uri link="#2.4.xconfig">Config options for the 191kernel, please proceed with <uri link="#oldkernelconfig">Config options for the
1942.4.x kernel</uri>. 1922.4.x kernel</uri>.
195</p> 193</p>
196 194
197<note> 195<note>
198Examples in this document will show configuration options for basic USB 196Examples in this document will show configuration options for basic USB
199support as well as those needed commonly, for example a USB mass storage 197support as well as those needed commonly, for example a USB mass storage
200device (most cameras and USB pen drives). If you have a specific USB device 198device (most cameras and USB pen drives). If you have a specific USB device
201that needs to be configured, please look up your device's manual or search 199that needs to be configured, please look up your device's manual or search
202online to see if that device has support built-in into the kernel or custom 200online to see if that device has support built-in into the kernel or custom
203drivers that you can use. Please note that for the sake of ease, all examples 201drivers that you can use. Please note that for the sake of ease, all examples
204have the options compiled into the kernel. If you would like to have a modular 202have the options compiled into the kernel. If you would like to have a modular
205kernel, ensure that you note down the various modules and adjust your config 203kernel, ensure that you note down the various modules and adjust your config
206files accordingly. 204files accordingly.
207</note> 205</note>
208 206
209<pre caption="make menuconfig options for 2.6 kernels"> 207<pre caption="make menuconfig options for 2.6 kernels">
210Device Drivers ---&gt; 208Device Drivers ---&gt;
211 SCSI device support ---&gt; 209 SCSI device support ---&gt;
212 210
213<comment>(Although SCSI will be enabled automatically when selecting USB Mass Storage, we need to enable disk support.)</comment> 211<comment>(Although SCSI will be enabled automatically when selecting USB Mass Storage,
212we need to enable disk support.)</comment>
214--- SCSI support type (disk, tape, CD-ROM) 213--- SCSI support type (disk, tape, CD-ROM)
215&lt;*&gt; SCSI disk support 214&lt;*&gt; SCSI disk support
216 215
217<comment>(Then move back a level and go into USB support)</comment> 216<comment>(Then move back a level and go into USB support)</comment>
218USB support ---&gt; 217USB support ---&gt;
219 218
220<comment>(This is the root hub and is required for USB support. If you'd like to compile this as a module,</comment> 219<comment>(This is the root hub and is required for USB support.
221<comment> it will be called usbcore.)</comment> 220If you'd like to compile this as a module, it will be called usbcore.)</comment>
222&lt;*&gt; Support for Host-side USB 221&lt;*&gt; Support for Host-side USB
223 222
224<comment>(Enable this option to see your USB devices in /proc/bus/usb. This is recommended.)</comment> 223<comment>(Enable this option to see your USB devices in /proc/bus/usb.
224This is recommended.)</comment>
225 [*] USB device filesystem 225 [*] USB device filesystem
226 226
227<comment>(Select at least one of the HCDs. If you are unsure, picking all is fine.)</comment> 227<comment>(Select at least one of the HCDs. If you are unsure, picking all is fine.)</comment>
228--- USB Host Controller Drivers 228--- USB Host Controller Drivers
229&lt;*&gt; EHCI HCD (USB 2.0) support 229&lt;*&gt; EHCI HCD (USB 2.0) support
230&lt; &gt; OHCI HCD support 230&lt; &gt; OHCI HCD support
231&lt;*&gt; UHCI HCD (most Intel and VIA) support 231&lt;*&gt; UHCI HCD (most Intel and VIA) support
232 232
233<comment>(Moving a little further down, we come to CDC and mass storage.)</comment> 233<comment>(Moving a little further down, we come to CDC and mass storage.)</comment>
234&lt; &gt; USB Modem (CDC ACM) support 234&lt; &gt; USB Modem (CDC ACM) support
235&lt;*&gt; USB Printer support 235&lt;*&gt; USB Printer support
236&lt;*&gt; USB Mass Storage support 236&lt;*&gt; USB Mass Storage support
237 [*] USB Mass Storage Write-Protected Media Detection (EXPERIMENTAL)
238 237
239<comment>(And then the HID bits. You have to select HID input support if you have a USB</comment> 238<comment>(Then the HID bits.
239You have to select HID input support if you have a USB keyboard,
240<comment> keyboard, mouse, joystick or any other USB input device)</comment> 240mouse, joystick or any other USB input device)</comment>
241--- USB Input Devices 241--- USB Input Devices
242&lt;*&gt; USB Human Interface Device (full HID) support 242&lt;*&gt; USB Human Interface Device (full HID) support
243 [*] HID input layer support 243 [*] HID input layer support
244 244
245<comment>(If you have a USB Network Card like the RTL8150, you'll need this)</comment> 245<comment>(If you have a USB Network Card like the RTL8150, you'll need this)</comment>
247 &lt;*&gt; USB RTL8150 based ethernet device support (EXPERIMENTAL) 247 &lt;*&gt; USB RTL8150 based ethernet device support (EXPERIMENTAL)
248 248
249<comment>(If you have a serial to USB converter like the Prolific 2303, you'll need this)</comment> 249<comment>(If you have a serial to USB converter like the Prolific 2303, you'll need this)</comment>
250USB Serial Converter support ---> 250USB Serial Converter support --->
251 &lt;*&gt; USB Serial Converter support 251 &lt;*&gt; USB Serial Converter support
252 &lt;*&gt; USB Prolific 2303 Single Port Serial Driver (NEW) 252 &lt;*&gt; USB Prolific 2303 Single Port Serial Driver (NEW)
253</pre> 253</pre>
254 254
255<p> 255<p>
256Now that your options are set, you can (re)compile the kernel and USB support 256Now that your options are set, you can (re)compile the kernel and USB support
257should be functional once you reboot into the new kernel. You can now proceed 257should be functional once you reboot into the new kernel. You can now proceed
258to <uri link="#postkern">Seeing USB at work</uri> and see if everything is 258to <uri link="#postkern">Seeing USB at work</uri> and see if everything is
259working as it should. 259working as it should.
260</p> 260</p>
261</body>
262</section>
263 261
262</body>
263</section>
264<section id="2.4.xconfig"> 264<section id="oldkernelconfig">
265<title>Config options for the 2.4.x kernel</title> 265<title>Config options for the 2.4.x kernel</title>
266<body> 266<body>
267 267
268<p> 268<p>
269We will look at the options the we will have to enable in the 2.4 kernel to 269We will look at the options the we will have to enable in the 2.4 kernel to
270ensure proper USB support for our devices. If you are using a 2.6 kernel, 270ensure proper USB support for our devices. If you are using a 2.6 kernel,
271please look at <uri link="#2.6.xconfig">Config options for the 2.6.x 271please look at <uri link="#newkernelconfig">Config options for the 2.6.x
272kernel</uri>. 272kernel</uri>.
273</p> 273</p>
274 274
275<note> 275<note>
276Examples in this document will show configuration options for basic USB 276Examples in this document will show configuration options for basic USB
277support as well as those needed commonly, for example a USB mass storage 277support as well as those needed commonly, for example a USB mass storage
278device (most cameras and USB pen drives). If you have a specific USB device 278device (most cameras and USB pen drives). If you have a specific USB device
279that needs to be configured, please look up your device's manual or search 279that needs to be configured, please look up your device's manual or search
280online to see if that device has support built-in into the kernel or custom 280online to see if that device has support built-in into the kernel or custom
281drivers that you can use. Please note that for the sake of ease, all examples 281drivers that you can use. Please note that for the sake of ease, all examples
282have the options compiled into the kernel. If you would like to have a modular 282have the options compiled into the kernel. If you would like to have a modular
283kernel, ensure that you note down the various modules and adjust your config 283kernel, ensure that you note down the various modules and adjust your config
284files accordingly. 284files accordingly.
285</note> 285</note>
286 286
287<pre caption="make menuconfig options for 2.4 kernels"> 287<pre caption="make menuconfig options for 2.4 kernels">
288<comment>(This immediate config is only for those who have USB input devices. Input</comment> 288<comment>(This immediate config is only for those who have USB input devices.
289<comment> core support is needed by USB HID later.)</comment> 289Input core support is needed by USB HID later.)</comment>
290Input core support ---&gt; 290Input core support ---&gt;
291 &lt;*&gt; Input core support 291 &lt;*&gt; Input core support
292 &lt; &gt; Keyboard support 292 &lt; &gt; Keyboard support
293 &lt; &gt; Mouse support 293 &lt; &gt; Mouse support
294 &lt; &gt; Event interface support 294 &lt; &gt; Event interface support
295 295
296USB support ---&gt; 296USB support ---&gt;
297 297
298<comment>(This is the root hub and is required for USB support. If you'd like to compile this as a module,</comment> 298<comment>(This is the root hub and is required for USB support.
299<comment> it will be called usbcore.o)</comment> 299If you'd like to compile this as a module, it will be called usbcore.o)</comment>
300&lt;*&gt; Support for USB 300&lt;*&gt; Support for USB
301 301
302<comment>(Enable this option to see your USB devices in /proc/bus/usb. This is recommended.)</comment> 302<comment>(Enable this option to see your USB devices in /proc/bus/usb.
303This is recommended.)</comment>
303 [*] Preliminary USB device filesystem 304 [*] Preliminary USB device filesystem
304 305
305<comment>(Select at least one of the HCDs. If you are unsure, picking all is fine.)</comment> 306<comment>(Select at least one of the HCDs. If you are unsure, picking all is fine.)</comment>
306--- USB Host Controller Drivers 307--- USB Host Controller Drivers
307&lt;*&gt; UHCI Alternate Driver (JE) support 308&lt;*&gt; UHCI Alternate Driver (JE) support
308&lt; &gt; OHCI (Compaq, iMacs, OPTi, SiS, ALi, ...) support 309&lt; &gt; OHCI (Compaq, iMacs, OPTi, SiS, ALi, ...) support
309 310
310<comment>(This is the device section. Select only what you need.)</comment> 311<comment>(This is the device section. Select only what you need.)</comment>
311--- USB Device Class drivers 312--- USB Device Class drivers
312&lt; &gt; USB Audio support 313&lt; &gt; USB Audio support
313&lt;*&gt; USB Mass Storage support 314&lt;*&gt; USB Mass Storage support
314&lt; &gt; USB Modem (CDC ACM) support 315&lt; &gt; USB Modem (CDC ACM) support
315&lt;*&gt; USB Printer support 316&lt;*&gt; USB Printer support
316 317
324 &lt;*&gt; USB Serial Converter support 325 &lt;*&gt; USB Serial Converter support
325 &lt;*&gt; USB Prolific 2303 Single Port Serial Driver (NEW) 326 &lt;*&gt; USB Prolific 2303 Single Port Serial Driver (NEW)
326</pre> 327</pre>
327 328
328<p> 329<p>
329Now that the options are set, you can (re)compile the kernel and USB support 330Now that the options are set, you can (re)compile the kernel and USB support
330should be functional once you reboot into the new kernel. 331should be functional once you reboot into the new kernel.
331</p> 332</p>
333
332</body> 334</body>
333</section> 335</section>
334</chapter> 336</chapter>
335 337
336<chapter id="postkern"> 338<chapter id="postkern">
338<section> 340<section>
339<title>dmesg is your friend!</title> 341<title>dmesg is your friend!</title>
340<body> 342<body>
341 343
342<p> 344<p>
343The time has finally come to play with those USB devices :) So let's get 345The time has finally come to play with those USB devices :) So let's get
344started. In this chapter, we'll see how the system responds to various USB 346started. In this chapter, we'll see how the system responds to various USB
345devices. We'll start by plugging in a USB 512 MB Memory Stick/Pen Drive. You 347devices. We'll start by plugging in a USB 512 MB Memory Stick/Pen Drive. You
346could use some other similar mass storage device. We will primarily use 348could use some other similar mass storage device. We will primarily use
347<c>dmesg</c> to see what is happening and how the system responds to the 349<c>dmesg</c> to see what is happening and how the system responds to the
348device. 350device.
349</p> 351</p>
350 352
351<note> 353<note>
352<c>dmesg</c> will generally give a lot of output up front before coming to the 354<c>dmesg</c> will generally give a lot of output up front before coming to the
353info we need, as it reads the kernel ring buffer that has all the boot up 355info we need, as it reads the kernel ring buffer that has all the boot up
354messages as well. The output in the following examples have only the relevant 356messages as well. The output in the following examples have only the relevant
355portion(s) and extra spaces in between to enable better readability. If needed 357portion(s) and extra spaces in between to enable better readability. If needed
356please use a <c>dmesg | more</c> or <c>dmesg | less</c> to see the output 358please use a <c>dmesg | more</c> or <c>dmesg | less</c> to see the output
357better in your system. 359better in your system.
358</note> 360</note>
359 361
360<pre caption="dmesg output for Memory Stick"> 362<pre caption="dmesg output for Memory Stick">
361<comment>(Plug in Memory Stick into available USB port and then..)</comment> 363<comment>(Plug in Memory Stick into available USB port and then..)</comment>
362# <i>dmesg | less</i> 364# <i>dmesg | less</i>
363 365
364<comment>(The device is picked up as a USB 1.1 and allocated an address. Also says what HCD it is using.)</comment> 366<comment>(The device is picked up as a USB 1.1 and allocated an address.
367Also says what HCD it is using.)</comment>
365usb 1-1: new full speed USB device using uhci_hcd and address 2 368usb 1-1: new full speed USB device using uhci_hcd and address 2
366 369
367<comment>(SCSI emulation automatically kicks in)</comment> 370<comment>(SCSI emulation automatically kicks in)</comment>
368scsi0 : SCSI emulation for USB Mass Storage devices 371scsi0 : SCSI emulation for USB Mass Storage devices
369usb-storage: device found at 2 372usb-storage: device found at 2
388<comment>(When the device is disconnected, the system acknowledges the same)</comment> 391<comment>(When the device is disconnected, the system acknowledges the same)</comment>
389usb 1-1: USB disconnect, address 2 392usb 1-1: USB disconnect, address 2
390</pre> 393</pre>
391 394
392<p> 395<p>
393Once the device is connected and mounted, you can access it like a normal hard 396Once the device is connected and mounted, you can access it like a normal hard
394disk. Usual operations like <c>cp</c>, <c>mv</c>, <c>rm</c> etc work fine. You 397disk. Usual operations like <c>cp</c>, <c>mv</c>, <c>rm</c>, etc work fine. You
395could also create a filesystem on the USB stick/format it. 398could also create a filesystem on the USB stick/format it.
396</p> 399</p>
397 400
398<pre caption="Accessing the Memory Stick"> 401<pre caption="Accessing the Memory Stick">
399# <i>mount /dev/sda1 /mnt/usb</i> 402# <i>mount /dev/sda1 /mnt/usb</i>
404none 189M 0 189M 0% /dev/shm 407none 189M 0 189M 0% /dev/shm
405/dev/sda1 490M 34M 457M 7% /mnt/usb 408/dev/sda1 490M 34M 457M 7% /mnt/usb
406</pre> 409</pre>
407 410
408<note> 411<note>
409Digital cameras can be accessed the same way as memory sticks. I have a Nikon 412Digital cameras can be accessed the same way as memory sticks. I have a Nikon
410Coolpix 5200 and this is the way I access it. The camera is set to behave like 413Coolpix 5200 and this is the way I access it. Cameras these days usually have
411a USB mass storage device (as against PTP mode, which most cameras have these 414two modes to transfer pictures; USB mass storage and PTP (Picture Transfer
412days) and the procedure is exactly the same, because of which I have not 415Protocol). The camera is set to USB mass storage mode and hence the procedure is
416exactly the same as that of accessing a memory stick because of which I have not
413explained in detail about the same. Please note that this may NOT work in all 417explained in detail about it. Please note that this may NOT work in all cases
414cases and with all digital cameras that have USB support. 418and with all digital cameras that have USB support.
415</note> 419</note>
416 420
417<p> 421<p>
418How would a USB mouse show up in case you had one? It will show up as an HID 422How would a USB mouse show up in case you had one? It will show up as an HID
419device. 423device.
420</p> 424</p>
421 425
422<pre caption="USB Optical Mouse"> 426<pre caption="USB Optical Mouse">
423# <i>dmesg | grep USB</i> 427# <i>dmesg | grep USB</i>
425usb 1-1: new low speed USB device using address 2 429usb 1-1: new low speed USB device using address 2
426input: USB HID v1.10 Mouse [Logitech USB-PS/2 Optical Mouse] on usb-0000:00:07.2-1 430input: USB HID v1.10 Mouse [Logitech USB-PS/2 Optical Mouse] on usb-0000:00:07.2-1
427</pre> 431</pre>
428 432
429<p> 433<p>
430Another nifty command you can use to see the status of your USB ports is 434Another nifty command you can use to see the status of your USB ports is
431<c>lsusb</c>. This is part of <c>sys-apps/usbutils</c> and will be covered in 435<c>lsusb</c>. This is part of <c>sys-apps/usbutils</c> and will be covered in
432the next chapter. 436the next chapter.
433</p> 437</p>
434 438
435</body> 439</body>
436</section> 440</section>
441<section> 445<section>
442<title>Nifty tools</title> 446<title>Nifty tools</title>
443<body> 447<body>
444 448
445<p> 449<p>
446So far we've seen how much support exists on the kernel/system side for USB on 450So far we've seen how much support exists on the kernel/system side for USB on
447Linux. Now we'll take a peek into what kind of support is provided by Gentoo 451Linux. Now we'll take a peek into what kind of support is provided by Gentoo
448for USB in the userspace. 452for USB in the userspace.
449</p> 453</p>
450 454
451<p> 455<p>
452One of the most useful tools around is <c>lsusb</c>. This lists all the usb 456One of the most useful tools around is <c>lsusb</c>. This lists all the usb
453devices connected to the system. Installing it is a breeze. 457devices connected to the system. Installing it is a breeze.
454</p> 458</p>
455 459
456<pre caption="Installing usbutils"> 460<pre caption="Installing usbutils">
457# <i>emerge usbutils</i> 461# <i>emerge usbutils</i>
458</pre> 462</pre>
459 463
460<p> 464<p>
461Once installed, you can just run <c>lsusb</c> to get simple info on the USB 465Once installed, you can just run <c>lsusb</c> to get simple info on the USB
462devices attached to the machine. 466devices attached to the machine.
463</p> 467</p>
464 468
465<note> 469<note>
466You have to be root in most cases to run <c>lsusb</c>. 470You have to be root in most cases to run <c>lsusb</c>.
467</note> 471</note>
468 472
469<warn> 473<warn>
470<c>lsusb</c> reads the information for the USB devices from 474<c>lsusb</c> reads the information for the USB devices from
471<path>/proc/bus/usb</path>. If you have not enabled that in your kernel, 475<path>/proc/bus/usb</path>. If you have not enabled that in your kernel,
472chances are that <c>lsusb</c> may not work at all. Please ensure you have 476chances are that <c>lsusb</c> may not work at all. Please ensure you have
473<path>/proc</path> filesystem support enabled in your kernel and that 477<path>/proc</path> filesystem support enabled in your kernel and that
474<c>usbfs</c> is mounted at <path>/proc/bus/usb</path> (which should happen 478<c>usbfs</c> is mounted at <path>/proc/bus/usb</path> (which should happen
475automatically). 479automatically).
476</warn> 480</warn>
477 481
484<comment>(This is the root hub)</comment> 488<comment>(This is the root hub)</comment>
485Bus 001 Device 001: ID 0000:0000 489Bus 001 Device 001: ID 0000:0000
486</pre> 490</pre>
487 491
488<p> 492<p>
489If you are one of those types who love to see lots of information, you have 493If you are one of those types who love to see lots of information, you have
490the option of running <c>lsusb -v</c>. Try that and see the amount of info it 494the option of running <c>lsusb -v</c>. Try that and see the amount of info it
491gives out. Another good option is that <c>lsusb</c> dumps the current physical 495gives out. Another good option is that <c>lsusb</c> dumps the current physical
492USB hierarchy as a tree and thus makes it easier to understand the exact 496USB hierarchy as a tree and thus makes it easier to understand the exact
493device map. The command is <c>lsusb -t</c>. For example, 497device map. The command is <c>lsusb -t</c>. For example,
494</p> 498</p>
495 499
496<pre caption="lsusb showing USB hierarchy"> 500<pre caption="lsusb showing USB hierarchy">
497# <i>lsusb -t</i> 501# <i>lsusb -t</i>
500 |-Dev# 2 Vendor 0x046d Product 0xc00e 504 |-Dev# 2 Vendor 0x046d Product 0xc00e
501 `-Dev# 3 Vendor 0x0c76 Product 0x0005 505 `-Dev# 3 Vendor 0x0c76 Product 0x0005
502</pre> 506</pre>
503 507
504<p> 508<p>
505You can easily correlate the outputs of <c>lsusb</c> and <c>lsusb -t</c>, 509You can easily correlate the outputs of <c>lsusb</c> and <c>lsusb -t</c>,
506which helps debugging as well as understanding how USB works. 510which helps debugging as well as understanding how USB works.
507</p> 511</p>
508 512
509</body> 513</body>
510</section> 514</section>
511
512<section> 515<section>
513<title>Hot or Cold plug??</title> 516<title>Hotplug</title>
514<body> 517<body>
515 518
516<p>
517Gentoo uses two packages, <c>sys-apps/hotplug</c> and <c>sys-apps/coldplug</c>
518to do some magic with <e>hot-pluggable</e> devices. Just like any other magic
519trick, there is a simple logic behind this one too. We shall now see what that
520is, and in the process hopefully we will be able to understand these twins
521better.
522</p> 519<p>
523 520Gentoo uses <c>sys-apps/hotplug</c> to do some magic with <e>hot-pluggable</e>
521devices. Just like any other magic trick, there is a simple logic behind this
522one too. We shall now see what that is, and in the process hopefully we will be
523able to understand it better.
524<p> 524</p>
525
526<p>
525Firmware can be defined as the software on a piece of hardware that is loaded 527Firmware can be defined as the software on a piece of hardware that is loaded
526and executed but can't be modified easily. Many devices have firmware in them 528and executed but can't be modified easily. Many devices have firmware in them
527to ensure that they work properly and often firmware may contain code that is 529to ensure that they work properly and often firmware may contain code that is
528critical to ensure that the hardware performs as expected. Firmware is present 530critical to ensure that the hardware performs as expected. Firmware is present
529in a wide variety of computer devices ranging from ROM chips to state of the 531in a wide variety of computer devices ranging from ROM chips to state of the
530art USB and PCMCIA cards. When a device is plugged in, the firmware (which may 532art USB and PCMCIA cards. When a device is plugged in, the firmware (which may,
531in some cases be the driver as well) is read and loaded onto memory after 533in some cases, be the driver as well) is read and loaded onto memory after
532which the device can be used by the system. 534which the device can be used by the system.
533</p> 535</p>
534 536
535<p> 537<p>
536To cut the long story short, Gentoo uses <c>sys-apps/hotplug</c> to handle 538To cut the long story short, Gentoo uses <c>sys-apps/hotplug</c> to handle
537the firmware side of things in <e>hot-pluggable</e> devices. 539the firmware side of things in <e>hot-pluggable</e> devices.
538<c>sys-apps/hotplug</c> will use the required firmware to make that device 540<c>sys-apps/hotplug</c> will use the required firmware to make that device
539usable. The firmware should be put in the <path>/lib/firmware</path> directory 541usable. The firmware should be put in the <path>/lib/firmware</path> directory
540and is picked up from there. Getting it is simple, the usual emerge will do. 542and is picked up from there. Getting it is simple; the usual emerge will do.
541</p> 543</p>
542 544
543<pre caption="Installing hotplug"> 545<pre caption="Installing hotplug">
544# <i>emerge hotplug</i> 546# <i>emerge hotplug</i>
545</pre> 547</pre>
546 548
547<p>
548Now the obvious question would be, what is coldplug and why is it needed?
549<c>sys-apps/coldplug</c> does what hotplug does, but it does it for
550<e>hot-pluggable</e> devices that are already connected at boot time. A good
551example of this would be a USB Network card. Earlier hotplug was the package
552responsible for handling both but then it was split into hotplug and coldplug,
553each with their distinct purposes. Emerge it if you have <e>hot-pluggable</e>
554devices that you need activated on boot up.
555</p>
556
557<pre caption="Installing coldplug">
558# <i>emerge coldplug</i>
559<comment>(And you can add it to the boot runlevel)</comment>
560# <i>rc-update add coldplug boot</i>
561 * coldplug added to runlevel boot
562 * rc-update complete.
563</pre>
564
565<note>
566The above initscript does what hotplug's initscript used to do (for already
567attached hot-pluggable devices). hotplug does not have an initscript of its
568own as of now.
569</note>
570
571</body> 549</body>
572</section> 550</section>
573</chapter> 551</chapter>
574 552
575<chapter> 553<chapter>
577<section> 555<section>
578<title>References</title> 556<title>References</title>
579<body> 557<body>
580 558
581<p> 559<p>
582A good number of documents online helped me during writing this, and there are 560A good number of online documents helped me during the development of this
583some that are that are highly technical but truly interesting. I thought they 561document and there are some that are highly technical but truly interesting.
584all deserve some credit. So here we go! 562I thought they all deserve some credit, so here we go!
585</p>
586<p> 563</p>
564
565<ul>
5871) <uri link="http://www.usb.org">The Official USB Website</uri> 566 <li><uri link="http://www.usb.org">The Official USB Website</uri></li>
588</p>
589<p>
5902) <uri link="http://www.usb.org/faq">The USB FAQ</uri> 567 <li><uri link="http://www.usb.org/about/faq">The USB FAQ</uri></li>
591</p> 568 <li>
592<p> 569 <uri
5933) <uri link="http://h18000.www1.hp.com/productinfo/development/openhci.html">Compaq's OHCI Standard</uri> 570 link="http://h18000.www1.hp.com/productinfo/development/openhci.html">Compaq's
594</p> 571 OHCI Standard</uri>
595<p> 572 </li>
573 <li>
5964) <uri link="http://developer.intel.com/technology/usb/uhci11d.htm">Intel's UHCI Standard</uri> 574 <uri link="http://developer.intel.com/technology/usb/uhci11d.htm">Intel's
597</p> 575 UHCI Standard</uri>
598<p> 576 </li>
577 <li>
5995) <uri link="http://www.intel.com/technology/usb/ehcispec.htm">Intel's EHCI Standard</uri> 578 <uri link="http://www.intel.com/technology/usb/ehcispec.htm">Intel's EHCI
600</p> 579 Standard</uri>
580 </li>
581</ul>
582
583</body>
584</section>
585<section>
586<title>Other Interesting Links</title>
587<body>
588
589<ul>
590 <li><uri link="/doc/en/liveusb.xml">Gentoo Linux LiveUSB HOWTO</uri></li>
591</ul>
601 592
602</body> 593</body>
603</section> 594</section>
604</chapter> 595</chapter>
605</guide> 596</guide>

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.15

  ViewVC Help
Powered by ViewVC 1.1.20