Armadilloフォーラム

ウォッチドッグタイマーの実装について

dotsuru

2024年5月21日 14時12分

お世話になっております。

Armadillo-IoT G3Lを使用しております。
Armadillo-IoT ゲートウェイ G3L製品マニュアル(Debian GNU/Linux9 対応)の
8.3.17. ウォッチドッグタイマー を読んでいるのですが、
弊社で作成したCのプログラムに、どのようなコードで
Watchdog TimerをSTARTし、どのようなコードでRESETするのかがわかりません。
「何らかの要因でウォッチドッグタイマーのキックができなくなり」
という一文を、「Watchdog TimerをRESETすることができなくなり」
と理解しているのですが、この考え方は間違っていますでしょうか?
もし、サンプルプログラムなどあれば、ご提示願えると嬉しいです。

コメント

at_shinya.koga

2024年5月21日 14時41分

アットマークテクノの古賀です。

dotsuruさん:
>Armadillo-IoT G3Lを使用しております。
>Armadillo-IoT ゲートウェイ G3L製品マニュアル(Debian GNU/Linux9 対応)の
>8.3.17. ウォッチドッグタイマー を読んでいるのですが、

マニュアルの、ここですね:
 https://manual.atmark-techno.com/armadillo-iot-g3l/armadillo-iotg-g3l_p…
ここでは、Linux カーネル標準のウォッチドッグタイマー機能を、Armadillo-IoT G3L 搭載の SoC が持つウォッチドッグタイマーを使って有効にするカーネルコンフィグレーションを説明しています。ソースコードは、マニュアルにも記載されているように、Linux カーネルのソースツリーの drivers/watchdog/ にあります:
 https://elixir.bootlin.com/linux/v4.9.337/source/drivers/watchdog/watch…
 https://elixir.bootlin.com/linux/v4.9.337/source/drivers/watchdog/watch…

>弊社で作成したCのプログラムに、どのようなコードで
>Watchdog TimerをSTARTし、どのようなコードでRESETするのかがわかりません。

アプリケーションからは、何もする必要がありません。ウォッチドッグタイマーのキックは、カーネルスレッドが自動的に行います。
つまり、Linux カーネルがハングアップしてシステム全体が動作停止すると、SoC 内蔵のウォッチドッグタイマーが満了して SoC がリセットされる、という仕組みです。

>「何らかの要因でウォッチドッグタイマーのキックができなくなり」
>という一文を、「Watchdog TimerをRESETすることができなくなり」
>と理解しているのですが、この考え方は間違っていますでしょうか?

いえ。「キック」と「RESET」の対応については、それで合っています。

>もし、サンプルプログラムなどあれば、ご提示願えると嬉しいです。

上述したように、マニュアルの「ウォッチドッグタイマー」で説明しているのは、Linux カーネルの機能であり、アプリケーションからウォッチドッグタイマーのキック/RESET を行う必要がありません。そのため、サンプルプログラムもありません。

いかがでしょうか?