0

一連の列挙型が含まれているインクルード ファイル、つまりinclude/linux/power_supply.h.

列挙型は次のようになります。

enum {
    POWER_SUPPLY_STATUS_UNKNOWN = 0,
    POWER_SUPPLY_STATUS_CHARGING,
    POWER_SUPPLY_STATUS_DISCHARGING,
    POWER_SUPPLY_STATUS_NOT_CHARGING,
    POWER_SUPPLY_STATUS_FULL,
};

異なるカーネル バージョンからドライバーを移植していますがPOWER_SUPPLY_xxxxpower_supply.h.

それは間違ったことですか?これらの列挙型とは正確には何ですか?また、カーネルでのそれらの機能は何ですか?

-A

4

1 に答える 1

1

の定義は、主に で説明されている Charger-Manager でinclude/linux/power_supply.h使用されるシンボルの共通の値のセットを提供します。drivers/powerDocumentation/power/charger-manager.txt

値のセマンティクスは、 に記載されていDocumentation/power/power_supply_class.txtます。カーネル内のドライバーに共通の値のセットを提供するだけpower_supply.hでなく、ドライバーを制御するカーネルとユーザー空間ユーティリティの間のブリッジにもなります。

カーネルでこれらの列挙値のいずれかを変更すると、次の 2 つの問題が発生する可能性があります。

  1. これらの列挙型を使用する他のすべてのドライバーは正しくコンパイルできますが、実行時に悲惨な誤動作を起こす可能性があります
  2. 競合する値でコンパイルされたユーザー空間ユーティリティは失敗する可能性があります

power_supply.hしたがって、ドライバーを移植するには、ドライバーに合わせて変更するのではなく、ターゲット カーネルが使用するに適合するようにドライバー コードを変更する必要がありpower_supply.hます。つまり、ターゲット カーネル バージョンとソース カーネル バージョンの両方で、ドライバー コードと列挙値のセマンティクスを学習する必要があります。

于 2013-11-01T06:44:54.827 に答える