Hardware-Treiber unter Linux losrobos@users - Anti
Transcription
Hardware-Treiber unter Linux losrobos@users - Anti
Hardware-Treiber unter Linux [email protected] Es ist bekannt, dass Linux mehr Hardware unterstützt als jedes andere Betriebssystem – und das überwiegend bereits im Standard- Lieferumfang. - Jedoch kann es natürlich auch vorkommen dass es einmal hakt- Info: wie werden Hardware-Treiber und Firmware unter Linux entwickelt? Unter Microsoft Windows ist dies einfach, die Hardware-Hersteller entwickeln die Treiber und die Firmware die ein Gerät benötigt um zu funktionieren selbst oder beauftragen für diesen Zweck Software-Entwickler, die Hardware-Hersteller geben dazu dem Software-Entwickler die nötigen Hardware-Spezifikationen (alle benötigten Infos über die Hardware) und zumeist noch einige Testgeräte damit der Software-Entwickler den Treiber gleich testen kann. - Die Hardware wird dann ganz einfach mit dem Treiber auf einer CD oder dem Gerät selbst (UTMS-Modems, DVB-Sticks) ausgeliefert, die Treiber werden vom User auf dem System installiert und das Gerät funktioniert zumeist ganz gut. Unter Linux funktioniert dies zumeist ganz anders, nur sehr wenige Hardware-Hersteller produzieren selbst die Treiber für Linux, NVIDIA, ATI, HP... Noch weniger Hardware-Hersteller liefern diese Treiber dann vielleicht auch noch auf den Installations-Medien mit der Hardware aus, aber diese Treiber kann man dann zumindest in den Repositories der Distributionen oder auf den Webseiten der Hardware-Hersteller finden. Einige andere Hardware-Hersteller geben zumindest die Hardware-Spezifikationen bekannt – was den besten Fall für Linux-Entwickler darstellt – zumeist sind Treiber von Hardware-Herstellern proprietär (kein offener Quellcode) und nicht immer bestens programmiert wie man ja unter Microsoft oft sieht wenn es Probleme gibt. Kennt der LinuxEntwickler die Hardware-Spezifikationen kann er den Treiber und wenn nötig die Firmware entwickeln und auf den Linux-Kernel abstimmen – und auch weiterentwickeln (haben proprietäre Treiber Fehler – muss man warten bis sich der Hersteller bemüht den Treiber zu verbessern – was natürlich dauern kann). Viele Hardware-Hersteller geben nicht einmal die Hardware-Spezifikationen bekannt – der schlimmste Fall – der Linux-Entwickler muss ein Microsoft-System zur Hand nehmen – den Arbeitsspeicher auslesen um zu sehen wie der Treiber mit dem Gerät interagiert, das Gerät zerlegen um zu sehen welche Hardware darin verbaut ist usw. - Dann kann begonnen werden den Treiber für das Gerät unter Linux zu entwickeln. Ubuntu – Installation von Treibern aus den Repositories: Debian – Installation von Treibern aus den Repositories: Wie findet man heraus wie das Gerät heißt und warum es nicht funktioniert?: USB-Geräte: PCI-Geräte (eingebaute): Warum funktioniert das Gerät nicht?: einzellne Firmware-Dateien installieren: sehr neue Geräte – in den Repositories gibt es noch keinen Treiber oder Firmware: Shellskript Die Hardware-Situation: lädt man sich eine Linux-Installations-CD/DVD aus dem Internet herunter und installiert das System auf dem Rechner funktioniert die meiste Standart-Hardware ohne weitere TreiberInstallationen (dazu zählen etwa: Mainbords, Prozessoren, Netzwerkkarten, Mäuse, Tastaturen, Bildschirme, Drucker, Laufwerke, Scanner, DVB-Hardware, Modems, Grafikkarten …), denn im Gegensatz zu Microsoft sind die meisten Treiber für alle möglichen Geräte im Linux-Kernel schon integriert (OpenSource-Treiber). - Vor allem bekannte sehr gebräuchliche Hardware ist sofort funktionsfähig. Nun kann es natürlich vorkommen das Sie zum Beispiel eine NVIDIA-Grafikkarte eingebaut haben – der OpenSource-Treiber bietet zur Zeit keine oder nur rudimentäre 3DFunktionen (doch daran wird gearbeitet) – um nun auch die 3D-Funktionen nutzen zu können muss man zur Zeit noch den originalen proprietären Treiber über die Paketverwaltung installieren (dieser ist nicht auf den Installations-Medien da er nicht quelloffen ist). Weiters kann es sein das zwar der Treiber einer Hardware quelloffen ist – jedoch nicht die Firmware (kommt des öfteren bei WLANChips und DVB-Sticks vor). Ein anderer Fall wäre dann noch sehr neue Hardware – für die noch kein Treiber in den Repositories der Distribution vorhanden ist – aber es den Treiber trotzdem schon gibt – in diesem Fall lädt man sich den Treiber aus dem Internet herunter und installiert diesen per Hand. Ubuntu – Installation von Treibern aus den Repositories: Ubuntu bietet eine einfache Möglichkeit Treiber und Firmware für erkannte Hardware aus den Repositories zu installieren, ist das Gerät angeschlossen sollte sich nach kurzer Zeit das Programm „zusätzliche Treiber“ melden – ansonsten starten Sie das Programm per Hand aus dem Menü „System – Systemverwaltung – zusätzliche Treiber“ - das Programm bietet für erkannte Hardware nicht installierte oder vorhandene Proprietäre Software zur Installation an, manchmal kann es sein das auch mehrere Treiber zur Installation vorgeschlagen sind – klicken Sie in diesem Fall diese an die mit „Empfohlen“ markiert wurde und klicken dann auf die Schaltfläche „Aktivieren“ - der Treiber und wenn benötigt die Firmware wird dann herunter geladen und installiert. - Nun sollte ein Neustart genügen damit die Hardware funktioniert. Debian – Installation von Treibern aus den Repositories: Debian bietet keine Treiber automatisch zur Installation an – öffnen Sie in diesem Fall einfach „Synaptic“ aus dem Menü „System – Systemverwaltung“ - klicken Sie auf das Symbol mit der „Lupe“ und geben den Namen des Gerätes ein und lassen es installieren. - Zumeist genügt unter Debian eine Ab- und wieder Anmeldung von der Desktop-Umgebung. Wie findet man heraus wie das Gerät heißt und warum es nicht funktioniert?: Auch wenn das Gerät unter Linux mangels eines fehlenden Treibers oder einer fehlenden Firmware noch nicht funktioniert heißt dies nicht das Linux die Hardware nicht kennt (wie etwa unter Microsoft), USB-Geräte: schließen Sie das Gerät an und geben nun den Befehl: lsusb in ein Terminal ein, die Ausgabe könnte zum Beispiel so aussehen: Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 002 Device 009: ID 12d1:1001 Huawei Technologies Co., Ltd. E620 USB Modem Bus 002 Device 007: ID 0bc2:2300 Seagate RSS LLC Bus 002 Device 006: ID 046d:c03e Logitech, Inc. Premium Optical Wheel Mouse (M-BT58) Bus 002 Device 005: ID 2304:0236 Pinnacle Systems, Inc. PCTV 72e [DiBcom DiB7000PC] Bus 002 Device 003: ID 04f2:b044 Chicony Electronics Co., Ltd Acer CrystalEye Webcam Bus 002 Device 002: ID 0409:005a NEC Corp. HighSpeed Hub Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub und zeigt alle angeschlossenen USB-Geräte an. - Unter dem angezeigten Namen kann man nun nach Informationen (z.Bsp. Unter Google mit dem Hinweis „Linux“) suchen. PCI-Geräte (eingebaute): geben Sie den Befehl: lspci in ein Terminal ein, die Ausgabe könnte z.Bsp. Etwa so aussehen: Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 002 Device 009: ID 12d1:1001 Huawei Technologies Co., Ltd. E620 USB Modem Bus 002 Device 007: ID 0bc2:2300 Seagate RSS LLC Bus 002 Device 006: ID 046d:c03e Logitech, Inc. Premium Optical Wheel Mouse (M-BT58) Bus 002 Device 005: ID 2304:0236 Pinnacle Systems, Inc. PCTV 72e [DiBcom DiB7000PC] Bus 002 Device 003: ID 04f2:b044 Chicony Electronics Co., Ltd Acer CrystalEye Webcam Bus 002 Device 002: ID 0409:005a NEC Corp. HighSpeed Hub Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub robert@debian-yedi:~$ lspci 00:00.0 Host bridge: Intel Corporation Mobile 4 Series Chipset Memory Controller Hub (rev 09) 00:02.0 VGA compatible controller: Intel Corporation Mobile 4 Series Chipset Integrated Graphics Controller (rev 09) 00:02.1 Display controller: Intel Corporation Mobile 4 Series Chipset Integrated Graphics Controller (rev 09) 00:1a.0 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #4 (rev 03 ) 00:1a.7 USB Controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #2 (rev 03) 00:1b.0 Audio device: Intel Corporation 82801I (ICH9 Family) HD Audio Controller (rev 03) 00:1c.0 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 1 (rev 03) 00:1c.1 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 2 (rev 03) 00:1c.2 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 3 (rev 03) 00:1d.0 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #1 (rev 03 ) 00:1d.1 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #2 (rev 03 ) 00:1d.2 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #3 (rev 03 ) 00:1d.3 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #6 (rev 03 ) 00:1d.7 USB Controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #1 (rev 03) 00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev 93) 00:1f.0 ISA bridge: Intel Corporation ICH9M LPC Interface Controller (rev 03) 00:1f.2 SATA controller: Intel Corporation ICH9M/M-E SATA AHCI Controller (rev 03) 00:1f.3 SMBus: Intel Corporation 82801I (ICH9 Family) SMBus Controller (rev 03) 04:00.0 Network controller: Broadcom Corporation BCM4312 802.11b/g LP-PHY (rev 01) 05:00.0 Ethernet controller: Atheros Communications AR8132 Fast Ethernet (rev c0) und zeigt alle eingebauten PCI-Geräte an. - Unter dem angezeigten Namen kann man nun nach Informationen (z.Bsp. Unter Google mit dem Hinweis „Linux“) suchen. Warum funktioniert das Gerät nicht?: ist es ein USB-Gerät schließen Sie es an und geben dann den Befehl: dmesg in ein Terminal ein, (die Ausgabe kann ziemlich lange ausfallen – denn es werden alle erkannten Geräte und Meldungen dazu angezeigt) suchen Sie nun nach dem Gerätenamen den Sie mit „lsusb“ oder „lspci“ heraus gefunden haben. Zu meist liegt das Problem nur noch an einer fehlenden Firmware-Datei die mittels dem Befehl „dmesg“ am entsprechenden Gerät angezeigt wird, notieren Sie sich den Namen der Firmware und suchen unter Google danach, laden Sie diese herunter und installieren diese (nächster Beitrag), ist die Firmware nicht so einfach zu finden markieren Sie die die komplette Zeile der Ausgabe von „dmesg“ von dem entsprechenden Gerät und suchen damit unter Google mit dem Hinweis „Linux“ einzellne Firmware-Dateien installieren: nach dem Herunterladen entpacken Sie die entsprechende Datei wenn nötig und öffnen nun ein Terminal – am besten die Datei liegt im Home-Verzeichnis – so brauchen Sie nur den folgenden Befehl ein zu geben: Ubuntu: sudo cp dateiname /lib/firmware Debian: su + Adminpasswort cp dateiname /lib/firmware nun starten Sie den Rechner neu und das Gerät sollte funktionieren sehr neue Geräte – in den Repositories gibt es noch keinen Treiber oder Firmware: suchen Sie nach dem Geräte-Namen mit dem Hinweis „Linux“ unter Google und laden das entsprechende Treiber-Paket herunter und entpacken das Archiv, über den Paketmanager „Synaptic“ kontrollieren Sie ob folgende Pakete installiert sind: gcc, binutils, make. Öffnen Sie das Verzeichnis mit den Treiber-Dateien und sehen Sie sich die „readme“ und „install“ Dateien an – sie beinhalten zumeist wenn nötig weitere benötigte Pakete die Sie dann über den Paketmanager installieren und wenn nötig spezielle Optionen die zum kompilieren benötigt werden. Öffnen Sie nun ein Terminal und wechseln mit dem Befehl: cd verzeichnisname in dem die TreiberDateien liegen, je nach den Optionen in den „readme“ und „install“ Dateien sollten nun die Befehle: Ubuntu: ./configure make und sudo make install Debian: ./configure make su + Adminpasswort make install genügen um den Treiber zu installieren, manche Hersteller bieten auch Treiber-Installationen per Shellskript an – was vor allem für Einsteiger die Installation erleichtert, Firefox öffnet solche Dateien beim Herunterladen als Webseite – warten Sie dann ganz einfach bis die Seite vollständig geladen ist (reines Text-Wirr-Warr) und speichern das Dokument per „Datei – Seite speichern unter“, auch können Sie den Treiber-Link ganz einfach rechts anklicken und „Ziel speichern unter“ wählen. Klicken Sie das Shellskript nun mit der rechten Maustaste an und wählen „Eigenschaften – Zugriffsrechte“ und klicken die Checkbox vor „als Programm ausführen“ an – nun öffnen Sie ein Terminal – wechseln per „cd verzeichnisname“ in das Verzeichnis in dem die Datei liegt (liegt sie direkt im Home-Verzeichnis ist dies nicht nötig) und installieren den Treiber mit dem Befehl: Ubuntu: sudo sh dateiname Debian: su + Administratorpasswort sh dateiname und folgen den Anweisungen dieses Dokument liegt unter der Lizenz: GNU FDL http://www.gnu.org/copyleft/fdl.html , losrobos 2011