256MBのRAMと4GBのeMMCを備えたBeagleboneブラックベースのカスタムボードを持っています。
Linux-3.12からLinux-4.4に、busybox-1.20.2からbusybox-1.26.2にアップグレードしました。
これで、busybox-1.26.2にはbusybox-1.20.2になかった問題が表示されます。
最後のinitスクリプトの1つに次のコードを追加しました。
if [ -f /home/ankur ] ; then
count=50
rm /home/ankur
echo "----Check Whoami----"
whoami #prints root
reboot
echo "--------------------"
while [ true ]
do
count=$((count - 1 ))
echo "Count = $count"
if [ $count -le 0 ];then
break;
fi
echo "Sleep 1"
sleep 1
done
fi
ファイルをタッチし/home/ankur
てボードを再起動しました。
システムは再起動されませんでしたが、カウンタがゼロに低下し、他の初期化スクリプトが実行され、次にボードが再起動することが観察されました。
したがって、busyboxはシグナルを受け取りますが、reboot
initスクリプトが実行された後にのみ処理するようです。
reboot
今私の質問は、すべての初期化スクリプトが完了する前にボードに入る方法があるかどうかということです。この再起動ブロックを無効にするbusybox設定はありますか?
reboot -f
(initを経ずに強制的に再起動する)は機能しますが、停止スクリプトも実行する必要があるため使用できません。
答え1
そのため、busyboxに再起動するように指示されたようですが、initスクリプトが実行された後にのみ処理されます。
はい、これはinit
BusyBoxがどのように機能するかです。いいえ、設定できません。プログラムを変更して再構築する必要があります。
追加読書
- デニス・ブラッセンコ(2014-11-21)。init:シグナルハンドラで終了/再実行ジョブを実行しないでください。。 BusyBoxのソースコード。