元ネタはこちらの記事です。作者様に感謝!
今回はGPIO21ピンを使用します。
タクトスイッチなどをGPIO21ピンとGNDに接続するだけです。
shutdown 起動スクリプト
ボタンが押下された時にシャットダウンを行うためのスクリプトです。shutdonwボタンサービスとしてデーモン化して起動するので、バックグラウンドでボタン押下を監視します。 /usr/local/sbin/shutdown-daemon2.sh として作成します。
/usr/local/sbin/shutdown-daemon2.sh
#!/bin/sh
GPIO=21 # GPIO Port
PUSHTIME=5 # wait sec
## initialize
echo "$GPIO" > /sys/class/gpio/export
echo "in" > /sys/class/gpio/gpio$GPIO/direction
echo "high" > /sys/class/gpio/gpio$GPIO/direction
## LED control
set_led_mode () {
echo $1 > /sys/class/leds/led0/trigger
}
set_led_value () {
echo $1 > /sys/class/leds/led0/brightness
}
## wait loop
cnt=0
while [ $cnt -lt $PUSHTIME ] ; do
if [ `cat /sys/class/gpio/gpio$GPIO/value` -eq "0" ] ; then
cnt=`expr $cnt + 1`
[ $cnt -eq 1 ] && set_led_mode heartbeat
else
[ $cnt -gt 0 ] && set_led_mode mmc0
cnt=0
fi
sleep 1
done
## shutdown LED
set_led_mode none
set_led_value 1
sleep 2
set_led_value 0
set_led_mode mmc0
## do shutdown
shutdown -h now
元ネタサイトではGPIOをActive high として書いていますが、使用するピンの配置の関係上、Active low の方が都合がいいので変更しています。GNDに落ちたらボタン押下として認識します。
実行権限付加しておきます。
$ sudo chmod 755 /usr/local/sbin/shutdown-daemon2.sh
shutdownボタンサービス
起動時にバックグラウンドサービスとして起動するためのスクリプトです。/etc/init.d/shutdown-button
#! /bin/sh
### BEGIN INIT INFO
# Provides: shutdown-button
# Required-Start:
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Shutdown Button
# Description: wait Shutdown Button
### END INIT INFO
# /etc/init.d/shutdown-buttonPIDFILE=/var/run/shutdown-btn.pid
case "$1" in
start)
if [ -f $PIDFILE ]; then
echo $PIDFILE exists.
exit 1
fi
start-stop-daemon -S -x /usr/local/sbin/shutdown-daemon2.sh -b -m -p $PIDFILE
;;
stop)
if [ ! -f $PIDFILE ]; then
echo $PIDFILE not found.
exit 1
fi
start-stop-daemon -K -p $PIDFILE
rm $PIDFILE
;;
*)
echo "Usage: /etc/init.d/shutdown-button {start|stop}"
exit 1
;;
esac
exit 0
実行権限を付加して、サービスとして登録します。
$ sudo chmod 755 /etc/init.d/shutdown-button
$ sudo insserv shutdown-button
以上。
ボタンを押すとLEDがチカチカっと点滅を繰り返します。そのまま5秒押し続けると shutdown プロセスが走り出します。
shutdown するだけで電源は切れません。動作の停止を確認しで電源を抜いてください。
GPIO -> ST-4 convert 基板にはGPIO21ピンのパターンがあるので配線さえすればボタンの取り付けが可能です。
0 件のコメント:
コメントを投稿