ハードウェア アブストラクション レイヤー (HAL) の概要

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

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

  • パススルー HAL 。 HIDL でラップされた従来のHAL またはレガシー 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 デバイスで次の HALS をバインドする必要があります。

  • android.hardware.biometrics.fingerprint@2.1 . Android 8.0 ではなくなった `fingerprintd を置き換えます。
  • android.hardware.configstore@1.0 。 Android 8.0 の新機能。
  • android.hardware.dumpstate@1.0 。この HAL によって提供された元のインターフェースは shim できず、変更されました。このため、特定のデバイスで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

Same-Process 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</code>
  • android.hardware.renderscript@1.0