2007年12月21日金曜日

NetBSDでWatchdog timerを使う(for ALIX) (1)

Watchdogタイマはシステムがハングアップしたときに自動的に復帰するための監視機構だ。原理は簡単で、独立したタイマが動いていて、そのタイマが設定した値に到達するとシステムリセットがかかるようにしておく。システムが正しく動いているときはそのタイマの値を定期的に0にもどし、リセットがかからないように管理する、というものだ。
ALIXで動かすNetBSDでGPIOをサポートするコードを書くついでにwatchdogタイマも生かしてみることにした。最近は組込機器っぽい用途でNetBSDを使うこともあっていつか機会があればwatchdogタイマを使ってみようと思っていたので、ちょうどよい。
AMDのCS5536には、MFGPT(Multi Function General Purpose Timer)というすごい名前のタイマ群が実装されている。そのうちの一つMFGPT0をWatchdogタイマとして使う、というのが元々のOpenBSDのglxpcib.cでの実装だ。問題はNetBSDとOpenBSDではwatchdogタイマを使うためのフレームワークが異なっている点で、そのままでは動かない。そこで、NetBSDが使っているsysmonフレームワークに合わせて書き直すことにした。というわけで、やるべきことは、

  1. AMD CS5536のMFGPTの仕組みを理解
  2. NetBSD sysmonフレームワークを理解&sysmon wdogtimerの使い方を理解
  3. コードを書く
ということになる。MFGPT自体はGPIOと同様にCS5536のPCI-ISAブリッジデバイスの一部として実装されているため、glppcib.cの一部として扱えばmatch/attachルーチンは特に必要ない。純粋にデバイスの設定とsysmonフレームワークとの連携がうまくかければ動くだろう、ということでやってみた。

具体的な話は次のエントリーで。

0 件のコメント: