17

arm ベースの組み込み Linux プラットフォーム上で実行される小さなアプリケーションを開発する予定です。ただし、そのプラットフォームはバッテリー駆動であるため、省電力の処理方法に関する関連情報を探しています。

まともなバッテリー時間を確保することは一種の重要です。

Linux カーネルはこれに対するサポートを実装していると思いますが、この件に関するドキュメントは見つかりません。

  • 私のプログラムとシステムを設計する方法についての意見は大歓迎です。

  • Linux カーネルがこの種の問題をどのように解決しようとしているのかについての意見も歓迎します。

その他の質問:

  • ユーザー空間のプログラムはどれくらいのことをする必要がありますか?

  • また、カーネルを変更する必要がありますか?

  • 知っておくとよいカーネル システム コールまたは API は何ですか?


更新

「Free Electrons」サイトの関係者が、この件に関して素晴らしいプレゼンテーションを作成したようです。

しかし、他の誰かがこの件についてさらに詳しい情報を持っているのではないでしょうか?


更新

MeeGo プロジェクトを見に行くという Adam Shiemke のアイデアは、これまでのところ最良のヒントのようです。

現時点では、バッテリ駆動の組込み Linux プロジェクトの中で最高のものかもしれません。

そして、ノキアは通常、この種のことを得意としています。


更新

下部に「変更された」Linux カーネルがあり、Google の人々が行ったことのいくつかはベースライン/通常の Linux カーネルを使用していないため、Android には注意する必要があります。彼らの電源管理のアイデアの中には、他のプロジェクトで再利用するのが面倒なものもあると思います。

4

4 に答える 4

11

私は実際にこれを行ったことはありませんが、この 2 つ (Linux と組み込み電源管理) については経験があります。電源管理について考えるとき、Android と MeeGo という 2 つの主要な Linux ディストリビューションが思い浮かびます。MeeGo は (私が知る限り) 変更されていない 2.6 カーネルを使用しており、追加の機能がいくつか追加されています。彼らの電源管理戦略が正確に何であるかについて多くを見つけることができませんでしたが、製品が成熟に近づくにつれ、近い将来それについてもっと多くのことが明らかになると思います.

ただし、Android ではさらに多くの情報を入手できます。彼らはかなり大幅に変更された 2.6 カーネルを実行します。http://elinux.org/Android_Power_Management (およびカーネル ドラマ)で実装されているさまざまな戦略について、かなりの部分を確認できます。その他のリンク:

https://groups.google.com/group/android-kernel/browse_thread/thread/ee356c298276ad00/472613d15af746ea?lnk=raot&pli=1

http://www.ok-labs.com/blog/entry/context-switching-in-context/

この性質のリンクをもっと見つけることができると確信しています。どちらのプロジェクトもオープン ソースであるため、カーネル コードを入手できます。また、フォームやグループで何について話しているかを実際に知っている人から、さらに詳しい情報を得ることができます。

ドライバー レベルでは、ドライバーがサスペンドを適切に処理し、使用されていないデバイスをシャットダウンできることを確認する必要があります。モバイル市場向けのほとんどのデバイスは、個々のコンポーネントをオフにし、クロック設定を微調整するための非常にきめ細かいサポートを提供します (電力はクロック ^2 に比例することを思い出してください)。

お役に立てれば。

于 2010-06-29T22:53:26.767 に答える
6

アプリケーションとドライバーを作成している(または少なくともソースコードを持っている)と仮定すると、OSからの特別なサポートを必要とせずに、かなりの省電力を実行できます。

ドライバーは、再起動やシステムの不安定性を引き起こすことなく、関連するデバイスを無効にして元に戻すことができる必要があります。デバイスがPCI/PCIeバスに接続されている場合は、それらがサポートする電力状態(D0〜D3)と、これらの低電力モード間を移行するためにドライバーが何をする必要があるかを調べます。使用するハードウェアデバイスを選択する場合は、PCI電源管理仕様に準拠しているデバイス、または同様の機能(スリープモードや「ウェイクアップ」割り込み信号など)を備えているデバイスを探してください。

デバイスが起動すると、何かに接続されているかどうかを検出する機能を持つすべてのデバイスが起動する必要があります。ポートまたはバスが使用されていないことを検出した場合は、電源を切るか、スリープ状態にします。フルパワーで動作しているが未使用のままのポートは、想像以上に多くの電力を浪費する可能性があります。特定のハードウェアとユースケースによっては、デバイスの使用状況を監視し、未使用/アイドル状態のリソースを識別し、適切に動作する(ハードウェアの「スクリーンセーバー」のように)バックグラウンドアプリがあると便利な場合もあります。

アプリケーションソフトウェアは、ハードウェアデバイスを使用する前に、ハードウェアデバイスの電源が入っているかどうかを確認する必要があります。低電力モードになっている可能性のあるデバイスにアクセスする必要がある場合、アプリケーションは、デバイスがウェイクアップして応答するのを待つ際に、潜在的に長い遅延を処理できる必要があります。アプリケーションは、デバイスのスリープの必要性にも配慮する必要があります。一連のコマンドをハードウェアデバイスに送信する必要がある場合は、間隔を空けて複数のウェイクアップ->送信->スリープサイクルを必要とするのではなく、それらをバッファリングして一度に送信してみてください。

システムコンポーネントをわずかにアンダークロックすることを恐れないでください。電力を節約するだけでなく、これは彼らがより涼しく走るのを助けることができます(それは冷却のためにより少ない電力を必要とします)。適切なマージンで必要以上に強力なCPUを使用する設計を見たことがありますが、CPUは40%もアンダークロックされます(パフォーマンスは元のレベルに低下しますが、電力コストはわずかです)。 。また、電力を節約するために電力を使うことを恐れないでください。つまり、CPU時間を監視するハードウェアデバイスを使用して、ハードウェアデバイスを無効化/休止状態にする機会を恐れないでください(CPUがもう少し電力を使用する場合でも)。ほとんどの場合、このトレードオフにより、正味の電力が節約されます。

于 2010-06-29T23:28:12.117 に答える