Armadilloフォーラム

GPIOがexport/unexportできなくなってしまった

iwaya_yoke

2024年9月17日 14時24分

以下のgpioの設定が残ったままで、export/unexportもできなくなってしまったのですが、
この問題を解消する方法についてご教授いただけないでしょうか?
/sys/class/gpio/gpio116

※再起動や初期化インストールは実施してみましたが、問題は解消されませんでした
※他のI/O(例えばgpio117)はexport/unexportはできます

この状態になるまでにやったことは以下の通りです。
1.以下のURLにあるGPIO制御を試した(正常にI/O制御できた)
※gpio116はGPIO3_IO20なのでこの設定だけ異なります
https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_p…

2.社内ライブラリは以下の640で記載されているような方法で制御を実施していたので、
この方法に従ってecho/catでI/O制御を試してみた
※directionがなかったので入出力設定ができなかった
https://manual.atmark-techno.com/armadillo-640/armadillo-640_product_ma…

コメント

溝渕です。

> 以下のgpioの設定が残ったままで、export/unexportもできなくなってしまったのですが、
> この問題を解消する方法についてご教授いただけないでしょうか?
> /sys/class/gpio/gpio116

上記挙動から、Linuxカーネルで明示的にgpioのlinkを作ったものと推測します。Armadillo-IoT A6Eの場合は、EMS31-Jの制御に利用されるGPIO4_IO29のみlinkが作られます。

Linuxカーネルに、gpio_export_link(または類似のAPI)を呼ぶカスタマイズや、Device Treeのカスタイマイズを行いましたか?

もし行っていない場合は、再度初期化インストールを試してみてください。そのとき、現在動作しているものと異なるバージョンでインストールを行ってみてください。起動後、意図したバージョンとなっている事を確認してみてください。

溝渕さま

ご回答ありがとうございます。

> Linuxカーネルに、gpio_export_link(または類似のAPI)を呼ぶカスタマイズや、Device Treeのカスタイマイズを行いましたか?

おそらく行っていないと思うのですが、Armadillo上で色々試している中で意図せず余計なことをしているかもしれません。

> もし行っていない場合は、再度初期化インストールを試してみてください。そのとき、現在動作しているものと異なるバージョンでインストールを行ってみてください。起動後、意図したバージョンとなっている事を確認してみてください。

base os 3.20だったので、3.18のインストールディスクで初期化を実施してみたのですが、gpio116は残ったままでした(base osは3.18になっていました)。

追加で確認したいのですが、A6EのGPIO制御の説明でsysfs GPIOクラスの使用はオススメしません、と記載がありますが、
これは/sys/class/gpio/[GPIO]のファイルを読み書きする方法は非推奨という理解でよいでしょうか?
また、pythonで開発していて、pipでgpiodというパッケージを入れてIO制御をしようと考えていますが、この方法で問題ないでしょうか?
この方法で行う場合、sys/class/gpio/gpio116が残っていても動作に支障がなければ、そのまま放っておいても良いかなと思っています。

溝渕です。

まず、gpio番号の誤認に気付かずに、見当違いなアドバイスをして申し訳ありませんでした。

> 追加で確認したいのですが、A6EのGPIO制御の説明でsysfs GPIOクラスの使用はオススメしません、と記載がありますが、
> これは/sys/class/gpio/[GPIO]のファイルを読み書きする方法は非推奨という理解でよいでしょうか?

上記ご理解で正しいです。

Linuxカーネルソースに含まれる以下のドキュメントの通り、gpio sysfsは新規実装非推奨となっています。

Documentation/admin-guide/gpio/sysfs.rst
> THIS ABI IS DEPRECATED, THE ABI DOCUMENTATION HAS BEEN MOVED TO
> Documentation/ABI/obsolete/sysfs-gpio AND NEW USERSPACE CONSUMERS
> ARE SUPPOSED TO USE THE CHARACTER DEVICE ABI. THIS OLD SYSFS ABI WILL
> NOT BE DEVELOPED (NO NEW FEATURES), IT WILL JUST BE MAINTAINED.

> また、pythonで開発していて、pipでgpiodというパッケージを入れてIO制御をしようと考えていますが、この方法で問題ないでしょうか?

問題無いとの認識です。
#ソフトウェアにバグが無い事を証明できない以上、gpiodにバグが無い事を保証するものでは無い事をご了承ください。

pythonのgpiod[1]は、(LinuxカーネルでDEPRECATED扱いではない)libgpiodのbindingです。

[1]:https://pypi.org/project/gpiod/

at_dominique.m…

2024年9月17日 15時59分

iwaya_yokeさん

よこからすみません、
マルティネです。

> 以下のgpioの設定が残ったままで、export/unexportもできなくなってしまったのですが、
> この問題を解消する方法についてご教授いただけないでしょうか?
> /sys/class/gpio/gpio116
>
> この状態になるまでにやったことは以下の通りです。
> 1.以下のURLにあるGPIO制御を試した(正常にI/O制御できた)
> ※gpio116はGPIO3_IO20なのでこの設定だけ異なります
> https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_p…

gpio116 は GPIO4_IO20 ですね、gpiochip3 は GPIO4 です

そのピンは armadillo-iotg-a6e-ems31.dtbo / reset-ems31.c でちょうど gpio_export_link (lte_gpio25) を制御しています。
モデムの制御に利用しています

何かのピンの勘違いだけでしょうか?

ちなみに、一般的には /sys/class/gpio より gpiolib (gpioget/gpioset/gpioinfo) を推奨しています。
そのピンの名前はちゃんと設定されてないですね、今後のアップデートで修正します。

よろしくお願いします

マルティネさま

ありがとうございます。
おっしゃる通り116はGPIO4_IO20で、GPIO3_20は84でした。
/sys/class/gpioで84を制御したら、適切に制御できました。
お手数おかけしました。

また、/sys/class/gpioが非推奨の件、行き違いで既に溝渕さまの方に確認をさせていただいていますが、
pythonのgpiodというパッケージを使用して制御することを考えています。
こちらで問題ないでしょうか?