2

私の携帯電話の Android には、/system/lib/hw特に次のファイルがあります。

  1. センサー.exynos4.so
  2. センサー.smdk4210.so

これらの動的ライブラリは、コンパス、ジャイロスコープ、周囲光などのセンサーのチェーンのどこかにあります。

最初のファイル (sensors.exynos4.so) は、ディストリビューション自体 (i9100 用に CyanogenMod 10.1 を実行) からのもので、2 番目のファイル (sensors.smdk4210.so) は、携帯電話 (SHW-M250S、 i9100 の変種である「韓国語 S2」) を作成し、そこにコピーしました。

Question1: これらのファイルを使用しているのは何ですか?

システム内のすべてのバイナリとライブラリに対してldd(実際には readelf または objdump) を実行しても、それらのファイルのユーザーは明らかになりませんでした。私の結論:誰かが動的リンク後の実行時にプラグインのようにロードする必要があります! しかし、誰/何?(ソースコードファイル名またはコードブラウザへのリンクをお願いします)

これらのライブラリのユーザーは、構成なしで最初から 2 番目に切り替えました (そこに配置した後)。この謎に迫っていきたいと思います。

Question2: これらのファイルのソースはどこですか?

ファイルには、(少なくとも) センサーの構成 (ボード上の位置、値の範囲、ステップなど) が含まれています。携帯電話用に正しいものを生成したい。両方のソースがあれば、簡単に実行できます。– CyanogenMod バージョンだけで、少なくとも必要な修正を推測できます。

ノート:

  1. 当て推量の回答はありません。
  2. 回答の一部が「バイナリ」の場合:
    1. CyanogenMod ソースまたはそれらをプルするスクリプトのブロブを教えてください。
    2. それらを使用する最初のオープンソースライブラリ/プログラムへのチェーンをたどってください。
  3. 質問は実際にはデバイス固有ではありません。– 任意のデバイスを念頭に置いて回答します。状況は似ているはずです (AOSP、AOKP、CyanogenMod など)。
4

2 に答える 2

4

それらはバイナリブロブです。

sensor.exynos4.so およびその他の独自の blob があり ます https://github.com/chris41g/proprietary_samsung_epic4gtouch/tree/master/proprietary/lib/hw

BLOB は、extract-files スクリプトを使用して実行中のデバイスから取得できます。このスクリプトは、CM を構築しているデバイスに関係なく、プロジェクトの独自ファイルのリストを読み取ります。

ファイルをグーグルで検索するか、CM ツリーまたはその wiki を調べてみてください。

HAL はハードウェア アブストラクション レイヤーであり、センサー データをカーネル/デバイス ドライバーからユーザー空間に戻すために使用されるインターフェイスです。Android HALの構築について説明しているこのpdfを見つけましたが、別のデバイスとそこに記載されている出力については

Android ソースを正常にダウンロードしてコンパイルした後、ユーザーはセンサー HAL ライブラリをコンパイルして追加/置換できます。これを行うには、センサー HAL ライブラリ フォルダーを Android ソース パスにコピーします。通常は次の場所にあります。
[Root Android Sources]/vendor/[vendor name]/[boardname]/

ライブラリのビルド操作の前に、ユーザーは Android 環境を初期化する必要があります。
[Root Android Sources]$ source build/envsetup.sh
[Root Android Sources]$ lunch [target board]

ライブラリをビルドできるようになりました。HALフォルダーで「mm」コマンドを起動するだけです。このプロセスの結果、次の場所に動的ライブラリが作成されます。
[Root Android Sources]/out/target/product/[board name]/system/lib/hw/sensors.[board name].so

センサーの場合、SensorService は HAL をロードして、センサーと通信できるようにします。

HAL
ビル HAL

アップデート:

CM ツリー device/samsung/i9100 には、sensors.exynos4.so をビルドする Android.mk ファイルが含まれています。.mk ファイルは、
LOCAL_MODULE := sensors.$(TARGET_BOARD_PLATFORM)設定され ているモジュールを指定しますdevice/samsung/galaxys2-common/BoardCommonConfig.mk.

device/samsung/i9100/libsensorsこのデバイスのソースがあります。device/samsung/i9100g を見ると、libsensor はなく、そのデバイスでは CM スクリプトを実行して実行中のデバイスから blob をプルする必要があるため、ソースの可用性はデバイスによって異なります。

また、BoardConfig がいくつかの値を smdk4210 に設定するという観察結果もあります。

于 2013-08-22T20:59:16.703 に答える