HAL



  • Hallo,

    was ist eine hardware abstraction layer. Die Treiber greifen scheinbar nicht direkt auf die hardware zu , sondern über diesen abstraction layer.

    Folgende Definition hab ich auch noch gefunden:

    HAL ist, wie der Name schon sagt, eine Zwischenschicht zwischen Hardware und Software, welche die Zugriffe der Software auf die Hardware abstrahiert. Dies hat den Vorteil, dass die Software nicht speziell auf jede Art von Hardware angepasst werden muss, sondern dass HAL quasi als "universeller Übersetzer" arbeitet.

    Ich dachte halt immer wenn sich die hardware ändert muss sich auch der Treiber ändern und nicht die HAL.



  • ja, der Treiber ändert sich. Aber das ist deinem Programm, das auf die Hardware zugreifen will, vollkommen egal



  • Es gibt halt auch bei Hardware auch mehrere Ebenen. Wenn du z.B. einen Treiber für eine PCI Karte schreibst, brauchst du dabei in der Regel Zugriff auf den PCI configuration space. Dieser Zugriff kann abhängig von der Architektur (x86, ARM etc.) unterschiedlich sein, aber da der config space immer gleich aussieht, macht es keinen Sinn für jede Architektur den Treibercode anzupassen. Ein Betriebssystem das auf mehreren Architekturen läuft würde dir da z.B. einen allgemeingültigen Zugriff anbieten.



  • Soll das heissen ohne die HAL könnte man nicht unterschiedliche Prozessoren
    für Windows verwenden ?



  • Anwendungsfall:

    Ich drücke den Drucken button in meiner Textverarbeitung.

    Dann bekommt der Treiber des Druckers meine Anfrage. Der sendet diese an die HAL und die spricht dann die Hardware an. Wieso kann der Treiber nicht direkt den Drucker ansprechen ?



  • blurry333 schrieb:

    Wieso kann der Treiber nicht direkt den Drucker ansprechen ?

    so wie ich das verstanden hab, kann er das durchaus. Sonst könnte ja HaaaPeee nicht ihre tollen neuen Drucker-Features zeigen, wenn zur Nutzung erst die HAL aktualisiert werden muss.
    Nur wenn du einen generischen Treiber entwickeln willst ("Standard-Druckertreiber") oder von einem normalen Programm aus Zugriff auf die Hardware brauchst (Brennprogramm zum Brenner z.B.), kommst du um die HAL nicht rum



  • Es wurde zwar im Prinzip schon geschrieben, aber vielleicht verstehst du es besser wenn ich's nochmal etwas bildhafter erkläre:

    Der User redet mit der Applikation (drückt auf den Button).
    Die Applikation redet mit der Usermode-API.
    Die Usermode-API redet (über einige Umwege, die jetzt aber nicht interessant sind) mit dem Druckertreiber.
    Der Druckertreiber redet mit seinem Porttreiber.
    Der Porttreiber redet mit der Hardware.

    Klingt ausreichend.
    Ist es aber nicht, wenn die Art und Weise wie die Hardware angesprochen werden muss sich ändern kann.

    Sagen wir der "Port" für den Drucker ist ne einfache parallele Schnittstelle die auf einer PCI Karte sitzt (oder einem IO-Chip am Mainboard der über PCI angebunden ist).

    Welche Register des IO-Chips wann mit welchen Werten beschrieben werden müssen ist für diesen bestimmten Typ von parallelem Port also immer gleich. Das ist Aufgabe des Porttreibers.

    Die Art und Weise wie auf diverse Register des IO-Chip zugegriffen wird ist aber nicht immer gleich, da sie davon abhängt wie der PCI-Bus an die CPU angebunden ist. Das ist dem Porttreiber aber herzlich egal, der hat keine Lust sich um sowas zu kümmern.

    Du brauchst also Funktionen die das nochmal abstrahieren, z.B.
    * ReadPCIConfigSpace()
    * WritePCIConfigSpace()
    etc.

    Der Teil des OS der diese Funktionen bereitstellt ist der HAL.

    Wie viel und was genau der HAL macht ist von System zu System verschieden.

    Und es reden nicht nur Gerätetreiber mit dem HAL, auch der Kernel selbst verwendet den HAL um bestimmte Dinge zu machen. Angenommen der Kernel muss die Interrupts der CPU disablen, oder die Interrupt-Prioritäten umprogrammieren. Das könnte er direkt machen, nur dann dürfte sich der Interrupt-Controller niemals ändern.

    So wie die Treiber den Zugriff auf "Geräte" abstrahieren, abstrahiert der HAL den Zugriff auf das System selbst (Interrupt-Kontroller, Busse etc.).



  • zwutz schrieb:

    blurry333 schrieb:

    Wieso kann der Treiber nicht direkt den Drucker ansprechen ?

    so wie ich das verstanden hab, kann er das durchaus. Sonst könnte ja HaaaPeee nicht ihre tollen neuen Drucker-Features zeigen, wenn zur Nutzung erst die HAL aktualisiert werden muss.
    Nur wenn du einen generischen Treiber entwickeln willst ("Standard-Druckertreiber") oder von einem normalen Programm aus Zugriff auf die Hardware brauchst (Brennprogramm zum Brenner z.B.), kommst du um die HAL nicht rum

    Nö, ich glaube das hast du etwas falsch verstanden 😉

    HP's Druckertreiber reden bloss mit anderen Treibern, niemals mit der Hardware selbst (siehe oben).


Log in to reply