BBBBox_WDT

BeagleBoneBlack Boxにはハードウェアウォッチドックタイマ(以下WDT)が搭載されています。

TPS3828a.png

  • WDI(watch dog clear信号)はBeagleBoneBlack拡張コネクタP9_30番ピンに接続されています
    • LinuxユーザランドからのGPIO番号は112
    • AM355x CPU上のハードウェアピンはGPIO3_16
  • WDTタイムアウト時間は 1.6秒固定です
  • HighもしくはLowに変化させるとWDTクリア
  • HighもしくはLow固定1.6秒でリセット出力
  • WDI信号をオープンにすると内蔵Auto Reset Oscillatorの働きでWDT自動クリア(Linuxから見るとWDT disable状態)

WDTの使い方

wdt1.png

(1)電源投入時

BeagleBoneBlack 起動には P9_30番ピンは PullDown有りの入力になっています。ところがこの状態では内蔵Auto Reset Oscillatorが働かず1.6秒後にリセットされてしまいます。そこで電源投入直後に P9_30番ピンを PullUp/PullDown 無しの入力 = ハイ・インピーダンスにする必要があります。

U-BOOT(MLO)の改造

改造後のビルド済み MLO はこちら(v2014.07 を 2014-09-10 にビルドした)

fileMLO

ソースから自分でビルドする場合

u-bootの2段ブートのうち、前段であるMLOソースを改造してビルドし直します。
ソースの改造箇所は次の通り(関連: u-bootビルド手順)

  • board/ti/am335x/board.c
 void set_mux_conf_regs(void)
 {
         __maybe_unused struct am335x_baseboard_id header;
 
         if (read_eeprom(&header) < 0)
                 puts("Could not get board ID.\n");
 
         enable_board_pin_mux(&header);
 
+        puts("ebihara custom. GPIO3_16 (P9_30) as WDT_IN ("__DATE__" "__TIME__")\n");
+        writel((1<<5)|(1<<4)|(1<<3)|(7),0x44e10800+(0x198));        // 0x3f,0x44E10998
}

改造後MLOのインストール方法

IMG_1153.jpg

作業はBBB単体で行います。6pinUSBシリアルケーブルを接続します。

RevAからRevB (Angstrom)の場合

MLOは eMMCの第一パーティションに存在します。Angstrom を起動後、しばらく待つと /media/BEAGLEBONE に自動マウントされます。

/dev/mmcblk0p1 on /media/BEAGLEBONE type vfat
注意: たまに /media/BEAGLEBONE_ に自動マウントされることもあります
# cd media/BEAGLEBONE  (または /media/BEAGLEBONE_)
# mv MLO MLO-backup                オリジナルのMLOをバックアップ
# cp /どこかのパス/MLO .           どこかのパスからMLOを持ってくる
# cd /                             / へ移動
# sync                             念のためsync

再起動。

RevC (debian)の場合

MLOは eMMCの第一パーティションに存在します。debian を起動後、しばらく待つと /boot/uboot に自動マウントされます。

# cd /boot/uboot
# mv MLO MLO-backup                オリジナルのMLOをバックアップ
# cp /どこかのパス/MLO .            どこかのパスからMLOを持ってくる(scpなどで)
# cd /                             / へ移動
# sync                             念のためsync

再起動。

MLOが更新されたかの確認

起動2行目に "ebihara custom" の文字列が確認できればOK

U-Boot SPL 2014.07-dirty (Sep 10 2014 - 18:35:03)
ebihara custom. GPIO3_16 (P9_30) as WDT_IN (Sep 10 2014 18:35:30)
  • miscroSDにubuntuやdebianをインストールする場合もMLOは内蔵eMMCの第一パーティションのものが使われます。
  • ただしS2ボタンを押しっぱなしにして起動する場合はmiscoSDの第一パーティション(FAT)のMLOから起動します。
    S2ボタン押しっぱなしを使う場合はmicsoSDをWindowsPC等でマウントして第一パーティション(FAT)のMLOを置き換えてください。
  • miscoSDから起動している場合は microSDが /dev/mmcblk0 で 内蔵 eMMC が /dev/mmcblk1にります。
    つまり mount /dev/mmcblk1p1 /media で手動マウントしてください。

(2)WDTクリアタスク

以後は RevA,B,C (Angstrom, Debian共通)

シェルスクリプトで組んだ wdt有効&クリアタスク。Linux上のGPIO番号112 を out に設定するとwdtが有効になります。その後1秒毎に 1 / 0 を切り替えてWDTをクリアする。

#!/bin/sh

# WDT enable
echo 112 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio112/direction

# WDT clear 
while true
do
	echo 1 > /sys/class/gpio/gpio112/value
	echo wdt_1
	sleep 1 

	echo 0 > /sys/class/gpio/gpio112/value
	echo wdt_0
	sleep 1
done
  • Linuxがハングアップするなどしてこのタスクに処理が回ってこなくなると、1.6秒後にリセットがかかる。
  • 自殺(ハードウェアリセット)したいときはこのタスクをkillする。

(3)WDT disable

シェルスクリプトで組んだ wdt disable。Linux上のGPIO番号112 を入力にするとWDTが無効になります。 MLOでPullUp/PullDown無しとしているのでハイインピーダンスとなり、Auto Reset Oscillatorの働きによって以後はWDT自動クリアとなる。

#!/bin/sh
echo in > /sys/class/gpio/gpio112/direction

Angstrom以外のディストリビューションを使う場合

BBBはmicroSDが刺さっていても内蔵eMMCのMLOから起動します。

  1. 内蔵eMMCのMLOが起動する。(ただしS2を押しっぱなしで電源を入れた場合はmicroSDのMLOから起動する)
  2. microSDが刺さっていればmicroSDのu-boot.imgをロード
  3. microsDが無い場合はeMMCのu-boot.imgをロード

WDT対応にするためにはBBB内蔵のeMMCのMLOを書き換えれば良いことになります。
この場合には電源投入直後のMLOでWDTが無効になり、上記(2)のスクリプトを走らせない限りはWDTは有効になりません。

その他

  • MLOのインストール作業はBBBBoxに組み付ける前にBBB単体で行ってください
  • 弊社出荷のBBBBoxはMLO変更済みです
  • どうしてもWDTがあると困る場合はU4を取り外してください
  • またはWDT無しでのカスタム出荷もできます。ご相談ください

関連

自動リンク

社外リンク