Hardware Abstraction Layer

Aus Mikiwiki
Wechseln zu: Navigation, Suche

Der Hardware Abstraction Layer / HAL (dt. "Hardwareabstraktionsschicht") dient als Schnittstelle zwischen der Hardware und den Anwendungsprogrammen. Es handelt sich um eine architektonische Ebene grösserer Rechnerprogramme oder Betriebssysteme solcher Programme, die dafür sorgt, dass andere Softwarebestandteile nicht auf die Spezifikationen der Hardware Rücksicht nehmen müssen, auf der das Programm läuft.

Inhaltsverzeichnis

Funktionsweise

HAL läuft als Daemon hald im Hintergrund. Darüberhinaus startet hald bei Bedarf eigene Hilfsdienste, die in den Prozesslisten meist mit "hald-addon" beginnen und den Status bestimmter Geräte überwachen. Findet sich etwa ein vom System als "hald-addon-storage: polling /dev/hda" angezeigter Prozess, so bedeutet dies, dass dieser das hinter "/dev/hda" stehende Gerät abfragt.

HAL bedient sich verschiedener Quellen:

  • Er lauscht direkt auf den Systembussen.
  • Er bezieht seine Informationen von udev, vom Kernel und aus bestimmten, systemweiten und benutzerspezifischen Konfigurationsdateien. Hotplug-Events erfährt hald vom udev-Subsystem, unter Fedora beispielsweise über eine in der Datei "/tec/udev/rules/.d/90-hal.rules" stehende Regel. Der "RUN+="-Eintrag dieser Regel legt fest, dass sie für jede andere Regel zusätzlich auszuführen ist. Die Kommunikation läuft dabei über einen Socket.
RUN+="socket:/org/freedesktop/hal/udev_event"
  • Zusätzliche Informationen stehen in FDI-Dateien (device information files) unter "/usr/share/hal/fdi/information" im XML-Format. Hier finden sich für verschiedene Geräteklassen (z. B. CD/DVD-Brenner oder Digitalkameras) lange Listen mit Informationen über die Geräte einzelner Hersteller. Diese Informationen können mit dem Shell-Befehl lshal oder grafischen Oberflächen wie dem Hal-device-manager, dem Gnome-device-manager oder dem Kde-hal-device-manager angesehen werden.

Ohne diese zusätzlichen Informationen in den FDI-Dateien würde etwa eine Digitalkamera oder ein MP3-Spieler lediglich als USB-Speicher erkannt. Die weitergehende Spezifikation ermöglicht es nun, beispielsweise automatisch einen Bildbetrachter oder Musikverwalter zu starten, sobald das passende Gerät mit dem Rechner verbunden wird.

Derselbe Mechanismus erlaubt zum Beispiel auch, alle oder bestimmte Geräte vom automatischen Einbinden auszunehmen. Voraussetzung dafür ist allerdings, dass sich das Userspace-Programm, welches das Einhängen durchführt, überhaupt um die FDI-Dateien kümmert, was nicht zwangsläufig der Fall sein muss. Tut es dies jedoch so wie "submount" unter SUSE Linux, so bewirkt ein Eintrag wie der folgende, der unter "/usr/share/hal/fdi/95userpolicy" in einer beliebigen Datei mit der Endung ".fdi" liegen muss, dass keine Komponente mehr Wechselmedien und Hotplug-Geräte automatisch einbindet und der Benutzer sie wieder manuell einhängen kann.

<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- -*- SGML -*- -->
<!-- This .fdi file prevents automount for every media (storage devices) e. g. floppy, CD/DVD, USB stick, USB disk, external harddisk. -->
<deviceinfo version=".2">
  <device>
    <match key="storage.policy.should_mount" bool="true">
      <merge key="storage.policy.should_mount" type="bool">false</merge>
    </match>
  </device>
</deviceinfo>

Zwar stellt hald die Geräteinformationen für die Anwendungsprogramme bereit, aber er kommuniziert nicht direkt mit ihnen - dies wird durch das IPC-Framework D-Bus erledigt. Ein Beispiel für das Zusammenspiel der Komponenten ist der Gnome Network Manager, der das Netzwerksubsystem von hald überwachen lässt. hald benachrichtigt den Gnome Network Manager bei Veränderungen über den D-Bus (z. B. beim Ein- oder Ausstecken von Wireless USB-Sticks). Neben echten Geräten kann HAL auch mit Dateisystemen umgehen und deren Typ feststellen, sogar mit LUKS-verschlüsselten Partitionen.

Unter Gnome übernimmt HAL inzwischen einen grossen Teil der Hardwareverwaltung, vor allem von Hotplug-Geräten. Dazu läuft im Hintergrund der Prozess "gnome-volume-manager", den der Gnome-Anwender mit dem Frontend "gnome-volume-properties" konfiguriert.

Weblinks

Herausgeber Sprache Webseitentitel Anmerkungen
country DE.gif Wikipedia ger Hardwareabstraktionsschichtwbm Enzyklopädischer Artikel
country US.gif Wikipedia eng Hardware abstraction layerwbm Enzyklopädischer Artikel