ADVANCED
TRAINING & RESEARCH LABS

This is a one day program that describes the
USB protocol and how USB device drivers are written under linux to
interface with various kinds of devices.

The course starts off with a detailed
description of the USB standards. The USB architecture, Host Controller
design, Types of data transfers, bandwidth negotiation, protocol etc.
are explained clearly.

The course then looks at how devices are
enumerated and how the hotplug mechanism is used to associate a suitable
driver for the device. The course looks at vendor id, device id, and
other vital product data available through querying the control pipe.
The various descriptors are explained and interfaces, default interface
and alternative configuration interfaces are covered in detail.

The course then looks at the important
header file for all USB programming, usb.h and looks at the available
data structures maintained inside the kernel for various USB related
activities.

The programming APIs are explained in detail
and the URB concept is also covered.

The course looks at a Host to Host USB
Bridge Chipset from Prolific Technologies, PL-2301 as an example to
demonstrate a simple driver.

Finally, the usbnet.o driver is explained to
show how a complete networking stack is built on top of a simple serial
cable.

Target Audience:

This course would be ideal for linux systems
programmers who have not worked with USB earlier. The course would also
be useful for systems programmers already familiar with the USB bus
coming into linux for the first time, in case they are interested in
knowing how linux works with the USB bus interface.

Pre-requisites:

Knowledge of 'C' programming is mandatory
for this course. Also, some knowledge of linux internals and kernel
programming is deemed necessary since these are not part of the 1-day
course.