Homepage Wiki Forum Buy

Berechtigungen GPIO

Aus GNUBLIN

Wenn man sich als Superuser ('root') auf dem Gnublin einlogt, findet man im Home Verzeichnis bereits jede Menge Beispiele, wie man auf General Purpose IOs (GPIO) zugreifen kann. Die Kombination aus Hardware und Linux macht ja genau den Reiz dieses Boards aus.

Zu den elementaren Sicherheitsheitsregeln unter Linux gehört es jedoch, so wenig wie möglich als 'root' zu arbeiten. Die Beispielscripts erfordern jedoch root Rechte, um die files für den Zugriff auf die Hardware anzulegen.

Hier ist ein Kochrezept, um die files bereits beim Hochlauf anzulegen und an einen bestimmten user oder eine Gruppe zu verschenken.

Anlegen gpio.conf

Man legt ein file /etc/gpio.conf an mit (z.B.) folgendem Inhalt:

# configuration for user access to gpio ports
# syntax is portnr=configstring, where portnr is the 
# decimal port nr (e.g. 15) and configstring the direction
# legal config strings are "in", "out", "high" and "low"

3=out # onboard LED
15=out
14=in


Anlegen gpio

Man erzeugt ein file /etc/init.d/gpio mit diesem Inhalt:

#!/bin/bash
### BEGIN INIT INFO
# Provides:          gpio
# Required-Start:    
# Required-Stop:     
# Should-Start:      
# Should-Stop:       
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: 'Publish' access to general purpose I/Os
### END INIT INFO

USER=root
GROUP=lighttpd

g_start() {
	echo "$1" > /sys/class/gpio/export
	echo "$2" > /sys/class/gpio/gpio$1/direction
	chmod 777 /sys/class/gpio/gpio$1
	chmod 777 /sys/class/gpio/gpio$1/*
}

start_g() {
CONF=`sed s/#.*// /etc/gpio.conf`

for i in $CONF ; do
	w="${i/=/ }"
	g_start $w
done
}


g_stop() {
	echo $1 > /sys/class/gpio/unexport
}

stop_g() {
CONF=`sed s/#.*// /etc/gpio.conf`

for i in $CONF ; do
	w="${i/=/ }"
	g_stop $w
done
}

case "$1" in
    start)
	start_g
	;;
    stop)
	stop_g
	;;
    reload|force-reload)
        ;;
    restart)
	stop_g
	start_g 
	;;
    status)
	if [[ -d /sys/class/gpio/gpio3 ]] ; then
		exit 0
	else
		exit 1
	fi
        ;;
    *)
        echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload|status}" >&2
        exit 1
        ;;
esac

exit 0

Man kann hier beliebige user und Gruppen eintragen. Die Gruppe lighttpd ist aber ganz praktisch, wenn man später mit dem Webserver auf die Ports zugreifen will.

Kopieren der Dateien

Zum Schluß wird noch mit

ln -s /etc/init.d/gpio /etc/rc5.d/S40gpio

ein link erzeugt, über den beim nächsten Hochlauf das script auch ausgeführt wird. Man kann das script zum Test gleich mal ausführen:

/etc/rc5.d/S40gpio start

und sollte dann die GPIOs mit den gewünschten Zugriffsrechten eingerichtet haben.

In anderen Sprachen