ACPI steht für Advanced Configuration and Power Interface und soll dem Betriebssystem ermöglichen, die einzelnen Hardwarekomponenten individuell einzurichten und zu steuern. Damit ersetzt ACPI sowohl „Plug and Play“, als auch APM. Weiterhin stellt ACPI noch diverse Informationen über Batterie, Netzteil, Temperatur und Lüfter zur Verfügung und unterrichtet über Systemereignisse, wie zum Beispiel „Deckel schließen“ oder „Batterieladung niedrig“.
Das BIOS stellt Tabellen zur Verfügung, in denen Informationen über die Einzelkomponenten und Methoden für den Zugriff auf die Hardware enthalten sind. Diese Informationen werden vom Betriebssystem verwendet, um zum Beispiel Interrupts zuzuweisen oder Komponenten bedarfsweise an- und abzuschalten. Da das Betriebssystem allerdings Anweisungen ausführt, die im BIOS abgelegt sind, ist man auch hier wieder von der Implementierung des BIOS abhängig. In /var/log/boot.msg findet man die Bootmeldungen. Dort meldet ACPI, welche Tabellen es gefunden hat und erfolgreich auslesen konnte. Mehr Information zum Troubleshooting bei ACPI-Problemen lesen Sie unter Abschnitt 9.3.1.3. “Mögliche Probleme und Lösungen”.
Wenn der Kernel beim Booten ein ACPI-BIOS erkennt, wird ACPI automatisch aktiviert (und APM deaktiviert). Der Bootparameter acpi=on kann höchstens bei älteren Maschinen notwendig sein. Natürlich muss der Computer ACPI 2.0 oder neuer unterstützen. Ob ACPI aktiviert wurde, kann in den Bootmeldungen des Kernels in /var/log/boot.msg nachgesehen werden. Es gibt dann auch ein Verzeichnis /proc/acpi, welches im weiteren Verlauf beschrieben wird.
Danach müssen jedoch noch eine Reihe von Modulen geladen werden. Diese werden vom Startskript des ACPI-Daemons geladen. Wenn eines dieser Module Probleme bereitet, kann es in /etc/sysconfig/powersave/common vom Laden bzw. Entladen ausgeschlossen werden. Im Systemlog (/var/log/messages) findet man die Meldungen der Module und kann sehen, welche Komponenten erkannt wurden.
Jetzt findet man unter /proc/acpi eine Reihe von Dateien, die über den Systemzustand informieren oder mit deren Hilfe man einige Zustände aktiv verändern kann. Allerdings funktioniert hier noch längst nicht alles, weil es sich noch in der Entwicklung befindet, und von der Implementierung des Herstellers abhängt.
Alle Dateien (außer dsdt und fadt) können mit cat gelesen werden. In einigen kann man Einstellungen verändern, indem man mit echo X <datei> geeignete Werte für X übergibt (alles unter /proc ist nicht wirklich eine Datei auf der Festplatte sondern, eine Schnittstelle zum Kernel). Im Folgenden werden die wichtigsten Dateien beschrieben:
Allgemeine Information über ACPI
Hier lässt sich einstellen, wann das System aus einem Schlafzustand zurückkehrt. Momentan ist dieses Feature noch nicht hinreichend unterstützt.
Gibt Auskunft über die möglichen Schlafzustände.
Hier werden alle Ereignisse gemeldet. Diese werden von einem Daemon wie acpid oder powersaved verarbeitet. Wenn kein Daemon darauf zugreift, kann man die Ereignisse mit cat /proc/acpi/event lesen (Mit Strg + C beenden). Ein kurzer Druck auf die Powertaste oder das Schließen des Deckels sind solche Ereignisse.
Hierin stehen die ACPI-Tabellen DSDT (Differentiated System Description Table) und FADT (Fixed ACPI Description Table). Diese können mit acpidmp, acpidisasm und dmdecode ausgelesen werden. Diese Programme einschließlich Dokumentation finden Sie im Paket pmtools. Beispiel: acpidmp DSDT | acpidisasm.
Ist das Netzteil angeschlossen?
Ausführliche Information über den Zustand der Batterien. Um den Füllstand ablesen zu können, muss last full capacity aus info mit remaining capacity aus state verglichen werden. Komfortabler geht das mit speziellen Programmen, die nachher beschrieben werden. In alarm kann die Kapazität eingegeben werden, bei der ein Batterieereignis ausgelöst wird.
In diesem Verzeichnis gibt es Informationen über diverse Schalter.
Dies zeigt an, ob der Lüfter gerade läuft. Er kann auch manuell ein- und ausgeschaltet werden, indem man 0 (=ein) bzw. 3 (=aus) in diese Datei schreibt. Es ist jedoch zu beachten, dass sowohl der ACPI-Code im Kernel als auch die Hardware (bzw. das BIOS) diese Einstellung überschreiben, wenn es zu warm wird.
Informationen über die Energiesparmöglichkeiten des Prozessors.
Information über den gegenwärtigen Prozessorzustand. Ein Sternchen bei bedeutet Leerlauf; das ist der häufigste Zustand, wie an der Zahl usage zu Erkennen ist.
Diese Schnittstelle wird nicht mehr verwendet.
Hier ist eine weitere lineare Drosselung des Prozessors möglich. Diese Schnittstelle ist veraltet. Ihre Funktion haben die Einstellungen unter /etc/sysconfig/powersave/common übernommen (siehe Abschnitt 9.5.2.3. “Anpassungen des Stromverbrauchs”).
Wenn Performance und Throttling von einem Daemon automatisch geregelt werden, lassen sich hier die Grenzen angeben, die nicht überschritten werden dürfen. Es gibt vom System festgelegte Limits und solche, die vom Benutzer einstellbar sind. Ihre Funktion haben die Einstellungen unter /etc/sysconfig/powersave/common übernommen (siehe Abschnitt 9.5.2.2. “Benutzerdefinierte Batteriezustände”).
Hier gibt es für jede Thermalzone ein Unterverzeichnis. Eine Thermalzone ist ein Bereich mit ähnlichen thermischen Eigenschaften, deren Anzahl und Namen vom Hardware-Hersteller gewählt werden. Viele der Möglichkeiten, die ACPI bietet, werden jedoch nur selten implementiert. Stattdessen, wird die Temperatursteuerung auf herkömmliche Weise direkt vom BIOS übernommen, ohne dem Betriebssystem ein wesentliches Mitspracherecht einzuräumen, denn es geht um nicht weniger als die Lebensdauer der Hardware. Die folgenden Beschreibungen sind also teilweise theoretischer Natur.
Die aktuelle Temperatur der Thermalzone.
Der Status sagt aus, ob alles „ok“ ist oder ob ACPI „aktiv“ oder „passiv“ kühlt. Bei ACPI-unabhängiger Lüftersteuerung ist hier immer alles „ok“.
Hier kann man unter voller ACPI-Kontrolle die bevorzugte Kühlmethode wählen. Entweder passiv (weniger Leistung, aber sparsam) oder aktiv (immer volle Leistung und voller Lüfterlärm).
Hier kann eingestellt werden, ab welcher Temperatur etwas unternommen werden soll. Das reicht von passiver oder aktiver Kühlung über Suspendierung („hot“) bis zum Abschalten des Computers („critical“).
Wenn der Wert in temperature nicht automatisch aktualisiert wird, sobald sich die Temperatur ändert, kann hier auf den „Polling Modus“ umgeschaltet werden. Der Befehl echo X > /proc/acpi/thermal_zone/*/polling_frequency bewirkt, dass die Temperatur alle X Sekunden abgefragt wird. Mit X=0 wird das „Polling“ wieder ausgeschaltet.
Ähnlich wie der APM Daemon verarbeitet der ACPI Daemon bestimmte ACPI Ereignisse. Diese sind zur Zeit lediglich die Bestätigung bestimmter Schalter wie der Ein/Aus-Schalter oder der Deckelkontakt. Alle Ereignisse werden im Systemlog protokolliert. In /etc/sysconfig/powermanagement kann in den Variablen ACPI_BUTTON_POWER und ACPI_BUTTON_LID festgelegt werden, was bei diesen Ereignissen geschehen soll. Wem das nicht genügt, der kann das Skript /usr/sbin/acpid_proxy anpassen oder die Konfiguration des acpid unter /etc/acpi/ verändern.
Im Gegensatz zum apmd ist hier nicht sehr viel vorkonfiguriert, da sich ACPI unter Linux noch stark entwickelt. Bei Bedarf muss man sich den acpid selbst zurecht konfigurieren. Für Vorschläge zu vorbereiteten Aktionen sind wir jederzeit unter http://www.suse.de/feedback zu erreichen.
Es gibt eine Reihe von mehr oder weniger umfangreichen ACPI-Werkzeugen. Darunter reine Informationstools, die Batteriezustand, Temperatur usw. anzeigen (acpi, klaptopdaemon, wmacpimon etc.). Andere vereinfachen den Zugriff auf die Strukturen unter /proc/acpi oder helfen Veränderungen zu beobachten (akpi, acpiw, gtkacpiw). Des weiteren gibt es noch Werkzeuge zum Bearbeiten der ACPI Tabellen im BIOS (Paket pmtools).
Es gibt zwei unterschiedliche Gruppen von Problemen. Einerseits können natürlich Fehler im ACPI-Code des Kernels enthalten sein, die nicht rechtzeitig bemerkt wurden. Dann wird es jedoch eine Lösung zum Download geben. Unangenehmer und leider auch häufiger sind Probleme im BIOS eines Computers. Es kommt leider sogar vor, dass Abweichungen von der ACPI-Spezifikation im BIOS eingebaut werden, um Fehler der ACPI-Implementierung in anderen sehr verbreiteten Betriebssystemen zu umgehen. Es gibt auch Hardware, bei der gravierende Fehler in der ACPI-Implementierung bekannt sind und die deshalb in einer Blacklist vermerkt sind, damit der Linuxkernel ACPI dort nicht verwendet.
Falls ein Problem auftritt, sollte man also zunächst das BIOS aktualisieren. Viele Probleme lösen sich dabei einfach in Luft auf. Falls der Rechner überhaupt nicht vernünftig bootet, hilft eventuell einer der folgenden Bootparameter:
Kein ACPI zur Konfiguration der PCI-Geräte verwenden.
Nur einfache Ressourcenkonfiguration durchführen, sonst ACPI nicht verwenden.
Kein ACPI verwenden.
![]() | Probleme beim Booten ohne ACPI |
|---|---|
Manche Rechner der neueren Generation, insbesondere SMP-Systeme und AMD64-Systeme benötigen ACPI für eine korrekte Hardwarekonfiguration. Ein Abschalten von ACPI kann zu Problemen führen. | |
Wichtig ist dann jedenfalls, sich die Bootmeldungen genauer anzusehen. Am besten verwendet man dafür nach dem Booten das Kommando dmesg | grep -2i acpi (oder auch alle Meldungen, denn das Problem muss ja nicht an ACPI hängen). Wenn ein Fehler beim Parsen einer ACPI Tabelle auftritt, gibt es zumindest für die wichtigste Tabelle, die DSDT, die Möglichkeit, dem System eine verbesserte Version unterzuschieben. Dann wird die fehlerhafte DSDT des BIOS ignoriert. Das Vorgehen wird unter Abschnitt 9.5.4. “Troubleshooting” näher beschrieben.
Es gibt bei der Kernelkonfiguration auch einen Schalter, um Debug-Meldungen von ACPI zu aktivieren. Wenn man sich einen Kernel mit ACPI Debugging kompiliert und installiert hat, kann man Experten, die einen Fehler suchen, mit detaillierter Information unterstützen.
Auf alle Fälle ist es bei BIOS- oder Hardwareproblemen immer eine gute Idee, sich an den Hersteller des Gerätes zu wenden. Auch wenn diese einem bei Linux nicht immer weiterhelfen können, ist es jedoch von Bedeutung, dass diese den Begriff Linux so häufig als möglich hören. Erst wenn die Hersteller merken, dass genug ihrer Kunden Linux verwenden, werden sie es ernst nehmen. Es schadet auch nichts, wenn Sie ohne Probleme dem Hersteller Ihrer Hardware erzählen, dass Sie Linux darauf verwenden.
Weitere Dokumentation und Hilfe finden Sie unter:
c't 2002, Heft 25: Schöne neue Welt (Dominik Brodowski, Oliver Diedrich)
http://www.cpqlinux.com/acpi-howto.html (etwas genaueres ACPI HowTo, enthält Patches der DSDT)
http://www.intel.com/technology/iapc/acpi/faq.htm (ACPI FAQ @Intel)
http://acpi.sourceforge.net/ (Das ACPI4Linux-Projekt bei Sourceforge)
http://www.poupinou.org/acpi/ (DSDT Patches von Bruno Ducrot)