Armadilloフォーラム

ユーザースイッチ押下状態での起動について

sori_001

2023年10月13日 19時39分

いつもお世話になっています。
﨤町と申します。

A6E製品マニュアルの
3.3.4. Armadillo を起動する
 U-Boot プロンプト
  ユーザースイッチ(SW1) を押しながら電源を投入すると、 U-Boot のプロンプトが表示されます。
の機能についての説明がありますが、
上記と同じ動作で、local.dのxxx.startスクリプト内で、
スイッチの押下状態で処理の分岐をしたいと考えておりますが可能でしょうか。

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

コメント

koga

2023年10月14日 7時25分

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

﨤町さん:
>A6E製品マニュアルの
>3.3.4. Armadillo を起動する
> U-Boot プロンプト
>  ユーザースイッチ(SW1) を押しながら電源を投入すると、 U-Boot のプロンプトが表示されます。
>の機能についての説明がありますが、
>上記と同じ動作で、local.dのxxx.startスクリプト内で、
>スイッチの押下状態で処理の分岐をしたいと考えておりますが可能でしょうか。

このフォーラムの、以下の質問スレッドが参考になるかと思います。
回答で紹介していますように、buttond をお使いになってみてください:

 ユーザースイッチ状態のシェルでの取得
 https://armadillo.atmark-techno.com/forum/armadillo/15386

sori_001

2023年10月16日 19時17分

お世話になってます。﨤町です。
アットマークテクノの古賀さん、ご返信ありがとうございます。

>このフォーラムの、以下の質問スレッドが参考になるかと思います。
>回答で紹介していますように、buttond をお使いになってみてください:

buttond を試しました。
またA6E製品マニュアルにもそれらしい記載がありました。失礼いたしました。
https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_p…

こちらを試した結果、やりたいことが実現できました。
但し、「--exit-timeout 10000」を指定した際に、10秒後に自動的にプロセスが終了していないように思えます。
armadilloのプロンプトでコマンドを直接実行すると、
メッセージが表示されますが、これはどのような状態でしょうか。
お手数ですがご確認をお願いいたします。
(そもそも使用方法が間違っていたら申し訳ありません)
(--exit-timeout 2000 だと2秒後にプロセスが停止し、正しく動いているように見えます)

[実行したコマンド]
buttond /dev/input/by-path/platform-gpio-keys-event \
--exit-timeout 10000 \
--long PROG1 --time 1000 --exit-after \
--action "echo 1 > /tmp/test" &

[表示されるメッセージ]
Woke up for key unknown (0) after 1413 ms without any associated action, this should not happen!

また、もう一点質問となります。
本件の処理(SW1押下したまま起動)をU-bootプロンプトに遷移しないで実現したいのですが、
以下、A6E製品マニュアルに記載があり試したのですが、
https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_p…
bootdelay=-2 が機能しません。
bootdelay=-1 も試しましたが、こちらは説明通りにSW1を押下していなくてもU-bootプロンプトに遷移しました。
そもそもですが、本設定は「SW1を押下したまま起動でU-bootプロンプトに遷移しない」を実現できるものなのでしょうか。

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

at_dominique.m…

2023年10月17日 10時11分

﨤町さん、

よこからすみません、
マルティネです。

> こちらを試した結果、やりたいことが実現できました。
> 但し、「--exit-timeout 10000」を指定した際に、10秒後に自動的にプロセスが終了していないように思えます。
> armadilloのプロンプトでコマンドを直接実行すると、
> メッセージが表示されますが、これはどのような状態でしょうか。
> お手数ですがご確認をお願いいたします。
> (そもそも使用方法が間違っていたら申し訳ありません)
> (--exit-timeout 2000 だと2秒後にプロセスが停止し、正しく動いているように見えます)

大変申し訳ございません、不具合を確認できました。
buttond は元々 G4 のために開発していて、64bit の tv_nsec で問題なかったが、A6E では 32bit の値になってしまて実行時の nsec + exit-timeout が2秒以降に overflow してしまいます…
修正を準備しますので、少々を待ちください。

> 本件の処理(SW1押下したまま起動)をU-bootプロンプトに遷移しないで実現したいのですが、
> 以下、A6E製品マニュアルに記載があり試したのですが、
> https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_p…
> bootdelay=-2 が機能しません。
> bootdelay=-1 も試しましたが、こちらは説明通りにSW1を押下していなくてもU-bootプロンプトに遷移しました。
> そもそもですが、本設定は「SW1を押下したまま起動でU-bootプロンプトに遷移しない」を実現できるものなのでしょうか。

