Die HAL von Windows wechseln
Wie erzwinge ich eine spezielle HAL?
Mein konkreter Anlass: unsere neuen Geräte besitzen Prozessoren
mit zwei oder vier Kernen (DualCore, QuadCore). Die Installation
von Windows XP und 2003 betrachtete die Geräte aber als Standard-Einprozessor
Computer.
Erkennbar ist das im Gerätemanager, der bei 'Prozessoren'
korrekt 2 oder 4 Stück anzeigt, unter 'Computer' aber nur
einen Standardcomputer. Der Taskmanager zeigt auch nur einen Prozessor
an. Die weiteren Kerne werden nicht benützt.
Windows 2000 hatte die Möglichkeit, bei den Computereigenschaften
des Devicemanagers eine andere HAL (Hardware abstraction layer,
Hardware Abstraktionsschicht) einzurichten. Diese Möglichkeit
gibt es in XP und 2003 nicht mehr. Obwohl von Microsoft nicht
dokumentiert (dort empfiehlt man eine Neuinstallation), gibt es
einen recht einfachen Ausweg, der nur die HAL ändert, aber
alle anderen Einstellungen unangetastet lässt.
Im Folgenden dreht sich alles um zwei Dateien, die offenbar alleine
für die HAL- und Prozessorwahl nötig sind.
1.) die hal.dll
2.) die ntkrnlpa.exe
Der Name des Kerneltreibers kann variieren, dies ist aber dokumentiert
von Microsoft dokumentiert. Man suche nach den Stichworten 'hal.dll
ntkrnlpa.exe ntkrnlmp.exe'.
Unsere Geräte hatten im System32 Verzeichnis die Datei hal.dll
und ntkrnlpa.exe installiert. Diese unterstützen nur simple
Einkern-Prozessoren. Da sie tief ins laufende System integriert
sind, ist ein Ändern im laufenden Betrieb nicht möglich.
Vorarbeit:
Man sucht sich die Installlationsmedien des laufenden Windows,
Bei XP *muss* das SP2 vorhanden sein.
Im Ordner i386 finden sich mehrere hal*.dl_ und ntkr*.ex_ Dateien.
| HAL |
Prozessor |
ACPI |
APIC |
| hal.dl_ |
single |
- |
- |
| halacpi.dl_ |
single |
+ |
- |
| halapic.dl_ |
single |
- |
+ |
| halaapic.dl_ |
single |
+ |
+ |
| halmacpi.dl_ |
multi |
+ |
|
| halmps.dl_ |
multi |
- |
|
| KERNEL |
Prozessor |
PAE |
| ntoskrnl.ex_ |
single |
- |
| ntkrnlmp.ex_ |
multi |
- |
| ntkrnlpa.ex_ |
single |
+ |
| ntkrpamp |
multi |
+ |
Am besten kopiert man alle in Fage kommenden Dateien in ein Verzeichnis
und entpackt jede mittels expand datei.ex_ datei.ext von
der Kommandozeile aus.
Ein wichtiger Test: Jeweils eine der hal- und krnl- Dateien ist
genau so groß wie die zur Zeit laufende. Wenn nicht, hat
man eine falsche Aktualisierung. Nötigenfalls - wenn man
keine Slipstream-XP CD verwendet - muss man das XP SP2 entpacken
(Aufruf mit Parameter -x) und dort die Dateien suchen.
Der Umbau:
Man kopiert die gewünschten entpackten Dateien ins System32
Verzeichnis und legt von den aktiven eine Kopie an, etwa hal_orig.dll,
ntkrnlpa_orig.dll. Damit sind zwei Versionen vorhanden: eine neue
und eine alte.
Nun editiert man die boot.ini auf der Startpartition.
Wer klug war und eine DOS-Bootpartition besitzt (im Explorer vorsichtshalber
ausgeblendet) kann dies direkt tun, sonst über Systemsteuerung/System.
Man kopiert die aktuell verwendete Startzeile zwei mal ans Ende
dran. Die beiden neuen Zeilen erhalten nun weitere Schalter, die
hinten drangeschrieben werden und einen entsprechenden Anzeigenamen
(Tippfehler vermeiden!).
Erste Zeile für Multiprocessor .... /KERNEL=ntkrnlmp.exe
/HAL=halmacpi.dll
Zweite Zeile die alten Dateien ..../KERNEL=ntkrnlpa_orig.exe /HAL=hal_orig.dll
Abspeichern und den Computer neu starten.
Wählt man nun als Startkonfiguration die Zeile mit den Multiprozessoreinstellungen,
fährt Windows hoch, erkennt neue Hardware, richtet sie automatisch
ein und verlangt einen Neustart.
Nun kann man die zwei hinzugefügten Zeilen der boot.ini
wieder entfernen. Die zweite Zeile hatte nur den Sinn, bei Problemen
in der neuen Konfiguration zum alten Zustand zurückkehren
zu können.
Ab nun startet der Computer in der Multicore-Version. Die Kontrolle
im Taskmanager zeigt auch alle Kerne an.
Zusätzlicher Nutzen
Die beschriebene Auswahltechnik mithilfe der boot.ini kann auch
dazu benützt werden, alternative HAL-Konfigurationen zu verwalten.
Immer wieder findet sich etwa Hardware, die mit einem modernen
ACPI-BIOS nicht zurechtkommt. (Meist liegt die Ursache aber in
einer schlampigen BIOS-Programmierung des Motherboardherstellers,
wie es auch bei uns der Fall war)
In so einem Fall erstellt man eine weiteren Eintrag mit einer
ACPI-freien HAL und kann die Hardware mit etwas Glück einsetzen.
Der Windows-Start ohne zusätzliche Parameter benützt
immer die zuletzt eingerichtete Konfiguration.
Ich habe testweise versucht, WindowsXP mit einer falschen HAL
(2003) zu starten. Es gab eine Fehlermeldung beim Hochfahren und
die Maschine stand still. Neustart mit der richtigen HAL und alles
war wieder in Ordnung. Trotzdem - ein Sicherungsimage der Systempartition
und der Bootpartition kann nie schaden...
|