1はじめに
HALと略記Androidシステムのハードウェアアブストラクションレイヤ(ハードウェアアブストラクションレイヤ)は、重要なブリッジは、LinuxカーネルのAndroidフレームワークデバイスドライバに接続されています。HALは、以下の2つの側面の存在を感知します:
(1)HAL層違いハードウェアデバイスをマスキングは、アンドロイドとして統合アクセスインタフェース装置を提供します。自分のハードウェア制御ロジックを達成するために、標準のHALに従うように、異なるハードウェア・ベンダー、開発者は、単に標準のHALは、ハードウェアにアクセスするためのインタフェースを提供し、次のハードウェアの違いを気にしないでください。
ヘルプハードウェアベンダーに(2)HAL層は、デバイスのコアの詳細を隠す、ユーザ空間に配置さHAL層は、ハードウェア・ベンダーは、オープンソースのないことができますApacheのプロトコルに従う、(達成するためにHAL層の上に、関連するデバイスを実装し、共有ライブラリます。提供形態で)ので。
以下、図AndroidのHAL層システムの位置を示しています。
上層と下層のハードウェア・サービスとの間の結合度が低下するように、このデザインパターンを使用して、HAL、。
2、スタブHAL
AndroidのシステムHALは、2つの実装があります:レガシーとスタブHAL、レガシーHALの方法を最初に使用する、標準のLinuxは共有ライブラリをする方法を、他のアプリケーションが直接共有ライブラリHAL層をエクスポートする関数を呼び出します。グーグル後提案スタブHALの方法、(.soの)共有ライブラリとして依然として利用可能である、統一データ構造体に格納され、その外部アクセスエントリポインタのすべてのためのメソッド(関数)は、他のプログラムがHALメソッドにアクセスする必要があります、特定の関数ポインタを読み書きするスタブ、その後、基本となるデバイスを介して取得する必要があります。
3、標準インターフェースはHALを定義
Androidの一般的なHALのハードウェアのための標準インタフェースを定義している、これらのコンポーネントは以下のとおりであります:
私たちは、これらのデバイスHAL層のためのコードを記述する必要がある場合、あなたはそれ以外の場合は、Androidフレームワークの下で仕事にできないデバイスの原因となります、達成するためにGoogleが定義された標準インタフェースに厳密に従ったものでなければなりません。
スタブ途中でHALがlibhardwareカタログの下に達成するために、ハードウェアカタログのAndroidソースツリー、約HALソース:
#HALヘッダ共通の標準インターフェースデバイス AOSP /ハードウェア/ libhardware /含む/ハードウェア #HAL共通デバイスの標準的なインタフェース AOSP /ハードウェア/ libhardware /モジュール/
構造体を埋め込むこと、ディレクトリAOSP /ハードウェア/ libhardware /含む/より重要な構造を有しているヘッダファイルにhardware.hインターフェースハードウェア、変数、およびそれらのデバイスのHALファイルの開発における関数ポインタに含まれています、そのプロパティを継承され、次いで、これらの標準インターフェースの概要を行います。
まず、構造体hw_module_t構造、次のように定義されます。
typedefは構造体hw_module_t { タグのuint32_t。 uint16_t module_api_version; uint16_t hal_api_version; const のchar * のid。 const のchar * の名前。 const のchar * 著者; 構造体 hw_module_methods_t * モジュール。 無効 * DSO。 uint32_tは、[予約32 - 7 ]。 } hw_module_t。
メンバーの簡単な紹介は:
タグ:値モジュールタグは、HARDWARE_MODULE_TAGとして定義されなければなりません。
module_api_version:モジュールインタフェースAPI関数のバージョン番号。
hal_api_version:インターフェースモジュールのHAL APIのバージョン番号。
ID:ハードウェア、固有の識別モジュールのID番号。
名前:モジュールの名前。
著者:モジュールの作者。
モジュール:関数ポインタは、開口部のための手段をカプセル化された構造を開くことがポイント。
構造体はhw_module_t各ハードウェアの構造を理解するために、そのプロパティを展開し、hw_module_t構造、私たちができる「継承」することによって、この構造を説明したが、ホスト構造体の最初のメンバーはしておく必要があります構造体hw_module_tタイプは、固定されたハードウェア・オブジェクト名を定義しなければならない:HMI(ハードウェアモジュール情報)、ハードウェア・オブジェクト・モジュール・ポインタを含む各々は、開口部のハードウェアの関数ポインタをカプセル化し、対応する開放構造を与えるために、ハードウェアを返します操作。
次は、次のように定義された構造体hw_module_methods_t構造です。
typedefは構造体hw_module_methods_t { INT(*オープン)(CONST 構造体 hw_module_t *モジュール、CONST のchar * ID、 構造体 hw_device_t ** 装置) } hw_module_methods_t。
構造は、関数ポインタ、デバイス戻り二つのポインタによってデバイスを開くために特定の開口装置を実現するための機能をカプセル化している開放されています。
もう一つの重要な構造は、次のように定義された構造体hw_device_t、次のとおりです。
typedefは構造体hw_device_t { タグのuint32_t。 uint32_tバージョン。 構造体 hw_module_t * モジュール。 uint32_t予約[ 12 ]。 int型(*クローズ)(構造体 hw_device_t * デバイス)。 } hw_device_t。
メンバーの簡単な紹介は:
タグ:タグ機器、それはHARDWARE_DEVICE_TAGとして定義する必要があります。
バージョン:デバイスの動作モードのバージョン番号。
モジュール:hw_module_t構造ポインタの接触デバイスのハードウェアモジュールは、デバイスのユーザ・インターフェース・ハードウェア・モジュールと、属します。
クローズ:ハードウェア方式オフ関数ポインタ。
理解構造体hw_device_t構造であるため、構造体module_methods_t構造戻りhw_device_t構造ポインタで開い関数ポインタを介してハードウェア装置の動作方法は、我々はできる「継承」構造ハードウェアデバイスを動作させるための方法を得るために実際のハードウェアデバイスの動作を展開し、ホスト構造で、第一の部材は、構造体hw_device_t型でなければならないことに留意すべきです。
上記3つの構造が密接に関連している間に、各モジュールは、ユーザがオープン機能パッケージを呼び出すハードウェアモジュールを得たとき、説明される構造体hw_module_tのハードウェア構成からなり、動作は、ハードウェアデバイスに戻りますそれらは、ハードウェア・デバイス・コール関連するインターフェイスに読み書きできること界面における方法。
次のようにHALは、標準で2つの重要なマクロ定義と機能が、あります。
/ * * * hal_module_infoの名前 * / の#define HAL_MODULE_INFO_SYM HMI / * * 文字列としてhal_module_infoの*名前* / の#define HAL_MODULE_INFO_SYM_AS_STR "HMI" / * * * IDによるモジュールに関連付けられているモジュールの情報を取得します。 * * @return:0 ==成功、<0 ==エラーと*モジュール== NULL * / INT hw_get_module(CONST のchar * ID、constの構造体 hw_module_t **モジュール)。
上記のコードでは、HAL_MODULE_INFO_SYMハードウェアモジュールは、変数名を固定し、ユーザがhw_get_module()関数を呼び出すだけさらにマクロ列表示、着信ハードウェアIDの名前は、この関数は、現在のシステムから変更され対応するハードウェアモジュールを見つけるためにハードウェアモジュールに登録され、モジュール2でポインタを返します。
4.まとめ
この記事では、AndroidシステムHALの基本的な概念を簡単に紹介をした。また、HALのインタフェースは、簡単な説明を提供します。