oobu_eiichi
2014年11月4日 10時12分
お世話になっております。
日立産業制御ソリューションズ 大部です。
現在、800EVAでGPIOをユーザーから制御するために、sys/class/gpio を使用し、
directionやHiまたはLoを出力しようとしていますが、sys/classの下にgpioが存在
しておらず、open("/sys/class/gpio/export", O_RDWR); でエラーとなっている状況です。
sys/classの下にgpioを作成するにはどうしたらよろしいでしょうか?
環境としては以下の通り。
ATDE4を使用。
800EVAボードを使用。
実施した手順としては
① linux-2.6.35-a800eva-at3 にて以下のコマンドを実行。
make ARCH=arm mrproper
make ARCH=arm armadillo800eva_android_defconfig
② make ARCH=arm menuconfig
でDevice Drivers ---->
を選択し、GPIO Support ----->
を選択し、/sys/class/gpio/・・・(sysfs interface )
を有効(チェックする)にし、最初のページまで戻り、
save an Alternate Configuration File
を選択し、Yesを選択し、保存する。
③ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
④ /sys/class でlsしてもgpioフォルダが作成されていない。
大変、急で申し訳ないのですが11/6(木)までにご回答をお願いします。
コメント
at_hanada
花田です。
> 現在、800EVAでGPIOをユーザーから制御するために、sys/class/gpio を使用し、
> directionやHiまたはLoを出力しようとしていますが、sys/classの下にgpioが存在
> しておらず、open("/sys/class/gpio/export", O_RDWR); でエラーとなっている状況です。
> sys/classの下にgpioを作成するにはどうしたらよろしいでしょうか?
Armadillo-800 EVAで使っているカーネル2.6.35におけるルネサスSoC向けgpioのコード、
このボードではarch/arm/mach-shmobile/board-armadillo800eva.c内にあるのですが、
これは/sys/devices/platform下に分類された形で使用されるものしかexportされてないですね。
> ② make ARCH=arm menuconfig
> でDevice Drivers ---->
> を選択し、GPIO Support ----->
> を選択し、/sys/class/gpio/・・・(sysfs interface )
> を有効(チェックする)にし、最初のページまで戻り、
> save an Alternate Configuration File
> を選択し、Yesを選択し、保存する。
この設定自体はまったく正しいです。
ただ汎用GPIOとしてexportされているGPOIが一つもないため、見えないのではないかと思います。
使用したいGPIOがどれか書かれていなかったので、ここではSDHI0_CD(SDカードスロット0の挿入検出)を例にとります。
arch/arm/mach-shmobile/board-armadillo800eva.cの1213行目にこんな記述があります。
gpio_request(GPIO_PORT167, NULL); /* SDHI0_CD */
gpio_direction_input(GPIO_PORT167);
これだけですと、GPIOとして予約してカーネル内部で使用するよう設定する意味しか持ちません。
外部から制御可能な汎用GPIOとして使用するには、gpio_export関数を用いて属性をtrueにします。
gpio_request(GPIO_PORT167, NULL); /* SDHI0_CD */
gpio_export(GPIO_PORT167, true);
gpio_direction_input(GPIO_PORT167);
これでビルドしなおしてカーネルを書き換えると、/sys/class/gpio下に
/sys/class/gpio/export
/sys/class/gpio/unexport
/sys/class/gpio/gpiochip0
/sys/class/gpio/gpio167
が見えました。
gpio167ディレクトリ下には、
active_low direction power/ subsystem/ uevent value
といったものが並びます。
このような形で試してみてください。
oobu_eiichi
花田様
日立産業制御ソリューションズ 大部です。
ご教授ありがとうございました。
確認できました。
> 花田です。
>
> > 現在、800EVAでGPIOをユーザーから制御するために、sys/class/gpio を使用し、
> > directionやHiまたはLoを出力しようとしていますが、sys/classの下にgpioが存在
> > しておらず、open("/sys/class/gpio/export", O_RDWR); でエラーとなっている状況です。
> > sys/classの下にgpioを作成するにはどうしたらよろしいでしょうか?
>
> Armadillo-800 EVAで使っているカーネル2.6.35におけるルネサスSoC向けgpioのコード、
> このボードではarch/arm/mach-shmobile/board-armadillo800eva.c内にあるのですが、
> これは/sys/devices/platform下に分類された形で使用されるものしかexportされてないですね。
>
> > ② make ARCH=arm menuconfig
> > でDevice Drivers ---->
> > を選択し、GPIO Support ----->
> > を選択し、/sys/class/gpio/・・・(sysfs interface )
> > を有効(チェックする)にし、最初のページまで戻り、
> > save an Alternate Configuration File
> > を選択し、Yesを選択し、保存する。
>
> この設定自体はまったく正しいです。
> ただ汎用GPIOとしてexportされているGPOIが一つもないため、見えないのではないかと思います。
>
> 使用したいGPIOがどれか書かれていなかったので、ここではSDHI0_CD(SDカードスロット0の挿入検出)を例にとります。
> arch/arm/mach-shmobile/board-armadillo800eva.cの1213行目にこんな記述があります。
>
> gpio_request(GPIO_PORT167, NULL); /* SDHI0_CD */
> gpio_direction_input(GPIO_PORT167);
>
> これだけですと、GPIOとして予約してカーネル内部で使用するよう設定する意味しか持ちません。
> 外部から制御可能な汎用GPIOとして使用するには、gpio_export関数を用いて属性をtrueにします。
>
> gpio_request(GPIO_PORT167, NULL); /* SDHI0_CD */
> gpio_export(GPIO_PORT167, true);
> gpio_direction_input(GPIO_PORT167);
>
> これでビルドしなおしてカーネルを書き換えると、/sys/class/gpio下に
>
> /sys/class/gpio/export
> /sys/class/gpio/unexport
> /sys/class/gpio/gpiochip0
> /sys/class/gpio/gpio167
>
> が見えました。
> gpio167ディレクトリ下には、
> active_low direction power/ subsystem/ uevent value
> といったものが並びます。
>
> このような形で試してみてください。
at_yashi
2014年11月5日 17時49分
GPIO_SYSFS
が選択されていれば出ると思いますが...。make した後に、カーネルを書き換えていないとかないですよね?