Introduction to IEEE 1394 on Linux
About IEEE 1394 (FireWire)
IEEE 1394 is a standard defining a high speed serial bus. This bus is also named FireWire by Apple or i.Link by Sony. All these names refer to the same thing, but the neutral term IEEE 1394 (or just 1394) is used on these web pages and in the sources.
What exactly is IEEE 1394? It is a serial bus similar in principle to USB, but runs at speeds of up to 800 Mbit/s and is not centered around a PC (i.e. there may be none or multiple PCs on the same bus). It has a mode of transmission which guarantees bandwidth which makes it ideal for digital video cameras and similar devices.
If you have 1394 hardware you can access it under Linux. The supported chipsets are Texas Instruments PCILynx/PCILynx2 and OHCI compliant chips (produced by various companies). Not supported are a proprietary Sony chipset found in older Vaio systems or the Adaptec AIC-5800. Fortunately for endusers, only OHCI compliant controllers are presently used by manufacturers of FireWire cards and mainboards.
Most types of external FireWire devices, notably cameras and storage devices, work with standardized protocols, hence are typically well supported by Linux' drivers and userspace software. See http://www.linux1394.org/hcl.php for extensive hardware compatibility information.
IEEE 1394 support in old kernels
FireWire-enabled Linux versions are 2.3 through 2.6. The subsystem has been included with the standard Linux kernel sources since version 2.3.40. The subsystem was also made available as a patch for Linux kernel version 2.2.
Development and maintenance exclusively concentrates on the current 2.6 kernel series now. No FireWire driver updates went into 2.4 for quite some time now.
IEEE 1394 support in Linux 2.6
Up until kernel 2.6.36 inclusive, the classic IEEE 1394 alias Linux1394 were provided in the mainline kernel:
- ieee1394: base driver
- ohci1394: for OHCI 1.0, OHCI 1.1, and 1394b controllers
- pcilynx: for the rare PCILynx controllers (only limited, buggy or missing support by the drivers listed below)
- sbp2: for storage devices and other SBP-2 devices
- eth1394: for IPv4 over FireWire
- raw1394: for all sorts of different applications, used via libraw1394
- dv1394: for a few DV applications (deprecated in favor of raw1394 + libraw1394)
- video1394: for applications using industrial cameras and webcams and a few other special purposes, especially via libdc1394
These drivers have been removed in kernel 2.6.37.
IEEE 1394 in Linux 2.6/ Linux 3.x
Since kernel 2.6.22, a newer driver stack called Juju provides for IEEE 1394 kernel support:
- firewire-core: base driver and userspace access similar to raw1394 and video1394, but not binary compatible (libraw1394 v2 and libdc1394 v2 are compatible)
- firewire-ohci: for OHCI 1.0, OHCI 1.1, and 1394b controllers
- firewire-net: for IPv4 over FireWire
- firewire-sbp2: for accessing storage devices and other SBP-2 devices
- sbp-target: to let the Linux PC act as a storage device
- firedtv: for DVB-C, DVB-T, DVB-S tuner boxes (FireDTV) and tuner cards (FloppyDTV) from Digital Everywhere
- snd-firewire-speakers: for LaCie FireWire Speakers and Griffin FireWave audio devices
- snd-isight: for the microphone in the Apple iSight webcam
There are also two standalone drivers for special use cases:
- init_ohci1394_dma: initialize OHCI-1394 remote DMA early during boot for remote debugging
- nosy: capture all FireWire traffic for protocol analysis using a PCILynx controller card