Armadilloフォーラム

ハードウェアウォッチドッグのタイムアウト時間の変更方法について

eqc_1101

2023年3月29日 19時26分

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

Armadillo-IoT G3Lでハードウェアウォッチドッグを利用していますが、
ユーザーアプリケーションの都合上タイムアウト時間を変更したく、その方法をご教示いただけないでしょうか。
現在は標準から変更していないため、初期化時の10秒で設定されていると思われます。

製品マニュアルを確認するとU-Bootによって有効化されてLinuxカーネルの初期化時に
10秒で再設定しているとの記載までは確認しております。

変更は永続を望んでおり、起動中にコマンド実行して変更するよりも、
起動時に変更した時間で立ち上がるのが望ましいと考えております。

よろしくお願いします。

コメント

溝渕です。

> Armadillo-IoT G3Lでハードウェアウォッチドッグを利用していますが、
> ユーザーアプリケーションの都合上タイムアウト時間を変更したく、その方法をご教示いただけないでしょうか。

ソースコードを2箇所変更するとタイムアウトを変更可能です。

U-Bootでは以下の箇所でタイムアウトを設定しています。

include/configs/x1.h:
#define CONFIG_WATCHDOG_TIMEOUT_MSECS 10000

Linuxカーネルでは以下の箇所でタイムアウトを設定しています。

arch/arm/boot/dts/armadillo_x1l.dts:
&wdog1 {
	timeout-sec = <10>;

タイムアウトを長くする分には恐らく問題ありませんが、極端に短かいタイムアウトを設定すると起動できなくなるかもしれません(具体的にどのくらい短かくするといけないかの知見は持ち合わせていませんが)。

これは、U-Bootでハードウェアウォッチドッグを有効化しており、その時点からキックし続ける必要がありますが、Linuxカーネルでハードウェアウォッチドッグのドライバ登録を行うまでキックするソフトウェアが存在しなくなる為です。

回答ありがとうございます。

>ソースコードを2箇所変更するとタイムアウトを変更可能です。
承知しました。
以下、確認させてください。

1)
ソースコード変更後にこの修正をG3Lに適用させるためには、製品マニュアル記載の、
 ①ブートローダーをビルドする⇒ブートローダーイメージの更新
 ②Linuxカーネルをビルドする⇒Linux カーネルイメージの更新
これらを実施する必要があると認識していますが、相違ないでしょうか?

2)
上記2種類のイメージ更新は遠隔から実施可能でしょうか?
例えば以下のような手順を考えています。
 ①予め製品マニュアルに記載されているイメージ更新コマンドをシェルスクリプトで作成して対象G3Lに配置しておく
 ②ビルドした更新イメージを対象G3Lにダウンロード
 ③②イメージを対象に①スクリプトを実行して自動更新(ブートローダーとカーネルの両方実行)
 ④③終了後、適用させるために再起動
まだ試していませんが手順などご指南いただければと思います。

3)
(的外れかもしれませんが)、
今回ソースコード修正をご案内いただきましたがブートスクリプトを作って今回の対応は可能でしょうか?
https://armadillo.atmark-techno.com/howto/u-boot-script
(ブートスクリプト自体あまりよく理解できていませんが関連しているのかと思いました)

>タイムアウトを長くする分には恐らく問題ありませんが、
 タイムアウト値をどうするかご説明できていませんでした、すみません。
 長くします。
 現在10秒ですが、30秒~60秒を検討しています。
 もし何か懸念事項がございましたらご教示願います。

以上、よろしくお願いします。

溝渕です。

> 1)
> ソースコード変更後にこの修正をG3Lに適用させるためには、製品マニュアル記載の、
>  ①ブートローダーをビルドする⇒ブートローダーイメージの更新
>  ②Linuxカーネルをビルドする⇒Linux カーネルイメージの更新
> これらを実施する必要があると認識していますが、相違ないでしょうか?

相違ありません。

