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