ACPI-Unterstützung auf Centrino-Laptops

Aus LinuxUser 10/2004

ACPI-Unterstützung auf Centrino-Laptops

Strom sparen

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.

Abbildung 1: Die halbe Miete: Knoppix erkennt ein ACPI-System.

Abbildung 1: Die halbe Miete: Knoppix erkennt ein ACPI-System.

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.

Abbildung 2: Up2date beschafft den aktuellsten Kernel nebst Quellen.

Abbildung 2: Up2date beschafft den aktuellsten Kernel nebst Quellen.

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;
}

Abbildung 3: ACPI Parameter des Kernels konfigurieren.

Abbildung 3: ACPI Parameter des Kernels konfigurieren.

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.

Abbildung 4: Energie-Management unter KDE mit "klaptop".

Abbildung 4: Energie-Management unter KDE mit “klaptop”.

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

LinuxUser 10/2004 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben