20

もちろん、この質問はラズベリーパイに固有のものではないかもしれません. また、私は比較的 Linux に慣れていません。

sysfs を使用してラズベリー pi の GPIO にアクセスするための小さなライブラリ (問題がある場合は node.js) を作成したいと考えています。ただし、sysfs へのアクセスには sudo アクセスが必要であり、これは明らかな理由から不適切です。

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

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

編集:コメントありがとうございます。質問を言い換える必要があることは明らかです。これは次のとおりです: 一度 (root として) インストールされると、アプリはそれ以上 root パーマを使用する必要がないのはなぜですか? この場合、グループに誰かを追加するとどのように役立ちますか? /sys/devices/virtual/gpiogpio sysfs が利用可能な場所ではないので、そのトリックは何ですか? 私は本当に初心者なので、これらの質問は初心者っぽいかもしれませんが、ご容赦ください。

4

1 に答える 1

20

Rakesh、私はまったく同じことを理解しようとしてきましたが、解決したと思います.

makefile の多くを理解する必要はまったくありません。重要な行は次のとおりです。実行時に bash で実行されます。sudo make install

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 gpiogpio というシステム グループを作成します。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 を使用する必要があります。また、エクスポート ファイルとアンエクスポート ファイルの所有権は、再起動するたびに root に戻ります。

于 2012-09-13T17:02:53.763 に答える