この点は昨日すでに古賀さんと話していて、連絡しておらずすみません。
現在のコードでは環境変数だけで設定できませんので、u-boot のソースを取得して、「make armadillo-iotg-a6e_defconfig」を行ったあとに CONFIG_SUPPORT_MAINTENANCE_MODE を無効化することで SW1 の動作を無効化できます。
今度の更新でそれも bootdelay=-2 で無効化できるようにしようと話していましたが、すぐに必要な場合にお手数ですがそのワークアラウンドでお願いします。

よろしくお願いします。

at_dominique.m…

2023年10月17日 11時02分

﨤町さん、

マルティネです。

> 大変申し訳ございません、不具合を確認できました。
> buttond は元々 G4 のために開発していて、64bit の tv_nsec で問題なかったが、A6E では 32bit の値になってしまて実行時の nsec + exit-timeout が2秒以降に overflow してしまいます…
> 修正を準備しますので、少々を待ちください。

修正を確認できましたので、提供させていただきます。

今月末のアップデートでリリースしますのでその時に ABOS を更新していただければ修正が入りますが、すぐに試したい場合は buttond の git リポジトリからビルドしていただけたらと思います:

armadillo:~# apk add git make musl-dev gcc linux-headers
armadillo:~# git clone -b test https://github.com/atmark-techno/buttond
armadillo:~# cd buttond
armadillo:~/buttond# make
# 軽い動作確認
armadillo:~/buttond# ./buttond /dev/input/by-path/platform-gpio-keys-event \
    --exit-timeout 10000 --long PROG1 --time 3000 --exit-after --action 'echo ok'
# インストール
armadillo:~/buttond# cp buttond /usr/bin/buttond
armadillo:~/buttond# pkill buttond
armadillo:~/buttond# persist_file /usr/bin/buttond
 
# バージョン確認
armadillo:~/buttond# buttond --version
buttond version 1.2-6-g165f87e

(興味があれば、修正のコミットはこちらです: https://github.com/atmark-techno/buttond/commit/e71f66e25b906700ae7af09… )

大変お手数ですが、よろしくお願いします。

sori_001

2023年10月17日 15時14分

お世話になっております。﨤町です。
マルティネさん、ご返信ありがとうございます。

> 大変申し訳ございません、不具合を確認できました。
> buttond は元々 G4 のために開発していて、64bit の tv_nsec で問題なかったが、A6E では 32bit の値になってしまて実行時の nsec + exit-timeout が2秒以降に overflow してしまいます…

不具合の旨、承知いたしました。
buttondに関しては、2秒設定でも一旦やりたいことが実現できておりますので、
修正版もご提供頂いておりましたが、もし次回アップデート前に必要になりましたら参考にさせて頂きます。
ありがとうございます。
また、アップデートの準備を引き続きよろしくお願いいたします。

> 現在のコードでは環境変数だけで設定できませんので、u-boot のソースを取得して、「make armadillo-iotg-a6e_defconfig」を行ったあとに
> CONFIG_SUPPORT_MAINTENANCE_MODE を無効化することで SW1 の動作を無効化できます。

u-bootを修正し試したところ、想定通りの動作になりました。
ありがとうございます。
できれば環境変数のみで実現したいので、こちらもアップデートをお願いいたします。

暫定的ではありますが、解決できました。
マルティネさん、古賀さん、ありがとございました。

at_kojiro.yamada

2023年11月1日 17時32分

> また、アップデートの準備を引き続きよろしくお願いいたします。

2023/10/30 の製品アップデート[1] でリリースした u-boot (2020.04-at20) から、
bootdelay の環境変数を -2 に設定すると SW1 の押下で u-boot のプロンプトに入らないようになりました。

アップデートから若干遅れたお知らせとなってしまい申し訳ありません。

今後ともよろしくお願いいたします。

[1] https://armadillo.atmark-techno.com/news/20231030/software-update-aiota…

sori_001

2023年11月1日 17時42分

お世話になっております。
﨤町です。

> > また、アップデートの準備を引き続きよろしくお願いいたします。
>
> 2023/10/30 の製品アップデート[1] でリリースした u-boot (2020.04-at20) から、
> bootdelay の環境変数を -2 に設定すると SW1 の押下で u-boot のプロンプトに入らないようになりました。
>
> アップデートから若干遅れたお知らせとなってしまい申し訳ありません。
>
> 今後ともよろしくお願いいたします。
>
> [1] https://armadillo.atmark-techno.com/news/20231030/software-update-aiota…

アップデート確認させていただきました。
こちらでも想定した動作になることが確認できました。
また、buttondについても修正版になっておりました。
更新ありがとうございました。