ハードウェア アブストラクション レイヤー (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 をバインドされた同じプロセス (パススルー) モードで提供できます。 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 インターフェース。

: Android は、常にバインダ化モードになる次のandroid.frameworks.*インターフェースをandroid.hidl.memory@1.0android.hidl.* android.system.*

パススルー 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
  • android.hardware.renderscript@1.0

従来の HAL と従来の HAL

従来の HAL(Android 8.0 で非推奨)は、特定の名前とバージョンのアプリケーション バイナリ インターフェース(ABI)に準拠するインターフェースです。 Android システム インターフェース (カメラオーディオセンサーなど) の大部分は従来の HAL の形式であり、 hardware/libhardware/include/hardwareで定義されています。

レガシー HAL(Android 8.0 でも非推奨)は、従来の HAL より前のインターフェースです。いくつかの重要なサブシステム (Wi-Fi、Radio Interface Layer、Bluetooth) はレガシー HAL です。従来の HAL を記述するための統一された方法や標準化された方法はありませんが、従来の HAL ではない Android 8.0 以前のものはすべて従来の HAL です。一部のレガシー HAL の一部はlibhardware_legacyに含まれていますが、他の部分はコードベース全体に散在しています。