¿Qué es la capa de abstracción de hardware?

HAL proporciona una abstracción que actúa como una API sobre el hardware para que los desarrolladores de software no tengan que comprender el hardware subyacente para escribir software compatible. Citando de Wikipedia:

Un ejemplo de esto podría ser una abstracción de “Joystick”. El dispositivo de joystick, del cual hay muchas implementaciones físicas, es legible / grabable a través de una API que muchos dispositivos similares a joystick podrían compartir. La mayoría de los dispositivos de joystick pueden informar direcciones de movimiento. Muchos dispositivos de joystick pueden tener configuraciones de sensibilidad que puede configurar una aplicación externa. Una abstracción de Joystick oculta detalles (p. Ej., Formatos de registro, I2Caddress) del hardware para que un programador que utiliza la API abstraída no necesite comprender los detalles de la interfaz física del dispositivo. Esto también permite la reutilización del código, ya que el mismo código puede procesar mensajes estandarizados de cualquier tipo de implementación que proporcione la abstracción del “joystick”. Un “empujón hacia adelante” puede ser desde un potenciómetro o desde un sensor táctil capacitivo que reconoce los gestos de “deslizar”, siempre que ambos proporcionen una señal relacionada con el “movimiento”.