Login
Newsletter
Werbung

Mi, 1. Juni 2011, 13:55

Software::Kernel

Matthew Garrett: Spaß mit Reboot

Kernel-Entwickler Matthew Garrett hat sich mit der Kunst des Reboots eines PCs beschäftigt. Die von den PCs angebotenen Möglichkeiten geben reichlich Gelegenheit, sich über ihre Qualität lustig zu machen.

Wer glaubt, dass es einfach sei, einen PC zum Neustart zu bewegen, der irrt. Das hat Kernel-Entwickler Matthew Garrett nach einer Reihe von Experimenten festgestellt. Anlass war offenbar die Tatsache, dass Linux auf einigen Geräten, darunter Apple-Hardware, mitunter nicht oder nicht zuverlässig einen Neustart per Software auslösen kann. Insgesamt sind Garrett fünf Methoden bekannt, um PCs per Software zum Reboot zu bewegen.

Die erste, klassische Methode zum Neustart führt über den Tastaturcontroller. Dieser hatte in frühen PCs eine direkte Verbindung zum Reset-Eingang der CPU, und das Ansteuern dieser Leitung führt zum Ziel - außer natürlich, dass neuere Rechner keinen Tastaturcontroller mehr haben und manche nicht einmal mehr eine Emulation desselben anbieten. Die Steuerung obliegt nun einem eingebetteten Controller, der offenbar von denselben Leuten programmiert wurde, die für das BIOS verantwortlich waren - mit den zu erwartenden Konsequenzen für die Qualität dieser Software. So ist laut Garrett die Methode so unzuverlässig, dass sie unbrauchbar ist.

Die zweite klassische Methode ist die Auslösung einer Dreifachausnahme der CPU. Doch auch das führt mittlerweile, je nach CPU, nicht mehr zum erwarteten Ergebnis. Die nächste Variante führt über den PCI-Bus. Durch das Schreiben eines speziellen Wertepaares sollte sich der Rechner zurücksetzen. Doch die Tücke des Objekts will es, dass weder die Werte noch das tatsächliche Verhalten spezifiziert sind.

Es bleiben noch zwei Methoden, auf die man in modernen PCs bauen kann. Die eine ist in den EFI-Laufzeit-Diensten enthalten und funktioniert laut Garret üblicherweise. Es wäre aber zuviel verlangt, ein unbedingtes Funktionieren zu erwarten. Dann bleibt noch ACPI. Dieses stellt, wenn es neueren Versionen der Spezifikation folgt, eine Adresse und einen Wert zur Verfügung. Schreibt man den Wert in die angegebene Adresse, besteht immerhin die vage Möglichkeit, dass das System neu bootet.

Fünf Methoden, und keine funktioniert zuverlässig. Vor diesem Hintergrund ist es nicht weiter verwunderlich, dass Linux manche Geräte nicht zum Reboot bewegen kann. Unter Windows scheint dies aber meist zu gehen, und so untersuchte Garrett mit Hilfe von Qemu, was Windows genau macht. Es stellte sich heraus, dass Windows sich nur auf ACPI und den Tastaturcontroller stützt. Ist im ACPI keine Angabe vorhanden, steuert es den Controller an, versucht es, wenn erfolglos, nach einem Moment noch einmal, und gibt dann auf. Ist die ACPI-Information vorhanden, schreibt Windows den Wert an die angegebene Stelle, betätigt dann den Tastaturcontroller, und wiederholt das, falls es bis dahin kommt, noch einmal.

Da die BIOS-Entwickler im Wesentlichen für Windows programmieren, funktioniert diese Methode meist. Daher hat Garrett den Linux-Code für die kommende Version 3.0 entsprechend angepasst. Dadurch funktioniert der Reboot mit mehr Rechnern, beschleunigt den Neustart bei einigen anderen und vereinfacht den Reboot-Code.

Werbung
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung