Hardware Abstraction Layer の概要

Android 8.0 以降では、よりモジュール化された新しいアーキテクチャを採用するために、下位レベルのレイヤーが書き直されています。 Android 8.0 以降を実行しているデバイスは、以下に示すいくつかの例外を除き、HIDL で記述された HAL をサポートする必要があります。これらの HAL はバインダ化またはパススルーできます。 Android 11 では、AIDL で記述された HAL もサポートされています。すべての AIDL HAL はバインダ化されています。

  • バインダ化された HAL 。 HAL は、HAL インターフェイス定義言語 (HIDL) または Android インターフェイス定義言語 (AIDL) で表現されます。これらの HAL は、Android の以前のバージョンで使用されていた従来の HAL とレガシー HAL の両方を置き換えます。バインダー化された HAL では、Android フレームワークと HAL はバインダーのプロセス間通信 (IPC) 呼び出しを使用して相互に通信します。 Android 8.0 以降で起動するすべてのデバイスは、バインダ化された HAL のみをサポートする必要があります。

  • パススルー HAL 。 HIDL でラップされた従来型またはレガシー HALこれらの HAL は既存の HAL をラップし、バインダ化された同一プロセス (パススルー) モードで HAL を提供できます。 Android 8.0 にアップグレードするデバイスは、パススルー HAL を使用できます。

HAL モードの要件

デバイスパススルーバインダー付き
Android 8.0で起動「パススルー HAL」にリストされている HAL はパススルーである必要があります。他のすべての HAL はバインダ化されています (ベンダー拡張である HAL を含む)。
Android 8.0へのアップグレード「パススルー HAL」にリストされている HAL はパススルーである必要があります。 「バインダ化された HAL」にリストされている HAL はバインダ化する必要があります。
ベンダー イメージによって提供される他のすべての HAL は、パススルー モードまたはバインド化モードにすることができます。 Treble に完全に準拠したデバイスでは、これらすべてをバインドする必要があります。

バインダ化された HAL

Android では、起動デバイスかアップグレード デバイスかに関係なく、すべての Android デバイスで次の HAL をバインドする必要があります。

  • android.hardware.biometrics.fingerprint@2.1 。 Android 8.0 では廃止されたfingerprintd置き換えます。
  • android.hardware.configstore@1.0 。 Android 8.0の新機能。
  • android.hardware.dumpstate@1.0 。この HAL によって提供される元のインターフェイスはシム化できず、変更されました。このため、 dumpstate_board特定のデバイス (これはオプションの HAL) に再実装する必要があります。
  • android.hardware.graphics.allocator@2.0 。 Android 8.0 ではファイル記述子を信頼できるプロセスと信頼できないプロセス間で共有する必要がないようにバインドする必要があります。
  • android.hardware.radio@1.0 。独自のプロセス内に存在するrildによって提供されるインターフェイスを置き換えます。
  • android.hardware.usb@1.0 。 Android 8.0の新機能。
  • android.hardware.wifi@1.0 。 Android 8.0 の新機能で、 system_serverにロードされていた従来の Wi-Fi HAL ライブラリを置き換えます。
  • android.hardware.wifi.supplicant@1.0 。既存のwpa_supplicantプロセス上の HIDL インターフェイス。

パススルー HAL

Android では、起動デバイスであるかアップグレード デバイスであるかに関係なく、すべての Android デバイスで次の HAL がパススルー モードである必要があります。

  • android.hardware.graphics.mapper@1.0 。メモリを、メモリが存在するプロセスにマッピングします。
  • android.hardware.renderscript@1.0 。同じプロセスで項目を渡します ( openGLと同等)。

上記にリストされていないすべての HAL は、起動デバイス用にバインダ化する必要があります。

同一プロセスの HAL

同一プロセス HAL (SP-HAL) は、使用されているのと同じプロセスで常に開きます。これらには、HIDL で表現されていないすべての HAL と、バインダ化されていない一部の HAL が含まれます。 SP-HAL セットのメンバーシップは、例外なく、Google によってのみ管理されます。

SP-HAL には次のものが含まれます。

  • openGL
  • Vulkan
  • android.hidl.memory@1.0 (Android システムによって提供され、常にパススルー)
  • android.hardware.graphics.mapper@1.0
  • android.hardware.renderscript@1.0