[Armadillo:09183] Re: Armadillo-4x0 のハードウェアWDT

Makoto Harada email@hidden
2013年 9月 10日 (火) 11:54:57 JST


原田です。

(2013年09月08日 11:55), Yasuhisa Nakamura wrote:
> 中村です。
> 
> Armadillo-4x0のハードウェアウォッチドッグタイマの
> 使い方を教えていただけないでしょうか?
> 
> http://manual.atmark-techno.com/armadillo-4x0/armadillo-400_series_software_manual_ja-1.8.1/ch09.html#sec-watchdog-timer
> に、次の説明があります。
> ----- 引用 -----
> Armadillo-400 シリーズで採用している i.MX25 プロセッサは、
> 内蔵ウォッチドッグタイマーを有しています。
> Armadillo-400 シリーズの標準ブートローダーでは、起動直後に
> この内蔵ウォッチドッグタイマーを有効にします。標準状態での
> タイムアウト時間は 10 秒に設定されます。
> Linux カーネルでは、自動でウォッチドッグタイマーをキックします。
> もし、何らかの要因で Linux カーネルがフリーズしてウォッチ
> ドッグタイマーをキックできなくなりタイムアウトが発生すると、
> システムリセットが発生します。
> ----- 引用おわり -----
> 
> これを読み、標準状態で何もしなくとも動作していて、
> カーネルパニックなどのとき10秒で自動的に再起動するのかな?
> と思い、panic()を使って故意にカーネルパニックを発生させて
> みましたが、panic表示で停止したまま、いくら待っても
> 何もおきませんでした。
> 

カーネルパニックが起きてもそのプロセスが死ぬだけで、
実際にLinux自体は走り続けております。そのため、panic()を読んでも
ウォッチドッグリセットはかかりません。

例えば、ドライバ内で、以下のようにARMのインタラプト機能自体を無効にした上で、
無限ループを実行すれば、ウォッチドッグリセットがかかると思います。

local_irq_disable();
while(1);

(参考までに、簡単なテストモジュールを添付させて頂きます。
 1. Makefile内のKERNEL_SRCを、ご使用の環境に変更
 2. make
 3. 作成されたdisable_interrupts.koファイルをftp等でArmadilloへ転送
 4. Armadilloで、insmod disable_interrupts.ko
 でお試し頂けます。)

> MLの過去記事やArmadilloのサイトのサポートを探しても
> これ以上の説明はなく、どうやって使うのか(どういうときに
> 再起動(上の引用では「システムリセット」)がかかるのか)、
> わかりません。
> 
> ブートローダのソースで10秒を設定しているようなところは
> みつけましたが、
> 「Linux カーネルでは、自動でウォッチドッグタイマーをキックします」
> という部分は、カーネルのどこでやっているのか(どこに設定が
> あるのか)もわかってません。
> 

linux-2.6.x/arch/arm/plat-mxc/time.c
内のmxc_timer_interrupt()(i.MX25のGPT(General Purpose Timer)の割り込みハンドラ)で、
mxc_kick_wd()を呼び出し、ウォッチドッグタイマーをキックしにいっております。

> 試していませんが、カーネルコンフィグに
> CONFIG_WATCHDOG
> CONFIG_MXC_WATCHDOG
> などがあります。
> これらは、デフォルトのまま有効にしていません。
> 

CONFIG_WATCHDOG
CONFIG_MXC_WATCHDOG
はArmadillo-4x0では使用しておりません。

ウォッチドッグタイマードライバは、以下にございます。
linux-2.6.x/arch/arm/plat-mxc/wdog.c

標準状態では、ブートローダー(Hermit-At)内でウォッチドッグタイマーの設定(タイムアウト10秒)を行い、
LinuxではGPTの割り込みハンドラでウォッチドッグをキックしにいく仕組みとなっております。

(linux-2.6.x/arch/arm/plat-mxc/wdog.c内で、WDOG1_ENABLEを有効にすることで(標準では、undefされております)、
mxc_wd_init()が呼び出されウォッチドッグタイマーの再初期化(タイムアウト4秒) を行うことができます。)

> このconfigのWDTの動作は、
> http://armadillo.atmark-techno.com/howto/watchdog
> に説明があるものと同じと思っていますが、
> これと、このメール前半に書いたWDTとは別ものですよね?
> 
> echo N > /proc/sys/kernel/panic
> ("N"は秒数)
> によるカーネルパニック時の自動再起動は動いていますので、
> これでもいいのですが・・・
> 
> よろしくお願いします。
> 

-------------- next part --------------
テキスト形式以外の添付ファイルを保管しました...
ファイル名: sample_module.tgz
型:         application/x-compressed-tar
サイズ:     609 バイト
説明:       無し
URL:        <http://lists.atmark-techno.com/pipermail/armadillo/attachments/20130910/dd775229/attachment.bin>


armadillo メーリングリストの案内