カーネル空間内でGPIOを制御するための独自のドライバを開発することも可能ですが、ユーザー空間からGPIOにアクセスするためのより簡単な方法があります。タイミング要件が問題にならない場合は、GPIO-SYSFSを使用できます。
SYSFSは、カーネル内部フレームワークの一部の機能をユーザー空間にエクスポートする仮想ファイル・システムであり、GPIOはSYSFSを通じて機能をエクスポートできるフレームワークの1つです。
GPIO-SYSFS機能は2.6.27以降のすべてのメインライン・カーネルで使用可能です。
SYSFSでGPIOを有効にするには、次のカーネル・オプションを選択してください:
デバイスドライバー ---> --- GPIOサポート [*] /sys/class/gpio/...(sysfsインターフェース)
GPIO-SYSFS 機能を有効にした後、新しいカーネルでデバイスを起動してテストを行うことができます。
まず、テストするGPIOをユーザー空間にエクスポートする必要があります:
echo XX > /sys/class/gpio/export
XXは、次のアルゴリズムによって特定されます:
GPIOA_[B]はエクスポートしたいGPIOです。ここで、「A」はGPIOバンク、「B」はバンク内のピンのオフセットです。 最初の利用可能なGPIOバンクが0の場合//(たとえばiMX.28) XX = A×32 + B; それ以外の場合//最初のGPIOバンクは1 XX =(A-1)×32 + B;
GPIOピンをエクスポートした後、次の場所にエクスポートされたGPIOインターフェースを確認できるようになります:
/sys/class/gpio/gpioXX
このインターフェースを通じて、次のようなことができるようになります:
#ピンの値を読みます cat /sys/class/gpio/gpioXX/value #ピンの向きを変える > /sys/class/gpio/gpioXX/directionにエコーイン エコーアウト> /sys/class/gpio/gpioXX/direction # GPIO出力レベルの切り替え echo 0 > /sys/class/gpio/gpioXX/value echo 1 > /sys/class/gpio/gpioXX/value
これは愚かな質問かもしれませんが、どのピンがgpioXXに物理的にリンクされているかを知るにはどうすればよいでしょうか?