2

組み込みLinuxデバイスの電源管理サポートを実装しています。要件は、システムで実行するものがなく、次のタイマーイベントで十分な場合に、メモリへのシステムサスペンドを実行することです。既存のカーネルenter_state()関数に基づくつもりです。
最初は、システムに実行するものが何もないときに実行されるため、cpu_idle()関数(アイドルカーネルスレッド)からコードを呼び出すことを計画しました。しかし、enter_state()が最終的にschedule()関数を呼び出すという問題が発生し、「bad:アイドルスレッドからのスケジューリング!」というエラーメッセージが表示されます。
そのため、独自のカーネルスレッドを作成する必要があると結論付けましたが、優先度は最も低く静的です。私の質問は、それをどのように行うことができるかということです。
そして別の質問:そのような実装に潜在的な問題がありますか?

4

1 に答える 1

1

スケジューリングポリシーをSCHED_BATCHまたはSCHED_IDLEに設定してカーネルデーモンスレッドを作成できます。これらは、スケジュールする実行キューにこれ以上プロセスがない場合にのみ実行されます。これを拡張して、各CPUにそのようなデーモンスレッドを1つ作成できます。デバイスロジックの一時停止は、ここでスレッド内で開始できます。

于 2012-09-04T22:17:26.713 に答える