Ubuntu 12.04 „Precise Pangolin“
Ubuntu 10.04 „Lucid Lynx“
FireWire, auch als i.Link bekannt, ist eine nach IEEE 1394 spezifizierte Hardwareschnittstelle zur Einbindung von Festplatten, digitalen Videokameras, Netzwerk-Adapter etc. Entsprechende Treiber sind bereits im Kernel enthalten. Wird das ein oder andere Audiogerät nicht unterstützt, wird man vielleicht im FFADO-Projekt fündig. Diese Wiki-Seite hier ist primär für Problemlösungen bezüglich FireWire bestimmt.
Die FireWire-Unterstützung im Kernel ist vor einiger Zeit vollständig neu geschrieben worden. Sie ist ab Kernel 2.6.22 als neues Modul firewire
eingeflossen und wurde seitdem verbessert und stabilisiert, bis im Kernel 2.6.37 die alten Treiber um raw1394
aus dem Kernel entfernt wurden.
Ob in dem Rechner eine FireWire Schnittstelle vorhanden ist, kann mit dem folgenden Kommando im Terminal [1] nachgesehen werden:
lspci | grep FireWire
Beispiel:
03:01.3 FireWire (IEEE 1394): VIA Technologies, Inc. VT6306/7/8 [Fire II(M)] IEEE 1394 OHCI Controller (rev 46)
Wird keine solche oder ähnliche Zeile ausgegeben, ist FireWire entweder nicht vorhanden oder wird nicht erkannt.
Ob neben der vorhandenen FireWire-Schnittstelle auch die Treibermodule geladen werden konnten, erkennt man im Terminal mit dem Kommando (nebst Ausgabe):
lsmod | grep firewire
Ausgabe:
firewire_ohci 40370 0 firewire_core 62646 1 firewire_ohci crc_itu_t 12707 1 firewire_core
Kommt keine der Zeilen oben, ist das Modul nicht geladen worden. Dann muss es mit Modprobe manuell geladen werden, in diesem Fall also mit
sudo modprobe firewire_ohci
Das Modul firewire_ohci
lädt gleichzeitig firewire_core
, von dem es abhängt.
Wenn das Modul geladen ist, muss auch eine Geräte-Datei existieren. Diese lautet /dev/fw0
, bei mehreren genutzten Schnittstellen werden weitere mit fortlaufender Zahl angelegt:
ls -l /dev/fw*
crw------- 1 root root 251, 0 2012-07-14 17:20 /dev/fw0
bzw. nach Anschließen einer Kamera:
ls -l /dev/fw*
crw------- 1 root root 251, 0 2012-07-14 17:20 /dev/fw0 crw-rw----+ 1 root video 251, 1 2012-07-14 18:05 /dev/fw1
in Ubuntu ist FireWire bereits in Udev eingepflegt, so dass FireWire-Gerätedateien sofort angelegt werden. Dennoch kann man die hinterlegten Regeln für Modifikation der Rechte etc. nachgesehen werden unter:
grep -i firewire /lib/udev/rules.d/*
und wird dort bereits in der Datei 50-udev-defaults.rules fündig, in denen dem ausführenden Benutzer die neue Gerätedatei der Gruppe video
zuweist (Siehe auch Benutzer und Gruppen)
Mit dvgrab sollte man nun die Videokamera im Terminal steuern können:
dvgrab -i
rom1394_0 warning: read failed: 0x0000fffff0000414 error reading config rom directory for node 0 Found AV/C device with GUID 0x0800460104bd68a3 Going interactive. Press '?' for help.
beginnt die Kommunikation im interaktiven Modus. Weitere Information im Artikel dvgrab.
Will man unter Ubuntu 11.04 eine externe Festplatte per Firewire betreiben, findet man zunächst in der Protokolldatei /var/log/syslog Fehlermeldungen wie die folgenden:
Oct 5 19:31:49 rechner kernel: [ 937.083121] firewire_ohci: node ID not valid, new bus reset in progress Oct 5 19:31:59 rechner kernel: [ 946.586761] firewire_core: skipped bus generations, destroying all nodes Oct 5 19:31:59 rechner kernel: [ 946.586786] firewire_core: Parent port inconsistency for node 0: parent_count=1 Oct 5 19:31:59 rechner kernel: [ 946.586791] firewire_core: topology build failed
und die Platte wird nicht automatisch erkannt und eingebunden.
Startet man nun Ubuntu 10.04 von einer Live-CD, dann wird die Firewire-Festplatte sofort erkannt und kann eingebunden werden. Macht man dann einen Neustart des Rechners (Reboot, nicht aus- und einschalten) und bootet wieder Ubuntu 11.04, dann wird die Platte auch hier sofort erkannt und kann benutzt werden. Sieht so aus, als würde bei (K)ubuntu 11.04 die Firewire-Schnittstelle beim Booten nicht korrekt initialisiert. Ein zwischenzeitliches Booten von 10.04 erledigt das, so dass anschließend die Firewire-Hardware auch unter 11.04 funktioniert.
Zunächst muss man überprüfen, ob das benötigte Modul geladen ist. Dazu gibt man Folgendes im Terminal [3] ein:
lsmod | grep 1394
Die Ausgabe könnte dann etwa so aussehen:
dv1394 23312 0 raw1394 32048 0 ohci1394 38088 1 dv1394 ieee1394 369784 4 dv1394,raw1394,sbp2,ohci1394
Ist kein Modul geladen, erfolgt auch keine Ausgabe. Sollte das benötigte Modul nicht angezeigt werden, so muss es mit folgendem Befehl geladen werden:
sudo modprobe raw1394
Sollte das oben Genannte vollführt worden sein, ist das Gerät dem normalen Benutzer und den von diesem gestarteten Programmen nicht zugänglich. Um dies zu beheben, geht man wie folgt vor:
Im Terminal in das Verzeichnis /etc/udev/rules.d/ wechseln
Auflisten des Verzeichnisinhalt mit dem Befehl "ls
"
Eine neue Datei 50-raw1394.rules im gleichen Verzeichnis erstellen.
In der 40-permissions.rules (wenn vorhanden) nach dem Abschnitt "IEEE1394
" suchen. Dort die Zeile
KERNEL=="raw1394", GROUP=="disk"
in
KERNEL=="raw1394", GROUP=="video", MODE=="0664"
umändern.
In die 50-raw1394.rules (sofern 40-permission.rules nicht vorhanden und diese Datei neu erstellt wurde) kommt nur die Zeile
KERNEL=="raw1394", GROUP=="video", MODE=="0664"
Anschließend trägt man die Nutzer, die auf diese Geräte Zugriff haben sollen, noch in die Gruppen "video" ein [2].
Es ist zu beachten, dass raw1394-Geräte uneingeschränkten Zugriff auf das System bieten (sie können z.B. den Hauptspeicher auslesen und teilweise auch hineinschreiben). Man sollte also nur vertrauenswürdige Personen in die Gruppe aufnehmen, die darauf achten, dass keine nicht vertrauenswürdigen Geräte angesteckt werden / worden sind!
Damit die Änderungen in den Dateien auch wirksam werden, muss man abschließend folgenden Befehl im Terminal eingeben:
sudo /etc/init.d/udev restart
Unter Ubuntu 10.04 fasst folgender Befehl diese Schritte zusammen:
echo 'KERNEL=="raw1394", GROUP=="video", MODE=="0664"' | sudo tee /etc/udev/rules.d/50-raw1394.rules && sudo restart udev
Zwei Computer über FireWire zu verbinden ist ähnlich einfach wie mit normalen Netzwerkkarten, jedoch ist es schneller, wenn man keine Gigabit-Netzwerkkarten besitzt. Beide Computer benötigen einen FireWire-Anschluss. Zum Verbinden werden die Computer über ein normales FireWire-Kabel zusammengeschlossen.
Nachdem beide Computer verbunden sind, sollte der Befehl
dmesg | grep 1394
etwas Ähnliches wie hier ausgeben:
... [ 15.431906] ohci1394: fw-host0: OHCI-1394 1.1 (PCI): IRQ=[18] MMIO=[f9aff800-f9afffff] Max Packet=[2048] IR/IT contexts=[4/4] [ 15.841250] ieee1394: Host added: ID:BUS[0-00:1023] GUID[474fc000f482e50a] ... [ 2321.103535] ieee1394: Node added: ID:BUS[0-00:1023] GUID[001484f50025af2e] [ 2321.105028] ieee1394: Node changed: 0-00:1023 -> 0-01:1023
Wichtig ist die Zeile ...Node added...
(oder auch Node resumed
, wenn man das Kabel abzieht und wieder anschließt), das bedeutet, dass die beiden Computer korrekt verbunden sind.
Die Ethernet-Treiber für FireWire sind in Ubuntu standardmäßig deaktiviert. Deshalb müssen sie noch geladen werden:
sudo modprobe eth1394
Damit die Treiber beim Start von Ubuntu automatisch geladen werden, muss der blacklist-Eintrag in der Datei /etc/modprobe.d/blacklist.conf entfernt werden. Dazu öffnet man die Datei in einem Editor [3] mit Root-Rechten und sucht nach:
blacklist eth1394
und kommentiert die Zeile einfach aus:
#blacklist eth1394
Jetzt sollte eine neue "Netzwerkkarte" verfügbar sein. Man kann diese nun genauso wie eine herkömmliche Netzwerkkarte einrichten.
Man kann natürlich nicht nur Verbindungen zwischen Linux-Computern aufbauen, sondern auch zu Windows oder Mac OS X. Unter Windows existiert dafür in den Netzwerkverbindungen eine Verbindung, die standardmäßig "1394-Verbindung" heißt.