web-dev-qa-db-ja.com

「Sudo」なしで(Raspberry Piの)GPIOにアクセスする

もちろん、この質問はRaspberry Piに固有のものではないかもしれません。また、私はLinuxを比較的初めて使用します。

Sysfsを使用してRaspberry PiのGPIOにアクセスするための小さなライブラリー(重要な場合はnode.jsに)を書きたいと思います。ただし、sysfsへのアクセスにはSudoアクセスが必要です。これは明らかな理由で悪いことです。

Quick2Wire には解決策があるようですが、私はそれをより良く理解し、盲目的に使用するだけではありません。彼らはもちろんCを使用しましたが、私が理解しているところによると、コードは複雑ではなく、エレガントではなくても、おそらくbashだけで引き出すことができます。しかし、何よりもなぜなぜ機能するのかわかりません。

どんな助けも素晴らしいでしょう。

編集:コメントをありがとう。質問を言い換える必要があるのは明らかです。ここに行きます:(rootとして)インストールすると、アプリが使用するためにこれ以上root権限を必要としないのはなぜですか?この場合、グループに誰かを追加するとどのように役立ちますか? /sys/devices/virtual/gpioはgpio sysfsが利用できる場所ではないので、それを行う際の注意点は何ですか?私は本当にn00bなので、これらの質問はn00bっぽいかもしれないので、ご容赦ください。

20
Rakesh Pai

ラケシュ、私はちょうど同じことを理解しようとしているだけで、私はそれを解決したと思います。

Makefileの多くをまったく理解する必要はありません。重要な行は次のとおりです。これらは_Sudo make install_を実行するとbashで実行されます

_install: install-files
    groupadd -f --system gpio
    chgrp gpio $(DESTDIR)/bin/gpio-admin
    chmod u=rwxs,g=rx,o= $(DESTDIR)/bin/gpio-admin
_

_groupadd -f --system gpio_は、gpioというシステムグループを作成します。 chgrp gpio $(DESTDIR)/bin/gpio-adminは、バイナリ(Cファイルgpio-admin.cがコンパイルされた先)のグループをgpioに変更します。バイナリの所有者は引き続きrootです(makeをrootとして実行しているため)。chmod u=rwxs,g=rx,o= $(DESTDIR)/bin/gpio-adminは2つの重要なことを行います。まず、gpioグループのメンバーがgpio-adminを実行できるようにします。次に、gpio-adminのsetuidビットを設定します。

自分をgpioグループに追加すると、Sudoを使用せずにgpio-adminを実行できますが、gpio adminはSudoで実行されているように動作します。これにより、/ sys/class/gpio/exportファイルに書き込むことができます。また、作成されるファイル/ sys/class/gpio/gpio [ピン番号] /方向などの所有者を変更することもできます。

/ sys/class/gpio/exportのグループをgpioに変更し、それにアクセスできるように権限を設定しても

_Sudo chgrp gpio /sys/class/gpio/export /sys/class/gpio/unexport
Sudo chmod g+rwx /sys/class/gpio/export /sys/class/gpio/unexport
_

スーパーユーザー権限なしでピンをエクスポートできます

_echo 22 > /sys/class/gpio/export
_

ただし、/ sys/class/gpio/gpio22/directionなどのファイルは、所有者およびグループとしてrootを使用して作成されるため、Sudoを使用して変更する必要があります。また、エクスポートおよびアンエクスポートファイルの所有権は、再起動するたびにルートに戻ります。

20
Harry Braviner