Để bổ sung cho câu trả lời của Andrey Volkov, hệ thống Debian mới có định dạng được đặt cho tập lệnh init. Vui lòng tham khảo tại đây
Với điều đó tôi đã tạo ra một kịch bản nên hoạt động trên hệ thống của bạn.
Đặt tên cho đoạn script sau gpio_init và chown vào root.root và chmod thành 755. Sao chép nó vào /etc/init.d/
#!/bin/sh
### BEGIN INIT INFO
# Provides: gpio_init
# Required-Start: $local_fs $network $named $time $syslog
# Required-Stop: $local_fs $network $named $time $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Description: Initialize GPIO pins for the project
### END INIT INFO
SCRIPT=/usr/local/bin/gpio-init
RUNAS=root
PIDFILE=/var/run/gpio_init.pid
LOGFILE=/var/log/gpio_init.log
start() {
if [ -f /var/run/$PIDNAME ] && kill -0 $(cat /var/run/$PIDNAME); then
echo 'Service already running' >&2
return 1
fi
echo 'Starting service…' >&2
local CMD="$SCRIPT &> \"$LOGFILE\" & echo \$!"
su -c "$CMD" $RUNAS > "$PIDFILE"
echo 'Service started' >&2
}
stop() {
if [ ! -f "$PIDFILE" ] || ! kill -0 $(cat "$PIDFILE"); then
echo 'Service not running' >&2
return 1
fi
echo 'Stopping service…' >&2
kill -15 $(cat "$PIDFILE") && rm -f "$PIDFILE"
echo 'Service stopped' >&2
}
uninstall() {
echo -n "Are you really sure you want to uninstall this service? That cannot be undone. [yes|No] "
local SURE
read SURE
if [ "$SURE" = "yes" ]; then
stop
rm -f "$PIDFILE"
echo "Notice: log file is not be removed: '$LOGFILE'" >&2
update-rc.d -f gpio_init remove
rm -fv "$0"
fi
}
case "$1" in
start)
start
;;
stop)
stop
;;
uninstall)
uninstall
;;
retart)
stop
start
;;
*)
echo "Usage: $0 {start|stop|restart|uninstall}"
esac
Tập lệnh này sẽ gọi một tập lệnh khác trong / usr / local / bin /
gpio-init (xin lỗi về cách đặt tên ở đây ...
#! /bin/bash
function cleanup {
echo 5 > /sys/class/gpio/unexport
echo 6 > /sys/class/gpio/unexport
exit 0
}
# Clean up when exit
trap cleanup EXIT
trap cleanup SIGHUP
trap cleanup SIGQUIT
trap cleanup SIGINT
trap cleanup SIGTERM
echo 5 > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio5/direction
echo 1 > /sys/class/gpio/gpio5/value
sleep 0.000030 # 30us
echo 0 > /sys/class/gpio/gpio5/value
sleep 0.000030 # 30us
echo 1 > /sys/class/gpio/gpio5/value
sleep 0.001
echo 6 > /sys/class/gpio/export
echo "in" > /sys/class/gpio/gpio6/direction
echo "rising" > /sys/class/gpio/gpio6/edge
sleep infinity
exit 0
Một vài điều ở đây. Đầu tiên tôi sử dụng echo GPIO_PIN> / sys / class / gpio / export để xuất mã pin, tương tự để thiết lập cạnh IN / OUT 1/0 INTERRUPT. Bạn có thể tùy chỉnh nó theo nhu cầu của bạn.
Tôi sử dụng sleep infinity
để cho nó chạy mãi mãi
Tôi nắm bắt bất kỳ tín hiệu ngắt nào và thực hiện chức năng dọn dẹp trong đó tôi không thể hiện được mã PIN GPIO.
Một lần nữa làm cho tập lệnh này chỉ có thể ghi vào root (vì lý do bảo mật) và đặt nó dưới / usr / loca / bin
Kiểm tra với sudo /etc/init.d/gpio_init start
vàsudo /etc/init.d/gpio_init stop
Và một khi đã sẵn sàng sử dụng sudo update-rc.d gpio-init defaults
để chạy tập lệnh khi khởi động