> 2)
> 上記2種類のイメージ更新は遠隔から実施可能でしょうか?
> 例えば以下のような手順を考えています。
>  ①予め製品マニュアルに記載されているイメージ更新コマンドをシェルスクリプトで作成して対象G3Lに配置しておく
>  ②ビルドした更新イメージを対象G3Lにダウンロード
>  ③②イメージを対象に①スクリプトを実行して自動更新(ブートローダーとカーネルの両方実行)
>  ④③終了後、適用させるために再起動

実施可能です。

ただ、書き換え対象がブートローダーとカーネルなので、(突然の電源断やイメージファイルの取り違え等によって)書き込みに失敗すると起動できなくなります。

そのような状況にならないようご注意ください。

> 3)
> (的外れかもしれませんが)、
> 今回ソースコード修正をご案内いただきましたがブートスクリプトを作って今回の対応は可能でしょうか?
> https://armadillo.atmark-techno.com/howto/u-boot-script
> (ブートスクリプト自体あまりよく理解できていませんが関連しているのかと思いました)

恐らく可能と思います。

U-BootもファイルのダウンロードやeMMCへの書き込みに対応している(はず?)ですので、U-Bootスクリプトの方が書きやすければ、そちらを選択しても良いと思います。

> >タイムアウトを長くする分には恐らく問題ありませんが、
>  タイムアウト値をどうするかご説明できていませんでした、すみません。
>  長くします。
>  現在10秒ですが、30秒~60秒を検討しています。
>  もし何か懸念事項がございましたらご教示願います。

前述の通り、タイムアウトを長くする分には恐らく問題無いと思います。

回答ありがとうございます。

> > 今回ソースコード修正をご案内いただきましたがブートスクリプトを作って今回の対応は可能でしょうか?
> > https://armadillo.atmark-techno.com/howto/u-boot-script
> 恐らく可能と思います。

ソースコードコード修正するよりかは、スクリプトで対応する方が影響範囲が少ないと思われるため、
こちらで検討したいのですが、今回対応するためのブートスクリプトを教えていただけないでしょうか。
参考URL先をベースに考えるとして、
1)
「2.u-bootコマンドを記述したテキストファイルの作成」
 ハードウェアウォッチドッグのタイムアウト値を60(秒)に変更するためのboot.txtをご教示いただけますと幸いです。

2)
「3.boot.scrの生成」
 ATDE8上でこのコマンドを実行予定ですが、コマンド内容は同一でよろしいでしょうか?

3)
「4.boot.scrの配置」
 G3Lに対してこのコマンド群で実行予定ですが、コマンド内容は同一でよろしいでしょうか?

追加)
製品マニュアルの「6.2.1. インストールディスクイメージの作成」を確認すると、
「BOOTSCR:U-Boot ブートスクリプト (オプション)」があります。
これは、インストールディスク作成の段階でboot.scrを組み込んで、
そのディスクを使ってboot.scr適用済みのG3Lが量産できる、という認識で相違ないでしょうか?

以上、よろしくお願いします。

溝渕です。

> > > 今回ソースコード修正をご案内いただきましたがブートスクリプトを作って今回の対応は可能でしょうか?
> > > https://armadillo.atmark-techno.com/howto/u-boot-script
> > 恐らく可能と思います。
>
> ソースコードコード修正するよりかは、スクリプトで対応する方が影響範囲が少ないと思われるため、
> こちらで検討したいのですが、今回対応するためのブートスクリプトを教えていただけないでしょうか。

すみません。認識を誤っていました。

私の回答は、
(タイムアウトを変更したイメージファイルの更新を)ブートスクリプトで対応可能と回答したもので、
(タイムアウトの変更を)ブートスクリプトで対応可能としたものではありません。

U-Boot/Linuxカーネルのいずれもソースコードの変更が必要なもので、ブートスクリプトからはソースコードの変更やビルドを行う事はできません。

回答ありがとうございます。
こちらこそ認識の誤り申し訳ございません。

承知しました、ソースコード修正で対応してみます。
以上、よろしくお願いします。