| 1 |
swift |
1.1 |
<?xml version='1.0' encoding="UTF-8"?> |
| 2 |
fox2mike |
1.4 |
<!-- $Header: /var/cvsroot/gentoo/xml/htdocs/doc/en/usb-guide.xml,v 1.3 2005/05/03 17:37:35 neysx Exp $ --> |
| 3 |
swift |
1.1 |
|
| 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 |
fox2mike |
1.4 |
<mail link="fox2mike@gentoo.org">Shyam Mani</mail> |
| 11 |
swift |
1.1 |
</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.0 --> |
| 20 |
|
|
<license/> |
| 21 |
|
|
|
| 22 |
fox2mike |
1.4 |
<version>1.3</version> |
| 23 |
|
|
<date>2005-06-07</date> |
| 24 |
swift |
1.1 |
|
| 25 |
|
|
<chapter> |
| 26 |
|
|
<title>Introduction</title> |
| 27 |
|
|
<section> |
| 28 |
|
|
<title>What is USB?</title> |
| 29 |
|
|
<body> |
| 30 |
|
|
|
| 31 |
|
|
<p> |
| 32 |
neysx |
1.3 |
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 |
swift |
1.1 |
</p> |
| 37 |
|
|
|
| 38 |
|
|
<p> |
| 39 |
neysx |
1.3 |
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 |
swift |
1.1 |
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 |
neysx |
1.3 |
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 |
swift |
1.1 |
to skip this section, please go to <uri link="#kernel">Kernel Configuration</uri>. |
| 59 |
|
|
</p> |
| 60 |
|
|
|
| 61 |
|
|
<p> |
| 62 |
neysx |
1.3 |
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 |
swift |
1.1 |
standard USB 1.1 interfaces whereas the EHCI is for USB 2.0. |
| 69 |
|
|
</p> |
| 70 |
|
|
|
| 71 |
|
|
<p> |
| 72 |
neysx |
1.3 |
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 |
swift |
1.1 |
system software. The following diagram should make things easier to comprehend. |
| 76 |
|
|
</p> |
| 77 |
|
|
|
| 78 |
|
|
<pre caption="General USB Architecture"> |
| 79 |
neysx |
1.3 |
<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 |
swift |
1.1 |
|
| 82 |
neysx |
1.3 |
+ ---- Hardware ---- + ---- Software ---- + |
| 83 |
swift |
1.1 |
| | | |
| 84 |
neysx |
1.3 |
| [USB Dev] -+-> {EHCI} -+---> ( EHCD ) | |
| 85 |
swift |
1.1 |
| | | | User |
| 86 |
|
|
| `-> {UHCI} -+---> ( UHCD ) | |
| 87 |
|
|
| | | |
| 88 |
|
|
+ ---- Hardware ---- + ---- Software ---- + |
| 89 |
neysx |
1.3 |
</pre> |
| 90 |
swift |
1.1 |
|
| 91 |
|
|
<p> |
| 92 |
neysx |
1.3 |
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 |
swift |
1.1 |
covers USB modems and similar devices. |
| 101 |
|
|
</p> |
| 102 |
|
|
|
| 103 |
|
|
</body> |
| 104 |
|
|
</section> |
| 105 |
|
|
<section id="#lspci"> |
| 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 |
neysx |
1.3 |
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 |
swift |
1.1 |
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 |
neysx |
1.3 |
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 |
swift |
1.1 |
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 |
yoswink |
1.2 |
<note> |
| 151 |
neysx |
1.3 |
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 |
yoswink |
1.2 |
then proceed with the configuration accordingly. |
| 155 |
|
|
</note> |
| 156 |
|
|
|
| 157 |
swift |
1.1 |
<p> |
| 158 |
neysx |
1.3 |
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 |
swift |
1.1 |
</p> |
| 163 |
|
|
|
| 164 |
|
|
<pre caption="Getting the kernel sources"> |
| 165 |
neysx |
1.3 |
# <i>emerge gentoo-sources</i> |
| 166 |
swift |
1.1 |
</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 |
neysx |
1.3 |
# <i>cd /usr/src/linux</i> |
| 174 |
|
|
# <i>make menuconfig</i> |
| 175 |
swift |
1.1 |
</pre> |
| 176 |
|
|
|
| 177 |
|
|
<note> |
| 178 |
neysx |
1.3 |
The above example assumes that <path>/usr/src/linux</path> symlink points to |
| 179 |
swift |
1.1 |
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 |
neysx |
1.3 |
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 |
swift |
1.1 |
2.4.x kernel</uri>. |
| 193 |
|
|
</p> |
| 194 |
|
|
|
| 195 |
|
|
<note> |
| 196 |
neysx |
1.3 |
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 |
swift |
1.1 |
files accordingly. |
| 205 |
|
|
</note> |
| 206 |
|
|
|
| 207 |
|
|
<pre caption="make menuconfig options for 2.6 kernels"> |
| 208 |
|
|
Device Drivers ---> |
| 209 |
|
|
SCSI device support ---> |
| 210 |
|
|
|
| 211 |
neysx |
1.3 |
<comment>(Although SCSI will be enabled automatically when selecting USB Mass Storage, |
| 212 |
|
|
we need to enable disk support.)</comment> |
| 213 |
swift |
1.1 |
--- 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 |
neysx |
1.3 |
<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 |
swift |
1.1 |
|
| 223 |
neysx |
1.3 |
<comment>(Enable this option to see your USB devices in /proc/bus/usb. |
| 224 |
|
|
This is recommended.)</comment> |
| 225 |
swift |
1.1 |
[*] USB device filesystem |
| 226 |
|
|
|
| 227 |
|
|
<comment>(Select at least one of the HCDs. If you are unsure, picking all is fine.)</comment> |
| 228 |
neysx |
1.3 |
--- USB Host Controller Drivers |
| 229 |
swift |
1.1 |
<*> 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 |
neysx |
1.3 |
<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 |
swift |
1.1 |
--- 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 |
neysx |
1.3 |
<*> USB Prolific 2303 Single Port Serial Driver (NEW) |
| 254 |
swift |
1.1 |
</pre> |
| 255 |
|
|
|
| 256 |
|
|
<p> |
| 257 |
neysx |
1.3 |
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 |
swift |
1.1 |
working as it should. |
| 261 |
|
|
</p> |
| 262 |
neysx |
1.3 |
|
| 263 |
swift |
1.1 |
</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 |
neysx |
1.3 |
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 |
swift |
1.1 |
kernel</uri>. |
| 274 |
|
|
</p> |
| 275 |
|
|
|
| 276 |
|
|
<note> |
| 277 |
neysx |
1.3 |
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 |
swift |
1.1 |
files accordingly. |
| 286 |
|
|
</note> |
| 287 |
|
|
|
| 288 |
|
|
<pre caption="make menuconfig options for 2.4 kernels"> |
| 289 |
neysx |
1.3 |
<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 |
swift |
1.1 |
Input core support ---> |
| 292 |
|
|
<*> Input core support |
| 293 |
|
|
< > Keyboard support |
| 294 |
|
|
< > Mouse support |
| 295 |
|
|
< > Event interface support |
| 296 |
|
|
|
| 297 |
|
|
USB support ---> |
| 298 |
|
|
|
| 299 |
neysx |
1.3 |
<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 |
swift |
1.1 |
<*> Support for USB |
| 302 |
|
|
|
| 303 |
neysx |
1.3 |
<comment>(Enable this option to see your USB devices in /proc/bus/usb. |
| 304 |
|
|
This is recommended.)</comment> |
| 305 |
swift |
1.1 |
[*] Preliminary USB device filesystem |
| 306 |
|
|
|
| 307 |
|
|
<comment>(Select at least one of the HCDs. If you are unsure, picking all is fine.)</comment> |
| 308 |
neysx |
1.3 |
--- USB Host Controller Drivers |
| 309 |
swift |
1.1 |
<*> 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 |
neysx |
1.3 |
--- USB Device Class drivers |
| 314 |
swift |
1.1 |
< > 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 |
neysx |
1.3 |
Now that the options are set, you can (re)compile the kernel and USB support |
| 332 |
swift |
1.1 |
should be functional once you reboot into the new kernel. |
| 333 |
|
|
</p> |
| 334 |
neysx |
1.3 |
|
| 335 |
swift |
1.1 |
</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 |
neysx |
1.3 |
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 |
swift |
1.1 |
device. |
| 352 |
|
|
</p> |
| 353 |
|
|
|
| 354 |
|
|
<note> |
| 355 |
neysx |
1.3 |
<c>dmesg</c> will generally give a lot of output up front before coming to the |
| 356 |
swift |
1.1 |
info we need, as it reads the kernel ring buffer that has all the boot up |
| 357 |
neysx |
1.3 |
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 |
yoswink |
1.2 |
better in your system. |
| 361 |
swift |
1.1 |
</note> |
| 362 |
|
|
|
| 363 |
|
|
<pre caption="dmesg output for Memory Stick"> |
| 364 |
|
|
<comment>(Plug in Memory Stick into available USB port and then..)</comment> |
| 365 |
yoswink |
1.2 |
# <i>dmesg | less</i> |
| 366 |
swift |
1.1 |
|
| 367 |
neysx |
1.3 |
<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 |
swift |
1.1 |
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 |
neysx |
1.3 |
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 |
swift |
1.1 |
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 |
neysx |
1.3 |
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 |
swift |
1.1 |
cases and with all digital cameras that have USB support. |
| 419 |
|
|
</note> |
| 420 |
|
|
|
| 421 |
|
|
<p> |
| 422 |
neysx |
1.3 |
How would a USB mouse show up in case you had one? It will show up as an HID |
| 423 |
swift |
1.1 |
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 |
neysx |
1.3 |
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 |
swift |
1.1 |
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 |
neysx |
1.3 |
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 |
swift |
1.1 |
for USB in the userspace. |
| 453 |
|
|
</p> |
| 454 |
|
|
|
| 455 |
|
|
<p> |
| 456 |
neysx |
1.3 |
One of the most useful tools around is <c>lsusb</c>. This lists all the usb |
| 457 |
swift |
1.1 |
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 |
neysx |
1.3 |
Once installed, you can just run <c>lsusb</c> to get simple info on the USB |
| 466 |
swift |
1.1 |
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 |
neysx |
1.3 |
<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 |
swift |
1.1 |
<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 |
neysx |
1.3 |
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 |
swift |
1.1 |
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 |
neysx |
1.3 |
You can easily correlate the outputs of <c>lsusb</c> and <c>lsusb -t</c>, |
| 510 |
swift |
1.1 |
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 |
neysx |
1.3 |
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 |
swift |
1.1 |
better. |
| 525 |
|
|
</p> |
| 526 |
|
|
|
| 527 |
|
|
<p> |
| 528 |
neysx |
1.3 |
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 |
swift |
1.1 |
which the device can be used by the system. |
| 536 |
|
|
</p> |
| 537 |
|
|
|
| 538 |
|
|
<p> |
| 539 |
neysx |
1.3 |
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 |
swift |
1.1 |
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 |
neysx |
1.3 |
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 |
swift |
1.1 |
</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 |
neysx |
1.3 |
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 |
swift |
1.1 |
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 |
neysx |
1.3 |
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 |
swift |
1.1 |
all deserve some credit. So here we go! |
| 588 |
|
|
</p> |
| 589 |
neysx |
1.3 |
|
| 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 |
swift |
1.1 |
|
| 608 |
|
|
</body> |
| 609 |
|
|
</section> |
| 610 |
|
|
</chapter> |
| 611 |
|
|
</guide> |