5

誰かがAndroid/Linuxのサスペンド/レジューム(電話の終了キーを押した後)のプロセスとコードフロー全体がどのようになっているのかについての良い読み物を知っていますか?関連するコードとファイルを理解して読み込もうとしています。

または、誰かが私にコードを教えてもらうことができれば...

4

2 に答える 2

12

お役に立てば幸いです。

AndroidはLinuxをベースにしているため、ベースはLinuxSuspendResumeとほぼ同じです。追加機能はほとんどありません。最も重要なのは、モバイルを作成するために追加されたWakelocksEarly Suspendです。PDAはバッテリーが限られているため、電力効率が高くなります。

さて、あなたが求めていることから始めましょう。電源ボタンを押すとすぐに、明らかに割り込みがトリガーされ、シーケンスが開始されます。

違い:電源ボタンを押すとすぐにLCDとタッチがスリープ状態になることに注意してください。それらはearly_suspendです。デバイスが起動している可能性があり、最も電力を消費するLCDだけで、タッチがスリープ状態になります。次に、バックグラウンドでウェイクロックがチェックされ、誰かが取得しているかどうかがチェックされます。誰かが取得しているかのように、保留中のタスクが実行されます。

共通:次に、ファイルシステムが同期され(RAM-> NAND)、プロセスがフリーズします。次に、デバイスが一時停止され、CPU状態が保存されてから、スリープ状態になります。シーケンスはLinuxとAndroidの両方で共通です。

Androidがevent.POWERを受信し、wake_lockが存在しないことを確認した後、Androidは次の方法でカーネルのサスペンドフローをトリガーしますecho mem > /sys/power/state

state_store >> pm_suspend >> enter_state >> suspend_prepare >> suspend_devices_and_enter >> dpm_suspend_start >> dpm_suspend >> device_suspend >> __device_suspend ---> suspend_enter(__device_suspendの完了後にsuspend_device_and_enterによって呼び出されます)

上記のシーケンスは、LinuxとAndroidの両方に存在します。

ファイル:suspend.c、(kernel / power /)wakelock.c、main.c(drivers / base / power)。

注: enter、valid、beginなどのSoC固有のサスペンドコールバックはすべて、arch / arm/<フォルダーにあるpm.cにあります。

于 2012-11-07T04:31:46.177 に答える