Armadilloフォーラム

CGIでLED点灯

firmproducts

2022年7月26日 20時00分

LighttpdサーバをArmadillo-IOTA6へインストールし、
C言語によるCGIを用いてネットワーク経由で
Armadillo基板のLED点灯制御を行いたいです。
下記サイトのサンプルを参考にやってみたのですが、
上手くLED点灯出来ませんでした。
https://armadillo.atmark-techno.com/index.php/blog/615/1238
添付しました”Lighttpd.conf”でCGI用に編集したつもりですが、
間違っている部分が有れば、ご教示頂けたら有難いです。
又CGIファイルの配置フォルダの指定はどこで行うのでしょうか?
教示宜しくお願い致します。

ファイル ファイルの説明
lighttpd.conf lighttpd設定ファイル
redled.cpp C言語LED点灯プログラム
コメント

> LighttpdサーバをArmadillo-IOTA6へインストールし、
> C言語によるCGIを用いてネットワーク経由で
> Armadillo基板のLED点灯制御を行いたいです。
> 下記サイトのサンプルを参考にやってみたのですが、
> 上手くLED点灯出来ませんでした。
> https://armadillo.atmark-techno.com/index.php/blog/615/1238
> 添付しました”Lighttpd.conf”でCGI用に編集したつもりですが、
> 間違っている部分が有れば、ご教示頂けたら有難いです。
> 又CGIファイルの配置フォルダの指定はどこで行うのでしょうか?
> 教示宜しくお願い致します。

at_mitsuhiro.yoshida

2022年7月27日 17時13分

吉田です。

arm-linux-gnueabi-gcc redled.c -o redled.cgi

arm-linux-gnueabihf-gcc redled.c -o redled.cgi
として
Armadillo の /var/www/html/ に redled.cgi を配置するといかがでしょうか。

> 又CGIファイルの配置フォルダの指定はどこで行うのでしょうか?
に関しては試しておりませんが、以下の記事が参考になるかと思います。
https://qiita.com/developer-kikikaikai/items/f01599109ba1370a40d7
https://www.cyberciti.biz/tips/configure-lighttpd-alias-mod_alias.html

ご回答有難うございます。
最初に、下記のようにLEDポートへroot以外での書き込み許可していたのですが、
Armadilloをリブートすると元に戻ってました。
chmod 666 /sys/class/leds/red/brightness
書き込み許可を再度与えたら、無事点灯するようになりました。
毎回起動時にroot権限(sudo)で書き込み許可をするのは仕方無いのでしょうか?
他に良い方法が有りましたら教えて頂けると有難いです。
宜しくお願い致します。

アットマークテクノの古賀です。

firmproductsさん:
>ご回答有難うございます。
>最初に、下記のようにLEDポートへroot以外での書き込み許可していたのですが、
>Armadilloをリブートすると元に戻ってました。
>chmod 666 /sys/class/leds/red/brightness
>書き込み許可を再度与えたら、無事点灯するようになりました。
>毎回起動時にroot権限(sudo)で書き込み許可をするのは仕方無いのでしょうか?
>他に良い方法が有りましたら教えて頂けると有難いです。
>宜しくお願い致します。

CGI の実行ファイル(redled.cgi)のオーナーを sudo chown で root にして、さらに sudo chmod u+s で setuid パーミッションを設定するというのは、いかがでしょうか?
 https://blog.fenrir-inc.com/jp/2012/02/file_permission.html

齊藤と申します。
armadilloは起動するたびにudevでデバイスファイルを作ってたはず(Armadillo実践開発ガイドより)なので、
/etc/udev/rules.d/ のルールを書き換えるのではダメでしょうか?

有用な情報有難うございます。
ご教示頂いたアイデアで以下試しました。
ルール作成 >> /etc/udev/rules.d/85-gpio.rules
SUBSYSTEM=="gpio*", PROGRAM="/root/setup_gpio.sh"
スクリプト作成 >> /root/setup_gpio.sh
echo 105 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio105/direction
echo 0 > /sys/class/gpio/gpio105/value
chown root /sys/class/gpio/gpio105/direction /sys/class/gpio/gpio105/value
chmod u+s /sys/class/gpio/gpio105/direction /sys/class/gpio/gpio105/value

この方法で、OS起動時にGPIO初期化を行うことが出来ました。
 ところが通常ユーザ(atmark)でログインして
echo 1 > /sys/class/gpio/gpio105/value
を実行すると、Permission deniedが出力されます。
 通常ユーザ(atmark)でも(次のwww-dataユーザ)操作できる設定はどうすれば良いでしょうか?
 ご教示宜しくお願い致します。

 
 

アットマークテクノ古賀様 齊藤様
ご対応有難うございました。

追加で以下修正行いました。

/root/setup_gpio.sh
chmod 666 /sys/class/gpio/gpio105/direction /sys/class/gpio/gpio105/value

CGI の実行ファイル(redled.cgi)
パーミッション > 755

上記修正したところ、
WWWからのGPIOアクセスも正常に行うことが出来ました。

有難うございました。