Armadilloフォーラム

Armadillo-640 電源再投入について

sankyo_takada

2024年8月27日 12時59分

高田と申します。

Armadillo-640の電源ラインにスーパーキャパシタを接続し、電源OFF後も一定時間電源電圧を維持する回路を組んでいます。
これは、電源OFFを検知して外部記録媒体をアンマウントするためです。

この回路で電源OFFしたとき、あまり時間を空けずに(数十秒程度待った後に)再度電源をONすると、U-boot(保守モード)で起動することがあります。
これは、電源OFF時に電圧が徐々に低下し、電圧が下がり切らない状態で電源を投入したためと認識しています。
現状の回路を使用し、電源再投入のタイミングに関わらずLinuxを通常起動するようにしたいのですが、このようなことは可能でしょうか。

環境は以下です。
OS:Debian GNU/Linux 10
overlayfs:無効
ArmadilloのeMMCからブート

よろしくお願いいたします。

コメント

佐藤です。

> 現状の回路を使用し、電源再投入のタイミングに関わらずLinuxを通常起動するようにしたいのですが、このようなことは可能でしょうか。
少し手間がかかりますが、ブートローダーをリビルドすることで可能です。
リビルドは ATDE 上で行います。

以下からブートローダーのソースコードを取得してください。
https://armadillo.atmark-techno.com/resources/software/armadillo-640/bo…

その後、以下のマニュアルの通りにビルドします。
https://manual.atmark-techno.com/armadillo-640/armadillo-640_product_ma…
ここで、マニュアルにある

[ATDE ~/u-boot-a600-v2018.03-at[version]]$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- armadillo-640_defconfig

上記の手順の後に

[ATDE ~/u-boot-a600-v2018.03-at[version]]$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig

を実行してください。

そこで表示される画面で、以下のように進み、"Stop auto boot when maintenance mode" を OFF にしてください。

Command line interface
  → Autoboot options
  [ ] Stop auto boot when maintenance mode ← スペースキーを押して"*"を消します。

設定が終わったら ESC キーを複数回押して保存して終了します。
その後はマニュアルにある通りににビルドしてください。

ビルドが終わったら、"u-boot.imx" を armadillo 上へコピーし、
以下のマニュアルの通りにブートローダーを書き換えてください。
https://manual.atmark-techno.com/armadillo-640/armadillo-640_product_ma…

書き込み完了後に armadillo を起動すると、保守モードに入らずにLinuxが起動するようになると思います。

高田です。
ご回答ありがとうございます。
ご教示いただいた手順で確認します。

なお参考にお聞きしたいのですが、今回の変更による他への影響(懸念点)などあるでしょうか。
デフォルト設定が保守モードで起動するようになっている意図でも良いのですが、ご教示いただけると助かります。

佐藤です。

> なお参考にお聞きしたいのですが、今回の変更による他への影響(懸念点)などあるでしょうか。
> デフォルト設定が保守モードで起動するようになっている意図でも良いのですが、ご教示いただけると助かります。
また保守モードに戻したいとなった時に再度、ブートローダーを "Stop auto boot when maintenance mode"をONにしてリビルドして、
書き換えないとならないという手間があるかと思います。

高田です。
ご回答ありがとうございます。
Armadillo-640のユーザースイッチを押しながら電源を投入しても保守モードで起動しないということですね。
重ねての質問となり恐縮ですが、以下についてもご教示いただけないでしょうか。

①ビルドコマンド
ブートローダーをビルドしましたが、最新の製品マニュアルに記載されているコマンドでビルドしたところ、起動しませんでした。
試しにCROSS_COMPILE 変数を設定せずにビルドしたイメージをArmadilloに適用したところ、起動するようになりました。
実行したコマンドは以下です。

make ARCH=arm armadillo-640_defconfig
make ARCH=arm menuconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

過去の製品マニュアルを確認すると、Ver:2.4.12でCROSS_COMPILE 変数を設定するように修正されているようですが、このコマンドでビルドした場合に起動しない原因としては何が考えられるでしょうか。

②電源再投入時に保守モードで起動する原因
デフォルトのブートローダーは、電源再投入のタイミングによっては保守モードで起動するようですが、そもそも保守モードで起動するのはなぜでしょうか。
電源電圧などの電気的な条件が関連している認識でおりますが、ご教示いただけると助かります。

よろしくお願いいたします。

佐藤です。

>
> ①ビルドコマンド
> ブートローダーをビルドしましたが、最新の製品マニュアルに記載されているコマンドでビルドしたところ、起動しませんでした。
> 試しにCROSS_COMPILE 変数を設定せずにビルドしたイメージをArmadilloに適用したところ、起動するようになりました。
こちらでも試したところ、最新の製品マニュアルに記載の通りにビルドしても起動しました。
armadillo上への u-boot.imx のコピーなどに失敗していなかったでしょうか。

> ②電源再投入時に保守モードで起動する原因
> デフォルトのブートローダーは、電源再投入のタイミングによっては保守モードで起動するようですが、そもそも保守モードで起動するのはなぜでしょうか。
> 電源電圧などの電気的な条件が関連している認識でおりますが、ご教示いただけると助かります。
デフォルトのブートローダーは以下の条件のどれかの時に保守モードになります。
電源ON時にSW1スイッチが押されている
電源ON時にCON9の1番ピンがGNDに接続されている
電源ON時にシリアルコンソールで何かキーを押したままにしている
上記以外で保守モードで起動することはありません。

シリアルコンソールは CON9 の UART1 か RS-232C のどちらを使用していますでしょうか。

高田です。
> > ①ビルドコマンド
> こちらでも試したところ、最新の製品マニュアルに記載の通りにビルドしても起動しました。
> armadillo上への u-boot.imx のコピーなどに失敗していなかったでしょうか。
改めて確認してみます。

> > ②電源再投入時に保守モードで起動する原因
> デフォルトのブートローダーは以下の条件のどれかの時に保守モードになります。
> 電源ON時にSW1スイッチが押されている
> 電源ON時にCON9の1番ピンがGNDに接続されている
> 電源ON時にシリアルコンソールで何かキーを押したままにしている
> 上記以外で保守モードで起動することはありません。
>
> シリアルコンソールは CON9 の UART1 か RS-232C のどちらを使用していますでしょうか。

保守モードで起動する条件について承知しました。
こちらの環境ではArmadilloに周辺回路を接続しており、電源ラインにはスーパーキャパシタが接続されていますので
何らかの影響があるのではないかと考えています。
シリアルコンソールはRS-232C(CON3)を使用しています。