back: HIB Homepage
  Prof. Urban
Materialien für Mathematik, Physik, Informatik
 
 
zurück
 

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...


--- © Wolfgang.Urban@schule.at ---