Da steht es nun in seiner vollen Pracht auf dem Schreibtisch: das nagelneue Widescreen-Centrino-Laptop, das Laufzeiten von mehr als vier Stunden bei vollem Multimediagenuss verspricht. Damit dem guten Stück unter Linux nicht vorzeitig die Puste ausgeht, sind einige Klimmzüge nötig.
Erfahrene Anwender kennen die Problematik des Hardware-Kaufs: Prinzipiell sollte man für den Einsatz unter Linux auf Bewährtes zurückgreifen. Die Linux-Entwicklergemeinde braucht Zeit, um auf Trends in der Hardware-Szene zu reagieren und die benötigten Treiber zu schreiben. Dass man mittlerweile auch, entsprechende Recherche und etwas Lernbereitschaft vorausgesetzt, unbesorgt ins Neuheitenregal greifen darf, zeigt der folgende Erfahrungsbericht zur Inbetriebnahme eines Laptops der aktuellen Centrino-Dothan-Serie, hier im Speziellen des Samsung M40. Die geschilderte Vorgehensweise ist nicht unbedingt typspezifisch und kann auch auf andere Geräte übertragen werden.
Vorauswahl und Gesundheits-Check
Vor dem Kauf stellt sich die Frage: Welche Laptops eignen sich gut, welche weniger gut für den Betrieb unter Linux? Eine pauschale Antwort kann man hier kaum geben – fest steht, dass die gängigen Distributionen mittlerweile mit nahezu jeder Hardware zurecht kommen. Ein anderes Thema ist das Energie-Management, das wegen schlecht angepasster BIOS-Software zum K.O.-Kriterium werden kann. Wer auf der sicheren Seite sein möchte, recherchiert auf den einschlägigen Seiten im Internet [1], ob es schon Linux-Erfahrungen mit ähnlichen Modellen der Firma des Vertrauens gibt.
Hat man sich für ein Gerät entschieden, sollte man vor dem Kauf zunächst ein Linux-Live-System wie z.B. Knoppix [2] booten, um einen ersten Eindruck von der Linux-Kompatibilität zu bekommen. Dank Fernabsatzgesetz hat man bei der Bestellung eines Geräts über den Online-Handel 14 Tage Zeit, das Gerät etwas genauer in Augenschein zu nehmen: Nach dem Booten einer aktuellen Knoppix-CD im Kernel-2.6-Modus (Boot-Parameter linux26) sollten zumindest Grafik und Sound sauber laufen. Eine große Bedeutung kommt auch der Internet-Anbindung zu, lassen sich doch auf diesem Weg die später notwendigen System-Updates auf den Rechner befördern. Zum Test der Netzwerkschnittstelle oder eines eingebauten Modems bedient man sich der Knoppix-eigenen Netzwerk-/Internet-Konfigurationsroutine. Darüberhinaus kann man prüfen, ob das Verzeichnis /proc/acpi existiert und ACPI-relevante Einträge enthält; am einfachsten geht das mit einem Dateibrowser wie dem Konqueror (Abbildung 1). Findet man nur wenige Einträge oder überhaupt kein Verzeichnis /proc/acpi vor, sollte man von dem speziellen Laptop die Finger lassen.
Vorsicht, falls Sie auch gleich noch den Speicher mit dem in Knoppix integrierten Programm memtest86 überprüfen möchten: Es eignet sich nicht für die aktuelle Centrino-Generation, da das Cache-Handling mit dieser Hardware nicht funktioniert. Das Resultat ist ein nach wenigen Minuten stark überhitzter Prozessor, unter [3] gibt es eine angepasste Version des Speichertests.
Distributionsroulette
Die Chancen, modernste Hardware unter Linux zu nutzen, steigen mit der Aktualität des Kernels bzw. der Distribution. Beim Samsung M40 scheiterte beispielsweise eine weitere Beschäftigung mit der aktuellen Suse-Distribution 9.1, da sich anders als bei den ersten Tests mit Knoppix die Netzwerkkarte nicht ansprechen ließ. Einen Original-Kernel von www.kernel.org unter Suse Linux zu installieren, verursacht oft Komplikationen. Daher fiel die Wahl auf die Community-Distribution Fedora Core 2 [4], die sich über den up2date-Mechanismus gleich nach der Installation auf den aktuellen Stand bringen lässt. Bereits wenige Tage nach dem offiziellen Erscheinen steht dort der jeweils aktuelle Kernel als RPM-Paket zur bequemen Installation bereit.
Auf die Installation der aktuellen Fedora-Distribution gehen wir hier nicht weiter ein; nähere Hinweise findet man unter anderem in [5]. Lediglich ein Hinweis: Wegen eines Fehlers in der Installationsroutine erzeugt Fedora Core manchmal eine fehlerhafte Partitionstabelle, die unter anderem die spätere Bearbeitung mit Partitionierungswerkzzeugen wie Partition Magic behindert und im Extremfall das Booten eines parallel installierten Betriebssystems verhindern kann. Das Problem umgeht man, indem man beim Booten der Installations-CD am Boot-Prompt die exakte Festplattengeometrie übergibt. Hier ein Beispiel für eine Installation auf der Platte hda (also der ersten IDE-Platte):
boot: linux hda=14593,255,63
Die hier anzugebenden Daten liefert der Befehl
fdisk -l /dev/hda
in der Shell einer gebooteten Knoppix-CD. Für die Installation wählt man das Desktop-Standardsystem sowie das Metapaket Entwicklungstools aus der Kategorie Softwareentwicklung aus. Hier können Sie auch zusätzlich den Desktop KDE aus – KDE enthält das Paket klaptop, das für eine optimale Nutzung der Laptop-Funktionen sorgt. Nach der Installation von Fedora Core 2 sollte das System sofort aktualisiert werden. Dafür bietet sich die Fedora-eigene Lösung up2date an: Neue Update-Pakete zeigt das Tool Red Hat Network Alert an (Abbildung 2). Wichtig ist dabei, zusammen mit dem Kernel auch die Kernel-Quelldateien (engl.: kernel source code) zu aktualisieren. Wenn möglich, sollte man stets den distributionseigenen Kernel verwenden. Benötigen Sie ganz aktuelle Features, können Sie alternativ auch den Original-“Vanilla”-Kernel von kernel.org benutzen. In jedem Fall empfiehlt sich für ein Update der Quellen ein breitbandiger Internet-Anschluss, da die Quellen selbst in gepackter Form rund 50 MByte groß sind.
Nach der Installation des Systems prüfen Sie zunächst, wie gut Linux die Hardware erkannt hat und ob die ACPI-Implementierung funktioniert. Dazu werfen Sie einen Blick in die Log-Datei des Boot-Vorgangs:
# dmesg | grep ACPI
…
ACPI: Embedded Controller [H_EC] (gpe 28)
ACPI-0347: * Error: Handler for [EmbeddedControl] returned
AE_BAD_PARAMETER
…
Im Normalfall erscheinen einige Fehlermeldungen, die auf eine unzureichende ACPI-Implementierung hinweisen – dann ist das Energie-Management unbrauchbar. Zur Abhilfe erstellen Sie einen neuen Kernel.
Des Pudels Kern
Ein Sprichwort in der Linux-Szene besagt, dass früher oder später der Punkt kommt, an dem jeder ambitionierte Linux-Anwender einen eigenen Kernel übersetzen muss. Kasten 1 zeigt die wesentlichen Punkte, die hierbei zu berücksichtigen sind.
Kasten 1: Kernel-Kompilierung ohne Risiken@KL:Sind die Kernel-Quellen und die Entwicklerwerkzeuge installiert, sollten Sie zunächst als Testlauf einen Kernel mit den Eigenschaften des Distributions-Kernels erzeugen, um eine solide Basis zu schaffen. Arbeiten Sie mit mehreren Kernel-Versionen, setzen Sie als
root
einen symbolischen Link im Verzeichnis
/usr/src
namens
linux
auf die aktuellste Version:
ln -s /usr/src/linux-2.6.8-1.521 /usr/src/linux
Wechseln Sie dann als root mit cd /usr/src/linux in das aktuelle Kernel-Quellverzeichnis. Zur Beseitigung von “Altlasten” aus etwaigen vorangegangenen Compiler-Läufen reinigen Sie zur Sicherheit das Verzeichnis mit
make mrproper
Mutige Naturen können an dieser Stelle auch schon Kernel-Patches einspielen, wie z. B. den im Text beschriebenen ACPI-Patch. Die Konfiguration des Original-Kernels übernehmen Sie mit
make oldconfig
(Für Suse-Anwender: Hier lautet das Kommando make cloneconfig). Als einzige Änderung sollten Sie beim ersten Kompilierversuch den Prozessortyp in der Kernel-Konfiguration an das eigene System anpassen. Dazu rufen Sie das Kernel-Konfigurationswerkzeug mit
make xconfig
auf und setzen den Prozessortyp unter Processor Type and features | Processor family auf Pentium M. Danach übersetzen und installieren Sie den Kernel mit dem klassischen Kernel-Dreisatz
make make modules_install make install
Jetzt können Sie den neuen Kernel testweise booten. Vermeiden Sie dabei den grafischen Runlevel 5, da bei Verwendung von proprietären Treibern, wie z. B. dem 3D-beschleunigten NVidia-Treiber, diese Treiber nach dem Booten meist neu installiert werden müssen. Den Standard-Runlevel setzen Sie daher vor dem Booten in der Datei /etc/inittab auf 3:
# Auszug aus /etc/inittab id:3:initdefault:
Das System sollte nun problemlos booten. Haben Sie vorher mit einer älteren Kernel-Version gearbeitet, erscheint diese weiterhin im Auswahlmenü des Boot-Managers grub; ein selbst erstellter Kernel erhält bei Fedora Linux die Endung custom.
Loggen Sie sich nach Abschluss des Boot-Vorgangs als normaler Anwender auf einer Konsole ein und testen Sie mit startx, ob die grafische Oberfläche gestartet werden kann. Damit haben Sie eine geeignete Basis für die weiteren, im Text beschriebenen Kernel-Anpassungen. Alle folgenden Änderungen nehmen Sie wieder über make xconfig vor, die Kernel-Übersetzung läuft ebenfalls wie oben beschrieben ab; der Aufruf make mrproper kann entfallen.
Nach dem ersten Kernel-Test rücken Sie systematisch der fehlerhaften ACPI-Implementation zu Leibe, dazu sind die folgenden Schritte nötig: *
DSDT aus dem BIOS extrahieren * DSDT mit Intels IASL-Compiler disassemblieren * Tabelle neu kompilieren und Fehler suchen * Fehler korrigieren und dem Kernel die geänderte Tabelle beim Booten übergeben
Intels IASL-Compiler finden Sie unter [6]. Dort folgen Sie dem Link ACPI CA – Unix Build Environment und installieren nach das Quellpaket nach dem Download wie folgt:
$ tar xzf acpica-unix-version.tar.gz $ cd acpica-unix-version/compiler $ make
Werden Sie mit su zum Administrator und kopieren Sie die DSDT in das Verzeichnis des Compilers:
# cp /proc/acpi/dsdt .
Anschließend disassemblieren Sie die DSDT mit dem Intel-Tool:
# ./iasl -d dsdt
Das Ergebnis finden Sie in der Datei dsdt.dsl. Diese kompilieren Sie nun, wodurch sich die Fehler offenbaren:
# ./iasl -tc dsdt.dsl … dsdt.dsl 312: Method (_WAK, 1, NotSerialized) Warning 2026 - ^ Reserved method must return a value (_WAK) dsdt.dsl 2575: Field (ECR, DWordAcc, Lock, Preserve) Error 1048 - ^ Host Operation Region requires ByteAcc access dsdt.dsl 2621: Method (_GLK, 1, NotSerialized) Warning 2024 - ^ Reserved method has too many arguments ( _GLK requires 0) …
Debugging von Hand
Interessant sind die Nummern der Fehler und die Zeilenangaben in Bezug auf die Datei dsdt.dsl. Um die Fehler zu beseitigen, werfen Sie einen Blick ins ACPI-How-to, das im Internet unter [7] zu finden ist. Der Punkt fix broken dsdt table listet eine Vielzahl möglicher Fehler auf und erklärt, wie man sie behebt. Das erledigen Sie direkt mit einem beliebigen Editor in der Datei. Nach jeder Änderung sollten Sie den Compiler erneut starten und nachsehen, ob der Fehler bzw. die Warnung verschwunden ist. Idealziel ist ein Compiler-Durchlauf ohne Fehler und Warnungen. Wem dieser Vorgang des Patchens zu kompliziert und risikoreich erscheint, der kann unter [8] eine korrigierte DSDT-Tabelle für seinen speziellen Laptop suchen. Jedoch sei auch hier gewarnt: Bereits eine abweichende Hauptspeichergröße im Vergleich zum Ausgangssystem, für das die Tabelle erstellt wurde, kann zu Problemen führen.
Die neu erzeugte fehlerfreie DSDT mit dem Namen dsdt.hex muss nun dem Kernel beim Booten übergeben werden. Zu diesem Zweck patchen Sie die Kernel-Quellen. Wer aktuelle ACPI-Funktionen in seinem Kernel haben möchte, kann zusätzlich von [8] einen Patch herunterladen und installieren, dies ist jedoch für die elementaren Funktionen nicht notwendig. Achten Sie beim Download darauf, dass der Patch zu Ihrer Kernel-Version passt. Den Patch kopieren Sie als root in das Verzeichnis /usr/src/linux und spielen ihn mit den folgenden Befehlen ein:
cp acpi-patch-version.diff.bz2 /usr/src/linux cd /usr/src/linux bunzip2 -c acpi-patch-version.diff.bz2 | patch -p1
Eventuelle Nachfragen, ob der Patch tatsächlich angewendet werden soll, bestätigen Sie. Die geänderte DSDT kopieren Sie dann in das Kernel-Quellverzeichnis /usr/src/linux/drivers/acpi:
cp dsdt.hex /usr/src/linux/drivers/acpi/acpi_dsdt.h
Damit der Kernel die Datei beim Booten einliest, passen Sie noch die Datei osl.c wie in Kasten 2 gezeigt an. Wollen Sie die Befehle aus dem Kasten nicht von Hand eingeben, finden Sie sie auch in der Anleitung auf [9].
Nun prüfen Sie die ACPI-Konfiguration des Kernels noch einmal mit make xconfig; Abbildung 3 zeigt die relevanten Einstellungen. Schließlich übersetzen und installieren Sie den Kernel, wie in Kasten 1 beschrieben.
Kasten 2: Anpassungen in osl.c
// Auszug aus /usr/src/linux/drivers/acpi/osl.c
// Ergaenze include:
#include "acpi_dsdt.h"
…
acpi_status
acpi_os_table_override (struct acpi_table_header *existing_table,
struct acpi_table_header new_table)
{
if (!existing_table || !new_table)
return AE_BAD_PARAMETER;
// *new_table = NULL; wurde ersetzt durch:
*new_table=(strncmp(existing_table->signature, DSDT_SIG, 4)) ? NULL
: (struct acpi_table_header *) AmlCode;
return AE_OK;
}
Appetitzügler
Nun wird es spannend: Booten Sie das System mit dem neuen Kernel und prüfen Sie mit
dmesg | grep ACPI
ob die Fehlermeldungen verschwunden sind. Eine der Meldungen sollte darüber informieren, dass Linux die DSDT des BIOS durch die selbst erstellte DSDT ersetzt hat:
…
Checking 'hlt' instruction… OK
ACPI-0291: *Info: Table [DSDT] replaced by host OS
…
Bereits auf der Konsole können Sie testen, ob das Speedstepping des Prozessors ordnungsgemäß funktioniert: Geben Sie den Befehl
md5sum /dev/urandom
ein und beobachten Sie auf einer zweiten Konsole mit
cat /proc/cpuinfo
die Taktfrequenz des Prozessors – sie sollte nach kurzer Zeit ansteigen. Die Prozessortemperatur steigt dabei ebenfalls, was Sie mit
cat /proc/acpi/thermal_zone/THRM/temperature
kontrollieren. Damit haben Sie die Basis für ein optimales Energie-Management geschaffen. Nach dem Start der grafischen Oberfläche KDE sollte auch direkt das Energie-Icon von klaptop auf der Statusleiste erscheinen. Ein Rechtsklick darauf ermöglicht eine individuelle Konfiguration; für komplexere Anpassungen sind allerdings Root-Rechte erforderlich. In jedem Fall sollte die Laufzeit Ihres Laptops nun deutlich zunehmen: Ein modernes Centrino-Gerät kann unter Linux mindestens 3,5 Stunden durchhalten.
Fazit
Zugegeben: Unter Windows funktioniert das Energie-Management zumeist auch bei nagelneuer Hardware “out of the box”, denn die Hardware-Hersteller entwickeln meist nur passende Treiber für die aktuellen Windows-Versionen. Aber Linux holt auch auf diesem Feld auf: Die Zeit, die freie Programmierer benötigen, um auf neue Hardware-Entwicklungen zu reagieren, wird immer kürzer. Und die Ergebnisse müssen den Vergleich mit Windows nicht scheuen.
Glossar
-
ACPI
-
Das Advanced Configuration and Power Interface ist in erster Linie für das Stromsparen zuständig. Im Gegensatz zu seinem Vorgänger, dem im BIOS implementierten APM (Advanced Power Management) überträgt ACPI einen Großteil der Steuerung des Energie-Managements an das Betriebssystem. Hier beginnen die Probleme: Während Windows mit fehlerhaften ACPI-Implementierungen recht gut klar kommt, merkt Linux pedantisch jeden Fehler an und verweigert mitunter die Zusammenarbeit.
-
DSDT
-
Die Differentiated System Description Table enthält Informationen, die zur Boot-Zeit in den so genannten ACPI-Namespace eingesetzt werden. Ist die DSDT fehlerhaft, gibt es Probleme mit dem Energie-Management. Leider schaffen es viele Hersteller nicht, in ihr System eine fehlerlose DSDT zu integrieren.
-
Speedstepping
-
Darunter versteht man die dynamische Einstellung der Prozessorfrequenz in Abhängigkeit von der aktuellen Systemlast. Im Normalfall, d. h. bei weitgehend ruhendem Desktop, läuft der Prozessor mit der niedrigsten Frequenz (bei Pentium-M-Prozessoren mit 600 MHz), bei Vollast (z. B. beim Kompilieren des Kernels) schaltet der Rechner auf die maximale Frequenz um (je nach Prozessor 1500 MHz und mehr).
Infos
[1] Informationen über Linux auf speziellen Laptops: http://www.linux-laptop.net, http://tuxmobil.org
[2] Knoppix Live CD: http://www.knoppix.de
[3] Memtest+: Werkzeug zum Speichertest auf Centrino M Systemen: http://www.memtest.org
[4] Red Hat Fedora Distribution: http://fedora.redhat.com
[5] Fedora Core 2: Andrea Müller, Carsten Schnober, “Mit neuem Hut”, LinuxUser 08/2004, S. 54f
[6] Intel IASL Compiler: http://www.intel. com/technology/iapc/acpi/downloads.htm
[7] ACPI How-to: http://www.cpqlinux.com/acpi-howto.html
[8] Fertige DSDT Tabellen: http://acpi.sourceforge.net
[9] Kernelpatch zur Integration einer externen DSDT: http://www.unix.privat.t-online.de/acpi.html









