LinuxにおけるSuspend to RAMの仕組みをお教えください。

投稿者: Anonymous

現在、組込みLinuxのプロジェクトに携わっており、
ターゲットCPUは TI AM3352, Kernel Version 4.19.59です。

要求項目として
・スリープ →DDR3-SDRAM セルフリフレッシュで内容を保持、他のデバイスはPower Off
・レジューム →スリープから通常の動作状態に復帰する。
があります。

一応、コンフィグレーション項目としては

CONFIG_SUSPEND:
   Allow the system to enter sleep states in which main memory is
   powered and thus its contents are preserved, such as the
   suspend-to-RAM state (e.g. the ACPI S3 state).

   Symbol: SUSPEND [=y]
   Type  : bool
   Prompt: Suspend to RAM and standby
     Location:
       -> Power management options
     Defined at kernel/power/Kconfig:1
     Depends on: ARCH_SUSPEND_POSSIBLE [=y]

があるので、これを’y’にするのが必須とは考えております。

だが仕組みがわかりません。とくにPower Offされるデバイスに対する状態の保持と復帰についてです。

DDR3-SDRAMはスリープ時Self refreshモードにし、電源はPower Onのままのため
スリープ時も内容が保持されるためあまり気にする必要は無いと思いますが
スリープ時Power Offされる各(というか実装されている全ての)デバイスはPower Offされる前に今までデバイスに設定した状態の保持と復帰が必要になるはずです。
そのような仕組みがあるとすれば、おそらく、その仕組は、それぞれのデバイスドライバで担務していると考えています。

質問

(1) Linuxのデバイスドライバは、そのようにsuspend-to-RAMに対応した仕組みがあるのでしょうか?
だとすれば、そればどのような仕組みでしょうか? このソースが参考になる的でも構いません。
(2) suspend-to-RAMに関する仕組みについてよい解説かリンク先があればお教えください。

解決

(1)について

Linuxカーネルにはその仕組みがあります。
デバイスドライバーにとってはオプションなので, 実装しているとは限りません。(ちなみにドライバー作ったことありますがデスクトップ用だったので open/close read/write 程度の実装でした)
suspendresume といったエントリーを実装できるので, 実装し・その情報をセットするだけです。
ソースについては, Linux kernel標準のドライバーの中から実装してそうなのを探し出すしか無いと思います (ディスプレイドライバー辺り実装してそうな?)

(2)資料について

回答者: Anonymous

Leave a Reply

Your email address will not be published.