ACPI Korrekturen für das Samsung P10
[English translation]
Diese Seite ist verlinkt von TuxMobil,
Dank an Werner Heuser. Mehr Infos zu
Samsung Laptops unter Linux
(und zu allen anderen Herstellern) finden sich dort.
Dieser Text betrifft das BIOS "Phoenix BIOS 6.0" in den Versionen
04AE bis 08AE des Samsung P10 Laptops.
Andere Versionen haben möglicherweise ähnliche,
aber wohl nur selten das gleiche Problem und ich garantiere noch nicht
einmal, dass alle Laptops mit dieser Version mit diesen Korrekturen zu
Recht kommen.
Übrigens bringt Samsung durchaus von Zeit zu Zeit
neue BIOS Versionen
heraus, nur scheinen es keinen wirklichen Anreiz zu geben, damit auch
die offensichtlichen Probleme zu lösen.
Bei mir lässt sich damit alles zum Laufen bringen (Batterieanzeige,
Thermo-Überwachung, Speedstep, ...), nur die Status-Anzeige
(Fn-F2) führt zu Instabilitäten (bis zum Absturz des Systems!).
Wer also diesen Patch installiert, sollte davon Abstand nehmen, diese
Tastenkombination zu verwenden.
WARNUNG: WER DEN HINWEISEN AUF DIESER
SEITE FOLGT KANN DADURCH ERNSTHAFT SEINEN LAPTOP BESCHÄDIGEN.
Ich sehe diese Warnung als verstanden
an.
Soviel dazu. Als ich versuchte, auf meinem Samsung P10 vernünftig ACPI
zum Laufen zu bekommen, waren meine ersten Versuche alles andere als
erfolgreich. Unter Linux waren die Verzeichnisse
/proc/acpi/{battery,ac_adapter,thermal_zone}
leer, also fehlten dem System jegliche Informationen über den
Zustand der Batterie oder die Temperatur des Prozessors. "dmesg" zeigte
diesbezüglich eine Reihe Fehlermeldungen des ACPI Systems, so etwas wie
"method execution failed
[\_SB.BAT1._STA] AE_AML_NO_RETURN_VALUE".
Nach einigem Suchen in Web und News-Groups, sowie einigen
esperimentellen Fehlversuchen konnte ich in Erfahrung bringen, dass
meine DSDT fehlerhaft war. Das ist eine der ACPI-BIOS-Tabellen, die dem
Betriebsystem Aufschluss darüber gibt, welche ACPI-fähigen Bestandteile
im System existieren und wie die einzelnen ACPI-Funktionen im System
aufzurufen sind. Wenn diese Tabelle fehlerhaft ist, hat das Betriebsystem
keine Möglichkeit, ACPI zu verwenden.
Dann fand ich irgendwann auch dieses Howto das mehr oder
weniger genau beschreibt, wie ich auch schneller hätte dort hin kommen
können.
Jedenfalls hatte ich anfangs keine Ahnung von DSDTs, DSL, AML und ACPI
überhaupt, so dass ich einige Zeit investieren musste, um voranzukommen.
Was zu tun ist:
Zuerst einmal muss die im 2.4er Kernel enthaltene ACPI Version durch
eine aktuelle ersetzt werden. Das geht durch diesen Patch. In meinem Fall betraf
das die Kernel-Versionen 2.4.21-pre[34]. Der Kernel 2.[56].xx enthält bereits
einen großen Teil davon, aber auch dafür gibt es aktuelle Patches.
Wer selbst ein bisschen mit der DSDT
herumspielen möchte bzw. muss, braucht als allererstes den Intel
iasl Compiler aus dem ACPI CA
unix build environment. Dann kann es nichts schaden, sich das
oben bereits erwähnte Howto
durchzulesen, um zu sehen, was genau mit der DSDT anzustellen ist. Für
den Anfang sollte ein Kernel mit ACPI-Unterstützung erstellt und
gebootet werden, um aus "dmesg" die jeweiligen Fehlermeldungen ablesen
zu können. Auch wird es dadurch direkt eine Kopie der DSDT unter /proc/acpi/dsdt verfügbar. Da diese
so nicht zu lesen ist, muss sie erst mit Hilfe von iasl disassembliert
werden. Danach ist es dann dem eigenen Geschick überlassen, ob es
gelingt, die DSDT zu reparieren, ohne dabei das eigene System
schrottreif zu hinterlassen. Wem dies gelingt, der kann danach voller
Stolz (oder Wut) eine Mail an Samsung schreiben, mit der Bitte um ein
BIOS-Update und sollte dabei nicht vergessen, anzudeuten, was von
fehlerhaften BIOS-Implementierungen i.A. zu halten ist.
Wer nicht selbst mit der DSDT
herumspielen möchte, sondern einfach nur alles zum Laufen
bringen will, sollte mit obiger Warnung im Hinterkopf weiterlesen.
Zuerst einmal sollte ein ACPI-fähiger Kernel gebootet werden, damit
sichergestellt werden kann, dass die DSDT unter /proc/acpi/dsdt auch wirklich mit
der im tar-Archiv übereinstimmt.
Wenn sie das nicht tut, sollte vom direkten Ersetzen durch meine
korrigierte Version Abstand genommen werden! In dem Fall müsst ihr
selbst mit Hilfe von iasl Hand anlegen, schaut in den Absatz oben.
Dabei kann euch aber vielleicht das enthaltene diff helfen, das
meine Korrekturen sichtbar macht. Meine korrigierte DSDT ist dann
natürlich der wichtigste Teil.
Um meine korrigierte DSDT-Version zu benutzen, benötigt ihr zuerst
diesen Patch für euren ACPI
Kernel, zu dem ihr dann die korrigierte DSDT in die Datei
drivers/acpi/my-dsdt.hex
im Kernel Verzeichnis entpacken müsst. Die ".hex"-Datei ist übrigens
direkt mit iasl erstellt, Option "-tc".
Hier sind die Archive für die verschiedenen BIOS-Versionen.
Da Samsung anscheinend kein großes Interesse an einer fehlerfreien
ACPI-Implementierung hat, unterscheiden sie sich nur marginal:
04AE,
06AE,
07AE
Konfiguriert den Kernel mit allen ACPI-Treibern (Batterie, Netzteil
(AC), Lüfter, Tasten, Prozessor und Temperatur). Der Patch benötigt
noch ein "make dep", danach könnt ihr den Kernel kompilieren und
zusätzlich zum bisherigen
installieren. Lasst in jedem Fall die Möglichkeit offen, den alten
wieder zu booten, falls mit der DSDT etwas nicht stimmt.
Nun schaut in die Ausgabe von dmesg, wenn alles gut gelaufen ist,
sollte dort stehen, dass die DSDT ersetzt wurde und die ACPI-Fehler
sollten verschwunden sein.
Der nächste Blick gehört dann /proc/acpi.
Dort sollte sich ein Unterverzeichnis für jeden Treiber finden, das
jeweils wieder mindestens ein Unterverzeichnis enthält (benannt ADP1,
BAT1, usw.). Nun solltet ihr die Informationen überprüfen, die sich in
den Dateien dort finden und nachschauen, ob diese glaubhaft aussehen.
Anmerkung am Rande: Bisher habe ich swsusp
noch nicht zum Laufen bekommen und S4BIOS (über die Suspend-to-Disk
Partition) nicht ausprobiert. Erwartet dort also keine Wunder durch
meinen Patch.
Das ist eigentlich schon alles. Schickt etwaige Kommentare zu dieser
Seite und den Patches ruhig an mich, bedenkt aber, dass für allgemeine
Fragen die ACPI Mailing-Listen
bei Sourceforge wesentlich besser geeignet sind. Schaut ruhig auch
mal in deren Archiv...
Viel Glück!
Stefan Behnel, stefan /bei/ behnel.de