This documents my personal flow for downloading and installing a Linux kernel with my xHCI and USB 3.0 code. Until the code is in the upstream kernel and shipping in Linux distributions, you'll have to follow these directions to get Linux USB 3.0 support.
The xHCI (USB 3.0) host controller driver and initial support for USB 3.0 devices is now publicly available on my kernel.org git tree. Greg K-H has queued the patches for 2.6.31, so Linux users should have official USB 3.0 support around September 2009. This is impeccable timing, since NEC recently announced they'll be producing 1 million xHCI PCI express add-in cards in September.
This means that Linux will be the first operating system with official USB 3.0 support. I'm working with Keve Gabbert (the OSV person in my group at Intel) to make sure that Linux distributions like Ubuntu and Red Hat pick up the xHCI driver. Advanced users can always compile their own kernel on a standard distro install.
I hope that some USB 3.0 vendors who have prototypes will test with my driver. Instructions on how to compile a kernel using my git tree will follow.
This is a giant project that I've been working on for the past year and a half. It's gratifying to see the code finally released, and exciting to know that hardware is on its way.
USB is getting a facelift!
In the beginning, there was USB 1.1, with the "low speed" and "full speed" devices (at 1 Mbps and 12 Mbps, respectively). Then USB 2.0 came along with "high speed" devices that ran at 480 Mbps. Now the new USB 3.0 bus specification defines "SuperSpeed" devices that run at 5 Gbps (5,120 Mbps).
Now that the bus specification is public, I can finally talk about the code I've been developing at work. I've been writing a Linux driver for xHCI (the new USB 3.0 host controller), and changing the Linux kernel stack to support USB 3.0 devices. On November 17th, I got to demo my work at the world's first USB 3.0 "SuperSpeed" Developers Conference.
This is a demo showing a USB 3.0 Mass Storage Device (commonly called a USB drive, thumb drive, or flash drive) prototype running under Linux with an unmodified Mass Storage Device driver. My Linux xHCI driver is necessary to communicate with the USB 3.0 device through the xHCI host controller prototype. The FPGA prototype was provided by Fresco Logic, a company that sells host controller and device IP.
The demo showed speeds that were about 3.5 times faster than USB 2.0 high speed devices. I expect this demo to be even faster when the device and host controller are implemented in silicon.
Details about USB 3.0
USB 3.0 is 10 times faster than USB 2.0. Roughly speaking, it means that a file that takes 30 minutes to transfer over USB 2.0 could take 3 minutes to transfer under USB 3.0.
USB 3.0 also provides better power management, which translates to longer laptop battery life. USB 3.0 is backwards compatible. That means you can plug all your USB 2.0 devices into a USB 3.0 port, or plug your USB 3.0 device into a USB 2.0 port. The USB 3.0 device will work at USB 2.0 speeds in the latter case, but that means consumers don't have to upgrade their PC or laptop to use USB 3.0 devices at the slower speed.
In this PSAS weekly episode, I talk about the rocket airframe and the software for the avionics sensor nodes.
Tim showed off pictures of his setup for creating the light-weight fiberglass shell that goes around our rocket:
What is USB 3.0?
USB 3.0 is a new Universal Serial Bus specification that was released in November 2008. It promises wire speeds of 5Gbps, bi-directional communication, and better power management.
What is xHCI?
The eXtensible Host Controller Interface (xHCI) is the hardware on your PC that talks to USB 3.0 devices and legacy USB devices. The xHCI specification details can be found on Intel's website.
Wasn't USB 2.0 good enough? Why is USB 3.0 cool?
USB 3.0 is expected to be 10 times faster than USB 2.0. It's also more power efficient, which translates into longer laptop battery life. Since USB 3.0 packets are routed instead of broadcast, idle links can be automatically put into low power states without the help of an operating system. USB 3.0 also adds the concept of endpoint "streams", which are used to submit multiple SCSI commands and get better performance out of USB attached SCSI hard drives and flash drives.
What about all my old USB devices?
Older USB devices will still work when you plug them into a USB 3.0 port on an xHCI host controller. They will still operate at their original speeds.
Can I plug a USB 3.0 device into my old computer?
If you plug a USB 3.0 device into an EHCI host controller, it will work at USB 2.0 speeds. To get 5Gbps wire speed, you need an xHCI host controller.
USB 3.0 sounds pretty cool. When will Linux support it?
The Linux xHCI driver has been merged into 2.6.31. The git development tree for the driver can be found on kernel.org
Is there any mailing list for xhci driver related discussions?
You can subscribe to the linux-usb mailing list at http://www.linux-usb.org/mailing.html I'll also post updates on my blog.
I found a bug in the xHCI driver. What should I do?
Enable xHCI debugging in your kernel (
CONFIG_USB_XHCI_HCD_DEBUGGING) and send
your dmesg output to firstname.lastname@example.org. Please CC the Linux USB
mailing list email@example.com.
You didn't answer my question; where can I find more info?
See a longer blog post for more information.